52
Curso - Padrões de Projeto Módulo 1: Introdução Vítor E. Silva Souza [email protected] http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net

Java Br Curso Padroesdeprojeto Slides01

Embed Size (px)

DESCRIPTION

Java

Citation preview

Curso - Padres de Projeto Mdulo 1: IntroduoVtor E. Silva [email protected]://www.javablogs.com.br/page/engenhohttp://esjug.dev.java.net2Sobre o InstrutorForma!o:"radua!o em #i$ncia da #omputa!o% com $n&ase em Engenharia de So&tware% pela 'niversidade Federal do Esprito Santo ('FES)*+estrado em ,n&orm-tica (em andamento) na mesma institui!o..ava:/esenvolvedor .ava desde 0111*Especialista em desenvolvimento 2eb*3utor do blog Engenho 4 www.javablogs.com.br/page/engenho.5ro&issional:#onsultor em /esenvolvimento de So&tware 6rientado a 6bjetos 4 Engenho de So&tware #onsultoria e /esenvolvimento 7tda.3Estrutura do Curso6 5adr!o +odel8View8#ontroller Mdulo 55adr9es de #omportamento Mdulo 45adr9es de Estrutura Mdulo 35adr9es de #ria!o Mdulo 2,ntrodu!o Mdulo 14Contedo deste mdulo6 :ue s!o e por :ue conhec$8los*#at-logos de padr9es*5adr9es de projeto na pr-tica:#omo resolvem os problemas*#omo escolher e utilizar*Framewor;s.3nti8padr9es.Curso - Padres de ProjetoMdulo 1: Introduo6 :ue s!o 5adr9es de 5rojeto e por :ue utiliz-8losperientes &azem bons projetos% novatos t$m di&iculdade*E>peri$ncia consiste em utilizar t=cnicas :ue deram certo no passado.7Nascem os padres5adr9es s!o maneiras testadas e documentadas de alcanar objetivos*5adr9es s!o comuns nas diversas -reas da engenharia*?a Engenharia de So&tware temos os 5adr9es de 5rojeto 4 /esign 5atterns.8O que so padres de proeto@#adapadr!odescreveumproblema:ue ocorrerepetidasvezesnonossoambientee% ent!o%descreveonAcleodasolu!opara a:ueleproblema%de&orma:uevoc$pode reutilizaramesmasolu!omilh9esdevezes semnunca&az$8ladamesma&ormaduas vezes.B#hristopher 3le>ander% et. al3 5attern 7anguage (01CC)9O que so padres de proeto@/escri!o de uma solu!o customizada para resolverumproblemagen=ricodeprojetoem umconte>toespec&ico.D...E'mpadr!ode projetod-nome%abstraieidenti&icaos aspectos8chavedeumaestruturadeprojeto comum para torn-8la reutiliz-vel.BErich "amma% et. al/esign 5atterns% Elements o& Feusable 6bject86riented So&tware (011G)10Como ! formado um padroHuatro elementos essenciais:?ome*/escri!o do problema e conte>to para os :uais o padr!o se aplica*/escri!o da solu!o gen=rica proposta*#onse:u$ncias da aplica!o do padr!o (custos e bene&cios).11"or que usar padres3prender com a e>peri$ncia de outros:3judam a resolver os principais problemas dos iniciantes*5ermitem :ue &aamos bons projetos mais rapidamente.6 jarg!o &acilita a comunica!o*So&tware de melhor :ualidade:+elhores pr-ticas em 66*Solu9es bem testadas e documentadas.Curso - Padres de Projeto Mdulo 1: Introduo#at-logos de 5adr9es de 5rojeto: classi&ica!o e resumo dos padr9es mais conhecidos.13Cat#lo$os de padresFegistram as e>peri$ncias bem8sucedidas de um grupo de pessoas:7ivro @/esign 5atternsB Erich "amma% Fichard Ielm% Falph .ohnson% .ohn Vlissides ("ang o& Four)*5adr9es .JEE da Sun http://java.sun.com/blueprints/patterns//entre outros...14Descri%o dos padres do &o'?ome e classi&ica!o*,nten!o*6utros nomes*+otiva!o*3plicabilidade*Estrutura*5articipantes*#olabora9es*#onse:u$ncias*,mplementa!o*#Kdigo de e>emplo*'sos conhecidos*5adr9es relacionados.15ObjetoClasseOr$ani(a%o do cat#lo$o do &o'CriaoFactorL +ethod3bstract FactorLMuilder5rototLpeSingletonEstrutura3dapter (classe)3dapter (objeto)Mridge#omposite/ecoratorFaadeFlLweight5ro>LComortame!to,nterpreterNemplate +ethod#hain o& FesponsibilitL#ommand,terator+ediator+emento6bserverStateStrategLVisitor"rositoEs#o

