07 padrões de projeto -...

30
Padrões de Projeto Parte 1 Prof. Fellipe Aleixo ( [email protected])

Upload: truongkhanh

Post on 28-Jan-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Padrões deProjetoParte1

Prof.FellipeAleixo([email protected])

PadrõesdeProjetodeSoftwareOO

• Tambémconhecidoscomo• PadrõesdeProjetodeSoftwareOO• ousimplesmentecomoPadrões

AInspiração

• Aidéia depadrõesfoiapresentadaporChristopherAlexanderem1977nocontextodeArquitetura(deprédiosecidades):• Cadapadrãodescreveumproblemaqueocorrerepetidamentedenovoedenovoemnossoambiente,eentãodescreveapartecentraldasolução paraaqueleproblemadeumaformaquevocêpodeusarestasoluçãoummilhãodevezes,semnuncaimplementa-laduasvezesdamesmaforma

• Livros• TheTimelessWayof Building• APattern Language:Towns,Buildings,and Construction• serviramdeinspiraçãoparaosdesenvolvedoresdesoftware

CatálogodeSoluções

• Umpadrãoencerraoconhecimentodeumapessoamuitoexperienteemumdeterminadoassuntodeumaformaqueesteconhecimentopodesertransmitidoparaoutraspessoasmenosexperientes•Outrasciências(p.ex.química)eengenhariaspossuemcatálogosdesoluções•Desde1995,odesenvolvimentodesoftwarepassouateroseuprimeirocatálogodesoluçõesparaprojetodesoftware:olivroGoF

GangofFour(GoF)

• E.Gamma and R.Helm andR.Johnson and J.Vlissides.DesignPatterns - Elements ofReusable Object-OrientedSoftware.Addison-Wesley,1995.

GangofFour(GoF)

•Passamosaterumvocabuláriocomumparaconversarsobreprojetosdesoftware

• Soluçõesquenãotinhamnomepassamaternome

•Aoinvésdediscutirmosumsistemaemtermosdepilhas,filas,árvoreselistasligadas,passamosafalardecoisasdemuitomaisaltonívelcomoFábricas,Fachadas,Observador,Estratégia,etc.

GangofFour(GoF)

•AmaioriadosautoreseramentusiastasdeSmalltalk,principalmenteoRalphJohnson

•MasacabarambaseandoolivroemC++paraqueoimpactojuntoàcomunidadedeCCfossemaior.Eoimpactofoienorme,olivrovendeucentenasdemilharesdecópias

OFormatodeumPadrão

• Todopadrãoinclui• Nome• Problema• Solução• Conseqüências /Forças

• ExistemoutrostiposdepadrõesmasnaauladehojevamosnosconcentrarnoGoF

OFormatodospadrõesnoGoF

• Nome (incluinúmerodapágina)• umbomnomeéessencialparaqueopadrãocaianabocadopovo

• Objetivo/Intenção• TambémConhecidoComo•Motivação• umcenáriomostrandooproblemaeanecessidadedasolução

• Aplicabilidade• comoreconhecerassituaçõesnasquaisopadrãoéaplicável

• Estrutura• umarepresentaçãográficadaestruturadeclassesdopadrão(usandoOMT91)em,àsvezes,diagramasdeinteração(Booch 94)

• Participantes• asclasseseobjetosqueparticipamequaissãosuasresponsabilidades

OFormatodospadrõesnoGoF

• Colaborações• comoosparticipantescolaboramparaexercerassuasresponsabilidades

• Conseqüências• vantagensedesvantagens,trade-offs

• Implementação• comquaisdetalhesdevemosnospreocuparquandoimplementamosopadrão

• aspectosespecíficosdecadalinguagem• ExemplodeCódigo

• nocasodoGoF,emC++(amaioria)ouSmalltalk• UsosConhecidos

• exemplosdesistemasreaisdedomíniosdiferentesondeopadrãoéutilizado• PadrõesRelacionados

• quaisoutrospadrõesdevemserusadosemconjuntocomesse• quaispadrõessãosimilaresaeste,quaissãoasdierenças

TiposdePadrõesdeProjeto

•CategoriasdePadrõesdoGoF1. PadrõesdeCriação2. PadrõesEstruturais3. PadrõesComportamentais

•Naauladehoje:• PadrãodeCriaçãodeobjetos:FábricaAbstrata(AbstractFactory)

FábricaAbstrata

•Objetivo:proverumainterfaceparacriaçãodefamíliasdeobjetosrelacionadossemespecificarsuaclasseconcreta

FábricaAbstrata– Motivação

•Considereumaaplicaçãocominterfacegráficaqueéimplementadaparaplataformasdiferentes(MotifparaUNIXeoutrosambientesparaWindowseMacOS)• Asclassesimplementandooselementosgráficosnãopodemserdefinidasestaticamentenocódigo• Precisamosdeumaimplementaçãodiferenteparacadaambiente• Atéemummesmoambiente,gostaríamosdedaraopçãoaousuáriodeimplementardiferentesaparências(look-and-feel)

FábricaAbstrata– Motivação

•Podemossolucionaroreferidoproblemadefinindoumaclasseabstrataparacadaelementográficoeutilizandodiferentesimplementaçõesparacadaaparênciaouparacadaambiente

•Aoinvésdecriarmosasclassesconcretascomooperadornew,utilizamosumaFábricaAbstrataparacriarosobjetosemtempodeexecução

•Ocódigoclientenãosabequalclasseconcretautilizamos

FábricaAbstrata– Aplicabilidade