o16Or$ani(a%o do cat#lo$o do &o'5ropKsito:#riacional: processo de cria!o de objetos*Estrutural: composi!o de classes e objetos*#omportamental: intera!o e distribui!o de responsabilidades entre objetos e classes*Escopo:#lasse: rela!o entre classes e subclasses (herana)*6bjeto: rela!o entre objetos (associa!o% composi!o).17"adres de Cria%oFactorL +ethod (+=todo F-brica):/e&ine uma inter&ace para cria!o de objetos mas dei>a a implementa!o para as subclasses.3bstract FactorL (F-brica 3bstrata):5rov$ uma inter&ace para cria!o de &amlias de objetos relacionados sem especi&icar suas classes concretas.Muilder (#onstrutor):Separa o processo de constru!o de objetos comple>os% desacoplando a cria!o de instOncias destes objetos.18"adres de Cria%o5rototLpe (5rotKtipo):/e&ine um protKtipo dos objetos a serem usados e cria8os clonando este protKtipo.Singleton (6bjeto Pnico):"arante :ue uma classe possui somente uma instOncia e prov$ um ponto de acesso global a ela.19"adres de Estrutura3dapter (3daptador):#onverte uma inter&ace de uma classe em outra :ue objetos clientes esperam utilizar.Mridge (5onte):/esacopla uma abstra!o de sua implementa!o para :ue ambas possam variar independentemente.#omposite (#omposto):3grupa objetos de mesma inter&ace em estrutura de -rvore para tratar todos eles como se &ossem uma Anica entidade.20"adres de Estrutura/ecorator (/ecorador):Estende a &uncionalidade de um objeto dinamicamente ane>ando objetos :ue ir!o e>ecutar antes ou depois do objeto @decoradoB.Faade (Fachada):5rov$ uma inter&ace Anica (ponto central) para diversas outras inter&aces do sistema.21"adres de EstruturaFlLweight (5eso +osca):Forma um pool de objetos imut-veis para serem utilizados em diversas partes do sistema.5ro>L (5rocurador):5rov$ um intermedi-rio (procurador) :ue representa o objeto mas se comporta de &orma di&erente.22"adres de Comportamento,nterpreter (,nterpretador):#riar uma linguagem de representa!o de opera9es e construir um interpretador para essa linguagem.Nemplate +ethod (+=todo +odelo):/e&ine o es:ueleto do algortmo da opera!o na superclasse% delegando partes do mesmo para as subclasses.#hain o& FesponsibilitL (#adeia de Fepons.):+onta uma corrente de objetos :ue serve a uma re:uisi!o% dando a cada um a oportunidade de respond$8la e/ou pass-8la adiante.23"adres de Comportamento#ommand (#omando):Encapsula re:uisi9es como objetos% permitindo parametriza!o% log ou undo de &un9es.,terator (,terador):3cessar diversos elementos de um conjunto em se:u$ncia sem e>por sua representa!o interna.+ediator (+ediador):/elega a um objeto a responsabilidade de &azer outros objetos se comunicarem% tirando destes Altimos o acoplamento entre si.24"adres de Comportamento+emento (Fecorda!o):Sem violar o encapsulamento% armazena o estado atual do objeto para :ue possa ser restaurado posteriormente.6bserver (6bservador):/e&ine uma depend$ncia um8para8muitos entre objetos tal :ue :uando um objeto muda de estado% todos s!o noti&icados.State (Estado):5ermite :ue um objeto altere seu comportamente :uando mudar seu estado.25"adres de ComportamentoStrategL (Estrat=gia):/e&ine uma &amlia de algortmos% encapsula8os em objetos e permite :ue sejam intercambiados.Visitor (Visitante):Fepresenta opera9es em objetos como outros objetos com uma inter&ace comum% permitindo :ue sejam criadas novas opera9es sem alterar o objeto.26$ela#io!ame!to e!tre os "adr%esCo!sulte o li&ro do 'o( ara mais detal)es*27Outros padres"oF = a re&er$ncia cl-ssica*?ovos problemas incitam a cria!o de novos padr9es de projeto*+uitos utilizam ou s!o baseados nos padr9es j- descritos no cat-logo do "oF.Q importante conhec$8los por:ue se re&erem a domnios mais espec&icos:E>.: um desenvolvedor .JEE deve conhecer os padr9es de projeto .JEE.28Outros padres ) e*emplos+,nje!o de /epend$ncias (ou ,o#):Nira a responsabilidade do objeto encontrar sua depend$ncia% :ue = automaticamente injetada por um objeto e>terno.+odel 4 View 4 #ontroller:'tiliza 6bserver% #omposite e StrategL para de&inir uma divis!o entre dados (modelo)% inter&ace com o usu-rio (vis!o) e a lKgica de controle.29Outros padres ) e*emplos+Value 6bject (V6 / /N6):#ria uma cKpia do objeto de domnio com algumas in&orma9es necess-rias e envia8a como parOmetro no lugar do objeto original./ata 3ccess 6bject (/36):/elega a uma classe espec&ica toda a lKgica de acesso a dados persistentes (banco de dados).Curso - Padres de Projeto Mdulo 1: Introduo5adr9es de 5rojeto na 5r-tica: como os padr9es resolvem problemas% como selecion-8los e utiliz-8los.31Determinando os obetos mais apropriados/ecompor um sistema em objetos = di&cil. V-rias :uest9es:Encapsulamento% granularidade% depend$ncias% &le>ibilidade% desempenho% evolu!o% reusabilidade% etc.5adr9es de projeto podem ajudar:,denti&ica!o de abstra9es menos Kbvias de conceitos n!o presentes na natureza% como um algortmo ou um estado.32Determinando a $ranularidade ideal'm objeto pode representar uma aplica!o inteira ou um detalhe minAsculo. #omo escolherplica como representar sistemas inteiros num sK objeto*FlLweight descreve como utilizar muitos objetos de pe:uena granularidade*3bstract FactorL% Muilder% Visitor e #ommand descrevem &ormas espec&icas de composi!o de objetos.33Especificando interfaces,nter&aces:#onjunto de mensagens :ue um objeto aceita (contrato% assinaturas)*6bjetos s!o conhecidos pelas inter&aces% :ue nada dizem sobre a implementa!o.5adr9es de projeto podem ajudar:,denti&icam os elementos8chave de inter&aces*Festringem o :ue incluir em inter&aces*Estabelecem relacionamentos entre elas.34Especificando implementa%esMoa pr-tica: @programe para inter&aces% n!o para implementa9esB*5adr9es de projeto podem ajudar:3bstraem o processo de cria!o de objetos% desacoplando os objetos clientes de implementa9es% permanecendo somente as inter&aces.35,irando proveito do reuso#omo construir so&tware reutiliz-vel.: agrega!o e associa!o s!o codi&icadas da mesma &orma% mas s!o bem di&erentes em runtime.5adr9es de projeto podem ajudar:Se voc$ entende o padr!o% passa a entender a distin!o% :ue est- e>plcita na documenta!o do padr!o.37"roetando para mudan%asSistemas devem ser projetados para &acilitarem a manuten!o:Fiscos de custos imprevistos*Fetrabalho.5adr9es de projeto podem ajudar:5romovem desacoplamento% permitindo maior liberdade dos objetos*#Kdigo mais robusto% legvel e de maior :ualidade.38Causas de retrabal.o e padres /&o'0 que as evitam0. #ria!o de objeto especi&ica classe e>plicitamente:6 sistema est- preso a uma implementa!o espec&ica*Solu!o: criar objetos indiretamente com 3bstract FactorL% FactorL +ethod ou 5rototLpe.J. /epend$ncia em opera9es espec&icas:6 sistema sK tem uma &orma de satis&azer a uma re:uisi!o*Solu!o: evitar re:uisi9es @hard8codedB com #hain o& FesponsibilitL ou #ommand.39Causas de retrabal.o e padres /&o'0 que as evitam0. /epend$ncia de plata&orma:6 so&tware utiliza recursos espec&icos de uma plata&orma*Solu!o: limitar depend$ncias com 3bstract FactorL ou Mridge.J. /epend$ncia em representa9es ou implementa9es de objetos:#lientes :ue sabem como um objeto = implementado% representado ou armazenado podem ter :ue ser alterados se o objeto mudar*Solu!o: isolar os clientes com 3bstract FactorL% Mridge% +emento ou 5ro>L.40Causas de retrabal.o e padres /&o'0 que as evitam0. /epend$ncia de algortmo:6bjetos :ue dependem de algortmos precisam mudar :uando o algortmo mudar*Solu!o: isolar os algortmos com Muilder% ,terator% StrategL% Nemplate +ethod ou Visitor.J. Forte acoplamento:#lasses &ortemente acopladas s!o di&ceis de reusar% testar% manter% etc. Sistema monoltico*Solu!o: en&ra:uecer o acoplamento com 3bstract FactorL% Mridge% #ommand% #hain o& FesponsibilitL% Faade% +ediator ou 6bserver.41Causas de retrabal.o e padres /&o'0 que as evitam0. E>tens!o de &uncionalidade por meio de subclasse:Ierana = di&cil de usar% composi!o di&iculta a compreens!o*Solu!o: usar padr9es :ue implementem bem herana% composi!o e delega!o como Mridge% #hain o& FesponsibilitL% #omposite% /ecorator% 6bserver ou StrategL.J. ,ncapacidade de alterar classes convenientemente:#lasses inacessveis% imcompreensveis ou di&ceis de alterar*Solu!o: usar 3dapter% /ecorator ou Visitor.42Como selecionar um padroEntenda como os padr9es ajudam a resolver problemas em 66*Fevise as inten9es de cada padr!o*Estude como os padr9es se inter8relacionam*Estude as similaridades entre os padr9es de mesmo propKsito*#onhea as principais causas de retrabalho*#onsidere o :ue voc$ pode :uerer mudar em seu projeto no &uturo.43-esumo do Cat#lo$o do &o''ma Anica instOncia da classe. Singleton#lasse do objeto :ue = instanciado 5rototLpeSubclasse do objeto :ue = instanciado. FactorL +ethod#omo um objeto composto = criado. MuilderFamlias de objetos @produtoB. 3bstract FactorL+se#tos ,ue odem &ariar "adro"adr%es de Criao44-esumo do Cat#lo$o do &o'#usto de armazenamento de objetos. FlLweight,nter&ace para um subsistema. Faade#omo um objeto = acessado% sua localiza!o.5ro>LFesponsabilidades de um objeto sem recorrer R herana./ecoratorEstrutura e composi!o de um objeto. #omposite,mplementa!o de um objeto. Mridge,nte&ace para um objeto. 3dapter+se#tos ,ue odem &ariar "adro"adr%es de Estrutura45-esumo do Cat#lo$o do &o'#omo e :uais objetos interagem uns com os outros.+ediator#omo elementos agregados s!o acessados.,terator"ram-tica e interpreta!o de uma linguagem.,nterpreter6nde e como uma re:uisi!o = respondida.#ommand6bjeto :ue pode responder a uma re:uisi!o.#hain o& FesponsibilitL+se#tos ,ue odem &ariar "adro"adr%es de Com

ortame!to46-esumo do Cat#lo$o do &o'5assos de um algoritmo. Nemplate +ethod6pera9es :ue podem ser aplicadas a objetos sem alterar suas classes.Visitor'm algoritmo. StrategLEstados de um objeto. State?Amero de objetos :ue dependem de outro e como estes &icam atualizados.6bserverHuais in&orma9es privadas s!o armazenadas &ora do objeto e :uando.+emento+se#tos ,ue odem &ariar "adro"adr%es de Com

ortame!to47Como usar um padro0. 7eia o padr!o todo uma vez*J. Estude o cKdigo &onte de e>emplo*S. Escolha nomes para os participantes do padr!o dentro do seu conte>to*G. /e&ina as novas classes e modi&i:ue classes e>istentes :ue s!o a&etadas*T. /e&ina nomes para as opera9es do padr!o dentro do seu conte>to*U. ,mplemente as opera9es.Curso - Padres de Projeto Mdulo 1: Introduo3nti85adr9es: solu9es :ue voc$ deve evitar.49O que ! um anti1padro3ntipatterns s!o solu9es :ue trazem mais complica!o do :ue bene&cio*5ode advir de:'so incorreto de padr9es de projeto*#ria!o de um novo padr!o sem as devidas re&le>9es e testes*6 :ue era bom ontem pode n!o ser mais.Q necess-rio entend$8los para n!o cair em armadilhas e% se cair% saber se recuperar delas.50E*emplos de anti1padres3nalLsis paralLsis*Stovepipe sLstem*/esign bL committee*#opL and paste programming*Spaghetti code*"od object/class*Vendor loc;8in*E muitos outros...51"ara saber mais222?este curso iremos &ocar nos padr9es de projeto% e n!o nos anti8padr9es*5ara saber mais:2i;ipediahttp://en.wi;ipedia.org/wi;i/3ntipattern3ntipatterns.com:http://www.antipatterns.com/Curso - Padres de Projeto Mdulo 1: IntroduoVtor E. Silva [email protected]://www.javablogs.com.br/page/engenhohttp://esjug.dev.java.net