•Useumafábricaabstrataquando:• umsistemadeveserindependentedaformacomoseusprodutossãocriadoserepresentados;• umsistemadevepoderlidarcomumafamíliadeváriosprodutosdiferentes;• vocêquerproverumabibliotecadeclassesdeprodutosmasnãoquerrevelarassuasimplementações,querrevelarapenassuasinterfaces.

Fábrica Abstrata – Estrutura

AbstractProductA

ProductA1

Client

ProductA2

AbstractFactory

CreatProductA()

CreatProductB()

ConcreteFactory2

CreatProductA()

CreatProductB()

ConcreteFactory1

CreatProductA()

CreatProductB()

AbstractProductB

ProductB1ProductB2

FábricaAbstrata– Participantes

• AbstractFactory (WidgetFactory)

• ConcreteFactory (MotifWidgetFactory,WindowsWidgetFactory)

• AbstractProduct (Window,ScrollBar)

• ConcreteProduct (MotifWindow,MotifScrollBar,WindowsWindow,WindowsScrollBar)

• Client - usaapenasasinterfacesdeclaradaspelaAbstractFactory epelasclassesAbstratProduct

FábricaAbstrata– Colaborações

•Normalmente,apenasumainstânciadeConcreteFactory écriadaemtempodeexecução.

• EstainstânciacriaobjetosatravésdasclassesConcreteProduct correspondentesaumafamíliadeprodutos

•UmaAbstractFactory deixaacriaçãodeobjetosparaassuassubclassesConcreteFactory

FábricaAbstrata– Conseqüências

•Opadrão1. isolaasclassesconcretasdosclientes;2. facilitaatrocadefamíliasdeprodutos(bastatrocar

umalinhadocódigopoisacriaçãodafábricaconcretaapareceemumúnicopontodoprograma);

3. promoveaconsistênciadeprodutos(nãoháoperigodemisturarobjetosdefamíliasdiferentes);

4. dificultaacriaçãodenovosprodutosligeiramentediferentes(poistemosquemodificarafábricaabstrataetodasasfábricasconcretas).

FábricaAbstrata– Implementação

• Nafábricaabstrata,cria-seummétodofábricaparacadatipodeproduto.Cadafábricaconcretaimplementaocódigoquecriaosobjetosdefato

• Setivermosmuitasfamíliasdeprodutos,teríamosumexcessodeclasses“fábricasconcretas”

• Pararesolveresteproblema,podemosusaroPrototype:criamosumdicionáriomapeandotiposdeprodutoseminstânciasprototípicasdestesprodutos

• Então,semprequeprecisarmoscriarumnovoprodutopedimosàsuainstânciaprototípicaquecrieumclone(usandoummétodocomoclone() ou copy()).

Fábrica Abstrata – Implementação

• EmlinguagensdinâmicascomoSmalltalk ondeclassessãoobjetosdeprimeiraclasse,nãoprecisamosguardarumainstânciaprototípica,guardamosumareferênciaparaaprópriaclasseedaíutilizamosométodonewparaconstruirasnovasinstâncias

• Definindofábricasextensíveis• normalmente,cadatipodeprodutotemoseuprópriométodofábrica;issotornaainclusãodenovosprodutosdifícil• solução:usarapenasummétodofábrica

• Product make (string thingToBeMade)• issoaumentaaflexibilidademastornaocódigomenosseguro(nãoteremosverificaçãodetipospelocompilador)

Fábrica Abstrata – ExemplosdeCódigo•OGoF contémexemplosemC++eSmalltalk

•NaspróximasaulasveremosexemplosemJava

Fábrica Abstrata – UsosConhecidos

• InterViews usafábricasabstratasparaencapsulardiferentestiposdeaparênciasparasuainterfacegráfica

• ET++usafábricasabstratasparapermitirafácilportabilidadeparadiferentesambientesdejanelas(XWindows eSunView,porexemplo)

Fábrica Abstrata – UsosConhecidos

• SistemadecapturaereproduçãodevídeofeitonaUIUCusafábricasabstratasparapermitirportabilidadeentrediferentesplacasdecapturadevídeo

• EmlinguagensdinâmicascomoSmalltalk (etalvezemPOOemgeral)classespodemservistascomofábricasdeobjetos

Fábrica Abstrata – PadrõesRelacionados• Fábricasabstratassãonormalmenteimplementadascommétodosfábrica(FactoryMethod)maspodemtambémserimplementadosusandoPrototype

•OusodeprotótiposéparticularmenteimportanteemlinguagensnãodinâmicascomoC++eemlinguagens"semi-dinâmicas"comoJava

Fábrica Abstrata – PadrõesRelacionados• EmSmalltalk,nãoétãorelevante• Curiosidade:alinguagemSelf nãopossuiclasses,todacriaçãodeobjetoséfeitaviaclonagem

•UmafábricaconcretaénormalmenteumSingleton

OsPadrõesGoF:Criacionais

•AbstractFactory•Builder• Factory Method•Prototype• Singleton

OsPadrõesGoF:Estruturais

•Adapter•Bridge•Composite•Decorator• Façade• Flyweight•Proxy

OsPadrõesGoF:Comportamentais

• Chainof Responsibility• Command• Interpreter• Iterator• Mediator• Memento

• Observer• State• Strategy• Template Method• Visitor

Recapitulando

•VoltandoaoChristopherAlexander:“Cadapadrãodescreveumproblemaqueocorrerepetidamentedenovoedenovoemnossoambiente,eentãodescreveapartecentraldasoluçãoparaaqueleproblemadeumaformaquevocêpodeusarestasoluçãoummilhãodevezes,semnuncaimplementa-laduasvezesdamesmaforma.”

• Talvezaúltimapartenãosejasempredesejável.