Aula 04 - UML e Padrões de Projeto

117
Especialização em Desenvolvimento Java UML e Padrões de Projetos AULA 04 – INTRODUÇÃO AOS PADRÕES DE PROJETO Prof. Vinícius de Paula K [email protected]

Transcript of Aula 04 - UML e Padrões de Projeto

Page 1: Aula 04 - UML e Padrões de Projeto

!!Especialização!em!Desenvolvimento!Java!!UML$e$Padrões$de$Projetos$!

AULA!04!–!INTRODUÇÃO!AOS!PADRÕES!DE!PROJETO!

Prof.!Viní[email protected]!

Page 2: Aula 04 - UML e Padrões de Projeto

Introdução$a$Padrões$

Page 3: Aula 04 - UML e Padrões de Projeto

Evolução$do$So8ware$“Grandes( sistemas( de( so-ware( nunca( são( concluídos,( eles( simplesmente(con6nuam(evoluindo”![Lehman]!

UML e Padrões de Projeto Centro Universitário do Triângulo 3

Page 4: Aula 04 - UML e Padrões de Projeto

Evolução$do$So8ware$“Grandes( sistemas( de( so-ware( nunca( são( concluídos,( eles( simplesmente(con6nuam(evoluindo”![Lehman]!

• MoRvos!e!consequências!(algumas!Leis!de!Lehman)!

• Mudança!ConYnua!e!Crescimento!ConYnuo!- Mudanças!são!inevitáveis!para!que!o!so[ware!conRnue!úRl!- Adição!de!funcionalidades!para!manter!a!saRsfação!do!usuário!

UML e Padrões de Projeto Centro Universitário do Triângulo 4

Page 5: Aula 04 - UML e Padrões de Projeto

Evolução$do$So8ware$“Grandes( sistemas( de( so-ware( nunca( são( concluídos,( eles( simplesmente(con6nuam(evoluindo”![Lehman]!

• MoRvos!e!consequências!(algumas!Leis!de!Lehman)!

• Mudança!ConYnua!e!Crescimento!ConYnuo!- Mudanças!são!inevitáveis!para!que!o!so[ware!conRnue!úRl!- Adição!de!funcionalidades!para!manter!a!saRsfação!do!usuário!

•  Complexidade!Crescente!e!Qualidade!Decrescente!- Mudanças!aumentam!a!complexidade!do!so[ware!- Qualidade!diminui!a!não!ser!que!haja!adaptações!

UML e Padrões de Projeto Centro Universitário do Triângulo 5

Page 6: Aula 04 - UML e Padrões de Projeto

Como$devemos$proceder?$

UML e Padrões de Projeto Centro Universitário do Triângulo 6

Pensar antes de agir!

Algumas$ações:$

•  Analisar!impactos!• Modelar,!antes!de!codificar!•  URlizar!soluções!e!técnicas!validadas!

- Não!reinventar!a!roda!!

Page 7: Aula 04 - UML e Padrões de Projeto

A$Inspiração$•  A! ideia! de! padrões! foi! apresentada! por!Christopher!Alexander!em!1977!no!contexto!de!Arquitetura!(de!prédios!e!cidades):!

Cada$ padrão$ descreve$ um$ problema$ que$ ocorre$repe0damente$ em$ nosso$ ambiente,$ e$ então$descreve$ a$ parte$ central$ da$ solução$ para$ aquele$problema$de$uma$forma$que$você$pode$usar$esta$solução$ um$ milhão$ de$ vezes,$ sem$ nunca$implementa<la$duas$vezes$da$mesma$forma.$

UML e Padrões de Projeto Centro Universitário do Triângulo 7

Page 8: Aula 04 - UML e Padrões de Projeto

Padrões$de$Projeto$ou$Design$PaFerns$Para! não! perder! tempo! e! dinheiro! elaborando! soluções! diferentes! para! o!mesmo!problema,!poderíamos!escolher!uma!solução!como!padrão!e!adotáKla!toda!vez!que!o!problema!correspondente!ocorrer.!!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 8

Page 9: Aula 04 - UML e Padrões de Projeto

Padrões$de$Projeto$ou$Design$PaFerns$Para! não! perder! tempo! e! dinheiro! elaborando! soluções! diferentes! para! o!mesmo!problema,!poderíamos!escolher!uma!solução!como!padrão!e!adotáKla!toda!vez!que!o!problema!correspondente!ocorrer.!!

Além! de! evitar! o! retrabalho,! facilitaríamos! a! comunicação! dos!desenvolvedores!e!o!entendimento!técnico!do!sistema.!!

UML e Padrões de Projeto Centro Universitário do Triângulo 9

Page 10: Aula 04 - UML e Padrões de Projeto

Padrões$de$Projeto$ou$Design$PaFerns$Para! não! perder! tempo! e! dinheiro! elaborando! soluções! diferentes! para! o!mesmo!problema,!poderíamos!escolher!uma!solução!como!padrão!e!adotáKla!toda!vez!que!o!problema!correspondente!ocorrer.!!

Além! de! evitar! o! retrabalho,! facilitaríamos! a! comunicação! dos!desenvolvedores!e!o!entendimento!técnico!do!sistema.!!

Neste!contexto,!surge!o!conceito!de!padrões$de$projeto!ou!design$paFerns:!

Um$ padrão$ de$ projeto$ é$ uma$ solução$ consolidada$ para$ um$ problema$recorrente$ no$ desenvolvimento$ e$ manutenção$ de$ soAware$ orientado$ a$objetos.$

UML e Padrões de Projeto Centro Universitário do Triângulo 10

Page 11: Aula 04 - UML e Padrões de Projeto

Por$que$aprender$padrões?$•  Aprender!com!a!experiência!dos!outros!

•  IdenRficar!problemas!comuns!em!engenharia!de!so[ware!•  URlizar!soluções!testadas!e!bem!documentadas!

UML e Padrões de Projeto Centro Universitário do Triângulo 11

Page 12: Aula 04 - UML e Padrões de Projeto

Por$que$aprender$padrões?$•  Aprender!com!a!experiência!dos!outros!

•  IdenRficar!problemas!comuns!em!engenharia!de!so[ware!•  URlizar!soluções!testadas!e!bem!documentadas!

•  Aprender!boas!práRcas!de!programação!

•  Padrões! uRlizam! eficientemente! herança,! composição,! modularidade,!polimorfirmo!e!abstração!para!construir!código!reuRlizável,!eficiente,!de!alta!coesão!e!baixo!acoplamento!

UML e Padrões de Projeto Centro Universitário do Triângulo 12

Page 13: Aula 04 - UML e Padrões de Projeto

Por$que$aprender$padrões?$•  Aprender!com!a!experiência!dos!outros!

•  IdenRficar!problemas!comuns!em!engenharia!de!so[ware!•  URlizar!soluções!testadas!e!bem!documentadas!

•  Aprender!boas!práRcas!de!programação!

•  Padrões! uRlizam! eficientemente! herança,! composição,! modularidade,!polimorfirmo!e!abstração!para!construir!código!reuRlizável,!eficiente,!de!alta!coesão!e!baixo!acoplamento!

•  Ter!um!caminho!e!um!alvo!para!refatorações!

•  Facilitar!a!comunicação,!compreensão!e!documentação!

•  Vocabulário!comum!•  Ajuda!a!entender!o!papel!das!classes!do!sistema!

UML e Padrões de Projeto Centro Universitário do Triângulo 13

Page 14: Aula 04 - UML e Padrões de Projeto

O$Formato$de$um$Padrão$•  Nome!

•  Problema!

•  Quando!aplicar!o!padrão,!em!que!condições?!•  Solução!

•  Descrição! abstrata! de! um! problema! e! como! usar! os! elementos!disponíveis!(classes!e!objetos)!para!solucionáKlo.!

•  Consequências!

•  Custos!e!benemcios!de!se!aplicar!o!padrão.!•  Impacto! na! flexibilidade,! extensibilidade,! portabilidade! e! eficiência! do!sistema.!

UML e Padrões de Projeto Centro Universitário do Triângulo 14

Page 15: Aula 04 - UML e Padrões de Projeto

Padrões$de$Projeto$GoF$•  Descreve!23!padrões!de!projeto!“clássicos”!

•  Soluções! genéricas! para! os! problemas! mais!comuns! do! desenvolvimento! de! so[ware!orientado!a!objetos!

• ObRdas!através!de!experiências!de!sucesso!na!indústria!de!so[ware!

•  Sobre!o!livro!•  Seus!quatro! autores! são! conhecidos! como! "The!Gang!of!Four�!(GoF).!

•  O! livro! tornouKse! um! clássico! na! literatura!orientada!a!objetos!e!conRnua!atual.!

UML e Padrões de Projeto Centro Universitário do Triângulo 15

Page 16: Aula 04 - UML e Padrões de Projeto

Mais$Padrões?$•  Há!vários!catálogos!de!padrões!para!so[ware!

• Muitos!são!específicos!a!uma!determinada!área!•  Padrões!Java!EE!!•  Padrões!de!implementação!Java!ou!C#!!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 16

Page 17: Aula 04 - UML e Padrões de Projeto

Classificação$dos$Padrões$

Page 18: Aula 04 - UML e Padrões de Projeto

Formas$de$Classificação$dos$Padrões$Há!várias!formas!de!classificar!os!padrões!

• Os!padrões!GoF!são!tradicionalmente!classificados!pelo!propósito:!

•  Criação!de!classes!e!objetos!•  Alteração!da!estrutura!de!um!programa!•  Controle!do!seu!comportamento$

• Metsker$os!classifica!em!5!grupos,!por!intenção:!

•  Oferecer!uma!interface$•  Atribuir!uma!responsabilidade!!•  Realizar!a!construção!de!classes!ou!objetos!•  Controlar!formas!de!operação$•  Implementar!uma!extensão!para!a!aplicação!

!UML e Padrões de Projeto Centro Universitário do Triângulo 18

Page 19: Aula 04 - UML e Padrões de Projeto

Padrões$GoF$P$Classificação$por$Propósito$$

UML e Padrões de Projeto Centro Universitário do Triângulo 19

Propósito$

Criação$ Estrutura$ Comportamento$

Escopo$

Classe$

Factory!Method! Class!Adapter! Interpreter!Template!Method!

Objeto$

Builder!Abstract!Factory!

Prototype!Singlenton!

Object!Adapter!Bridge!

Composite!Decorator!Facade!

Flyweight!Proxy!

Chain!of!Responsibility!Command!Iterator!Mediator!Memento!Observer!State!

Strategy!Visitor!

** Classificação segundo GoF. ** Classificação segundo GoF.

Classificação(segundo(GoF(

Page 20: Aula 04 - UML e Padrões de Projeto

Padrões$GoF$P$Classificação$por$Intenção$

UML e Padrões de Projeto Centro Universitário do Triângulo 20

Intenção$ Padrões$

Interfaces$ Adapter,!Facade,!Composite,!Bridge!

Construção$ Factory!Method,!Abstract!Factory,!!Builder,!Prototype,!Memento!

Responsabilidade$$

Singleton,!Observer,!Chain!of!Responsibility,!Mediator,!Proxy,!Flyweight!

Operações$ Template!Method,!State,!Command,!Strategy,!Interpreter!

Extensões! Iterator,Decorator,!Visitor!

Classificação(segundo(Steven(Metsker(

Page 21: Aula 04 - UML e Padrões de Projeto

BemPVindo$aos$Padrões$de$Projeto$

Page 22: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 22

Page 23: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 23

Duck( MallardDuck( RedheadDuck(

Page 24: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 24

Page 25: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 25

Todos!os!patos!grasnam!e!nadam$

Page 26: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 26

Todos!os!patos!grasnam!e!nadam$O!método!display()!é!

abstrato!já!que!todos!os!subRpos!de!patos!

são!diferentes!!$

Page 27: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 27

Todos!os!patos!grasnam!e!nadam$O!método!display()!é!

abstrato!já!que!todos!os!subRpos!de!patos!

são!diferentes!!$Um método abstrato obriga a classe em que ele se encontra ser abstrata. Dessa forma, podemos assumir que a classe Duck é abstrata.

Page 28: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 28

Todos!os!patos!grasnam!e!nadam$O!método!display()!é!

abstrato!já!que!todos!os!subRpos!de!patos!

são!diferentes!!$

Cada!subRpo!de!pato!implementa!seu!próprio!comportamento!de!

como!ele!será!exibido!na!tela!!

Page 29: Aula 04 - UML e Padrões de Projeto

O$Cenário$Manoel! trabalha! em! uma! empresa! que! criou! um! jogo! de!simulação! de! um! lago! com! patos.! O! jogo! pode! mostrar! uma!grande! variedade! de! espécies! de! patos! nadando! e! produzindo$sons.!Os!arquitetos!do!sistema!usaram!técnicas!OO!e!chegaram!ao!seguinte!modelo!de!classes.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 29

Todos!os!patos!grasnam!e!nadam$O!método!display()!é!

abstrato!já!que!todos!os!subRpos!de!patos!

são!diferentes!!$

Cada!subRpo!de!pato!implementa!seu!próprio!comportamento!de!

como!ele!será!exibido!na!tela!

Muitos!outros!Rpos!de!patos!são!

subclasses!de!Duck(

Page 30: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Os! execuRvos! da! empresa! decidiram! que! fazer! os!patos!voarem!é!o!que!o!simulador!precisa!para!acabar!com!a!concorrência.!

UML e Padrões de Projeto Centro Universitário do Triângulo 30

Page 31: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Os! execuRvos! da! empresa! decidiram! que! fazer! os!patos!voarem!é!o!que!o!simulador!precisa!para!acabar!com!a!concorrência.!

UML e Padrões de Projeto Centro Universitário do Triângulo 31

O que precisamos fazer para os patos voarem?

Page 32: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Os! execuRvos! da! empresa! decidiram! que! fazer! os!patos!voarem!é!o!que!o!simulador!precisa!para!acabar!com!a!concorrência.!

UML e Padrões de Projeto Centro Universitário do Triângulo 32

Page 33: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Os! execuRvos! da! empresa! decidiram! que! fazer! os!patos!voarem!é!o!que!o!simulador!precisa!para!acabar!com!a!concorrência.!

UML e Padrões de Projeto Centro Universitário do Triângulo 33

Todas!as!subclasses!agora!herdam!o!

comportamento!de!voar$

Page 34: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Após! a! atual ização! do! s istema,! em! plena!demonstração!do! simulador! para! os! acionistas,!patos$de$borracha!começaram!a!voar!pela!tela.!

UML e Padrões de Projeto Centro Universitário do Triângulo 34

Page 35: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Após! a! atual ização! do! s istema,! em! plena!demonstração!do! simulador! para! os! acionistas,!patos$de$borracha!começaram!a!voar!pela!tela.!

UML e Padrões de Projeto Centro Universitário do Triângulo 35

Ao!incluirmos!o!método!fly()!na!superclasse,!demos!a!

capacidade!de!voar!a!todos!os!Rpos!de!patos,!incluindo!os!que!não!deveriam!voar!$

Page 36: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Após! a! atual ização! do! s istema,! em! plena!demonstração!do! simulador! para! os! acionistas,!patos$de$borracha!começaram!a!voar!pela!tela.!

UML e Padrões de Projeto Centro Universitário do Triângulo 36

Patos!de!borracha!não$grasnam,!quack()!foi!sobrescrito!para!implementar!o!som!

de!“Squeak”$

Ao!incluirmos!o!método!fly()!na!superclasse,!demos!a!

capacidade!de!voar!a!todos!os!Rpos!de!patos,!incluindo!os!que!não!deveriam!voar!$

Page 37: Aula 04 - UML e Padrões de Projeto

Surge$uma$manutenção$no$sistema...$Após! a! atual ização! do! s istema,! em! plena!demonstração!do! simulador! para! os! acionistas,!patos$de$borracha!começaram!a!voar!pela!tela.!

UML e Padrões de Projeto Centro Universitário do Triângulo 37

Após a manutenção, objetos inanimados estavam voando no simulador. A utilização de herança para fins de reutilização não é bem recebida quando temos uma manutenção pela frente.

Page 38: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$Poderíamos! sobrescrever! o! método! fly()! na! classe!RubberQuack,! similar! ao! que! fizemos! com! o! método!quack().!

UML e Padrões de Projeto Centro Universitário do Triângulo 38

Page 39: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$Poderíamos! sobrescrever! o! método! fly()! na! classe!RubberQuack,! similar! ao! que! fizemos! com! o! método!quack().!

UML e Padrões de Projeto Centro Universitário do Triângulo 39

O!método!fly()!foi!sobrescrito,!mas!não!

possui!nenhum!comportamento!para!

implementar!!$

Page 40: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$

UML e Padrões de Projeto Centro Universitário do Triângulo 40

E!se!surgissem!novo!Rpos!de!patos!a!serem!tratados!pelo!simulador?! Como! um! pato$ de$ madeira.! Ele! não! deve!voar!nem!grasnar...!

Page 41: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$

UML e Padrões de Projeto Centro Universitário do Triângulo 41

E!se!surgissem!novo!Rpos!de!patos!a!serem!tratados!pelo!simulador?! Como! um! pato$ de$ madeira.! Ele! não! deve!voar!nem!grasnar...!

Page 42: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$

UML e Padrões de Projeto Centro Universitário do Triângulo 42

E!se!surgissem!novo!Rpos!de!patos!a!serem!tratados!pelo!simulador?! Como! um! pato$ de$ madeira.! Ele! não! deve!voar!nem!grasnar...!

Os!métodos!quack()!e!fly()!foram!sobrescritos!mas!não!possuem!comportamentos!

!$

Page 43: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$

UML e Padrões de Projeto Centro Universitário do Triângulo 43

Com!o!que!vimos!até!agora,!quais!opções!a!seguir!podem!ser!consideradas!desvantagens!ao!se!uRlizar!herança!para!produzir!o!comportamento!de!Duck?!

Page 44: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$

UML e Padrões de Projeto Centro Universitário do Triângulo 44

a)  O!código!é!duplicado!entre!subclasses.!

b)  Não!podemos!fazer!patos!dançar.!

c)  É!dimcil!conhecer!o!comportamento!de!todos!os!patos.!

d)  Os!patos!não!conseguem!voar!e!grasnar!ao!mesmo!tempo.!

e)  As!alterações!podem!afetar!sem!querer!outros!patos.!

!

Com!o!que!vimos!até!agora,!quais!opções!a!seguir!podem!ser!consideradas!desvantagens!ao!se!uRlizar!herança!para!produzir!o!comportamento!de!Duck?!

Page 45: Aula 04 - UML e Padrões de Projeto

Pensando$sobre$herança...$

UML e Padrões de Projeto Centro Universitário do Triângulo 45

a)  O!código!é!duplicado!entre!subclasses.!

b)  Não!podemos!fazer!patos!dançar.!

c)  É!dimcil!conhecer!o!comportamento!de!todos!os!patos.!

d)  Os!patos!não!conseguem!voar!e!grasnar!ao!mesmo!tempo.!

e)  As!alterações!podem!afetar!sem!querer!outros!patos.!

!

Com!o!que!vimos!até!agora,!quais!opções!a!seguir!podem!ser!consideradas!desvantagens!ao!se!uRlizar!herança!para!produzir!o!comportamento!de!Duck?!

Page 46: Aula 04 - UML e Padrões de Projeto

Pontos$a$repensar...$•  E!se!o!produto!precisasse!ser!atualizado!a!cada!3!meses!ou!menos,!devido!a!uma!decisão!estratégica!de!negócio?!

•  A! cada! atualização! as! especificações! do! produto! conRnuarão! mudando! e!seremos!forçados!a!sobrescrever!os!métodos!fly()!e!quack()!para!cada!nova!subclasse!de!Duck.!

UML e Padrões de Projeto Centro Universitário do Triângulo 46

Page 47: Aula 04 - UML e Padrões de Projeto

Pontos$a$repensar...$•  E!se!o!produto!precisasse!ser!atualizado!a!cada!3!meses!ou!menos,!devido!a!uma!decisão!estratégica!de!negócio?!

•  A! cada! atualização! as! especificações! do! produto! conRnuarão! mudando! e!seremos!forçados!a!sobrescrever!os!métodos!fly()!e!quack()!para!cada!nova!subclasse!de!Duck.!

UML e Padrões de Projeto Centro Universitário do Triângulo 47

Quando utilizamos herança a manutenção do código se torna mais complexa e propícia a erros

Page 48: Aula 04 - UML e Padrões de Projeto

Pontos$a$repensar...$•  E!se!o!produto!precisasse!ser!atualizado!a!cada!3!meses!ou!menos,!devido!a!uma!decisão!estratégica!de!negócio?!

•  A! cada! atualização! as! especificações! do! produto! conRnuarão! mudando! e!seremos!forçados!a!sobrescrever!os!métodos!fly()!e!quack()!para!cada!nova!subclasse!de!Duck.!

UML e Padrões de Projeto Centro Universitário do Triângulo 48

Precisamos de uma maneira mais simples para que apenas alguns (mas não todos) tipos de patos voem ou grasnem.

Page 49: Aula 04 - UML e Padrões de Projeto

Que$tal$uma$Interface?$•  Poderíamos!Rrar!o!método!fly()!da!superclasse!Duck!e!criar!uma!interface!Flyable!com!um!método!fly().!

•  Dessa! forma,! somente! os! patos! que! devem! voar! irão!implementar!esta!interface!e!ter!um!método!fly().!

•  Além!disso,!poderíamos!criar!o!método!Quackable!pois!nem!todos!os!patos!podem!grasnar.!

UML e Padrões de Projeto Centro Universitário do Triângulo 49

Page 50: Aula 04 - UML e Padrões de Projeto

Que$tal$uma$Interface?$•  Poderíamos!Rrar!o!método!fly()!da!superclasse!Duck!e!criar!uma!interface!Flyable!com!um!método!fly().!

•  Dessa! forma,! somente! os! patos! que! devem! voar! irão!implementar!esta!interface!e!ter!um!método!fly().!

•  Além!disso,!poderíamos!criar!o!método!Quackable!pois!nem!todos!os!patos!podem!grasnar.!

UML e Padrões de Projeto Centro Universitário do Triângulo 50

Uma Interface é um contrato onde quem assina se responsabiliza por implementar seus métodos. Ela expõe o que o objeto deve fazer e não como ele faz.

Page 51: Aula 04 - UML e Padrões de Projeto

Que$tal$uma$Interface?$

UML e Padrões de Projeto Centro Universitário do Triângulo 51

Page 52: Aula 04 - UML e Padrões de Projeto

Que$tal$uma$Interface?$

UML e Padrões de Projeto Centro Universitário do Triângulo 52

Interpretação da Interface Quem desejar ser “Flyable” precisa saber voar. Quem desejar ser “Quackable” precisa saber grasnar.

Page 53: Aula 04 - UML e Padrões de Projeto

Que$tal$uma$Interface?$

UML e Padrões de Projeto Centro Universitário do Triângulo 53

Interpretação de quem implementa a Interface A classe RubberDuck se compromete a ser tratada como Quackable, sendo obrigada a ter os métodos necessários, definidos neste contrato.

Page 54: Aula 04 - UML e Padrões de Projeto

Que$tal$uma$Interface?$

UML e Padrões de Projeto Centro Universitário do Triângulo 54

E se precisarmos fazer uma pequena alteração no comportamento de vôo... de todas as inúmeras subclasses de Duck que voam?

Page 55: Aula 04 - UML e Padrões de Projeto

Repensando$a$Interface...$•  Vimos!que!nem!todas!as!subclasses!devem!ter!o!comportamento!de!voar!ou!grasnar,!então!o!uso!de!herança!não!foi!uma!solução!adequada.!

•  Implementar! Flyable! e! Quackable! nas! subclasses! resolveu! parte! do!problema!(sem!fazer!patos!de!borracha!voarem!inadequadamente),!porém!degradou! completamente! a! reu_lização! de! código! para! esses!comportamentos,!criando!apenas!um!pesadelo!de!manutenção!diferente.!

UML e Padrões de Projeto Centro Universitário do Triângulo 55

Page 56: Aula 04 - UML e Padrões de Projeto

Repensando$a$Interface...$•  Vimos!que!nem!todas!as!subclasses!devem!ter!o!comportamento!de!voar!ou!grasnar,!então!o!uso!de!herança!não!foi!uma!solução!adequada.!

•  Implementar! Flyable! e! Quackable! nas! subclasses! resolveu! parte! do!problema!(sem!fazer!patos!de!borracha!voarem!inadequadamente),!porém!degradou! completamente! a! reu_lização! de! código! para! esses!comportamentos,!criando!apenas!um!pesadelo!de!manutenção!diferente.!

UML e Padrões de Projeto Centro Universitário do Triângulo 56

É notório que pode haver mais de um tipo de comportamento de vôo até entre os patos que voam.

Page 57: Aula 04 - UML e Padrões de Projeto

A$Constante$no$Desenvolvimento$de$So8ware$

• Qual!a!única!coisa!com!a!qual!podemos!contar!sempre!no!desenvolvimento!de!so[ware?!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 57

Page 58: Aula 04 - UML e Padrões de Projeto

A$Constante$no$Desenvolvimento$de$So8ware$

• Qual!a!única!coisa!com!a!qual!podemos!contar!sempre!no!desenvolvimento!de!so[ware?!

•  Não!importa!onde!você!trabalha,!o!que!está!criando!ou!em!que! linguagem! está! programando,! qual! a! constante! que!estará!sempre!com!você?!

UML e Padrões de Projeto Centro Universitário do Triângulo 58

Page 59: Aula 04 - UML e Padrões de Projeto

A$Constante$no$Desenvolvimento$de$So8ware$

• Qual!a!única!coisa!com!a!qual!podemos!contar!sempre!no!desenvolvimento!de!so[ware?!

•  Não!importa!onde!você!trabalha,!o!que!está!criando!ou!em!que! linguagem! está! programando,! qual! a! constante! que!estará!sempre!com!você?!

UML e Padrões de Projeto Centro Universitário do Triângulo 59

ALTERAÇÃO

Page 60: Aula 04 - UML e Padrões de Projeto

A$Constante$no$Desenvolvimento$de$So8ware$

• Qual!a!única!coisa!com!a!qual!podemos!contar!sempre!no!desenvolvimento!de!so[ware?!

•  Não!importa!onde!você!trabalha,!o!que!está!criando!ou!em!que! linguagem! está! programando,! qual! a! constante! que!estará!sempre!com!você?!

UML e Padrões de Projeto Centro Universitário do Triângulo 60

Independentemente de como você desenvolva uma aplicação, com o tempo ela precisará crescer e mudar para não morrer.

Page 61: Aula 04 - UML e Padrões de Projeto

A$Constante$no$Desenvolvimento$de$So8ware$

• Qual!a!única!coisa!com!a!qual!podemos!contar!sempre!no!desenvolvimento!de!so[ware?!

•  Não!importa!onde!você!trabalha,!o!que!está!criando!ou!em!que! linguagem! está! programando,! qual! a! constante! que!estará!sempre!com!você?!

UML e Padrões de Projeto Centro Universitário do Triângulo 61

Independentemente de como você desenvolva uma aplicação, com o tempo ela precisará crescer e mudar para não morrer.

“Sistemas devem ser continuamente adaptados ou eles se tornam progressivamente menos satisfatórios.”

[Lehman]

Page 62: Aula 04 - UML e Padrões de Projeto

A$Constante$no$Desenvolvimento$de$So8ware$

UML e Padrões de Projeto Centro Universitário do Triângulo 62

Muitas! coisas! podem! causar!mudanças.! Relacione! alguns!moRvos! pelos! quais! você! precisou! alterar! o! código! de!alguma!aplicação?!

Page 63: Aula 04 - UML e Padrões de Projeto

Repensando$o$Problema$•  Herança!não!funcionou!muito!bem:!

•  O!comportamento!do!pato!conRnua!mudando!entre!as!subclasses;!•  Não! é! apropriado! que! todas! as! subclasses! tenham! estes!comportamentos.!

•  Foi!promissor!usarmos!os!conceitos!de!Interface,!mas:!

•  Não!Rvemos!reaproveitamento!de!código;!•  Sempre!que!um!comportamento!for!modificado!todas!as!subclasses!que!o!implementam!devem!ser!alteradas.!

UML e Padrões de Projeto Centro Universitário do Triângulo 63

Page 64: Aula 04 - UML e Padrões de Projeto

Princípios$de$Projeto$

Page 65: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Iden_fique$ os$ aspectos$ de$ sua$ aplicação$ que$ variam$ e$ separePos$ do$ que$permanece$igual.!

UML e Padrões de Projeto Centro Universitário do Triângulo 65

Page 66: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Iden_fique$ os$ aspectos$ de$ sua$ aplicação$ que$ variam$ e$ separePos$ do$ que$permanece$igual.$

•  Em!outras!palavras:!Pegue!as!partes!que!variam!e!encapsuleKas!para!depois!poder!alterar!ou!estender!estas!partes!sem!afetar!as!que!não!variam.!

UML e Padrões de Projeto Centro Universitário do Triângulo 66

Page 67: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Iden_fique$ os$ aspectos$ de$ sua$ aplicação$ que$ variam$ e$ separePos$ do$ que$permanece$igual.$

•  Em!outras!palavras:!Pegue!as!partes!que!variam!e!encapsuleKas!para!depois!poder!alterar!ou!estender!estas!partes!sem!afetar!as!que!não!variam.!

UML e Padrões de Projeto Centro Universitário do Triângulo 67

Isso traz menos consequências indesejadas nas alterações realizadas no código e maior flexibilidade.

Page 68: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Separando$as$partes$que$variam$das$que$ficam$iguais$

•  Vamos!criar!dois!conjuntos!de!classes,!um!para!!voar!e!e!outro!para!grasnar.!

•  Cada! conjunto! de! classes! irá! conter! todas! as! implementações! de! seu!comportamento.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 68

Page 69: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Separando$as$partes$que$variam$das$que$ficam$iguais$

•  Vamos!criar!dois!conjuntos!de!classes,!um!para!!voar!e!e!outro!para!grasnar.!

•  Cada! conjunto! de! classes! irá! conter! todas! as! implementações! de! seu!comportamento.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 69

Sabemos que fly() e quack() são as partes da classe Duck que variam entre os patos.

Page 70: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Separando$as$partes$que$variam$das$que$ficam$iguais$

•  Vamos!criar!dois!conjuntos!de!classes,!um!para!!voar!e!e!outro!para!grasnar.!

•  Cada! conjunto! de! classes! irá! conter! todas! as! implementações! de! seu!comportamento.!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 70

Classe Duck

Comportamentos de Grasnar

Comportamentos de Voar

Comportamentos de Duck

Page 71: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Separando$as$partes$que$variam$das$que$ficam$iguais$

•  Vamos!criar!dois!conjuntos!de!classes,!um!para!!voar!e!e!outro!para!grasnar.!

•  Cada! conjunto! de! classes! irá! conter! todas! as! implementações! de! seu!comportamento.!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 71

Classe Duck

Comportamentos de Grasnar

Comportamentos de Voar

Comportamentos de Duck

Separe o que varia

Page 72: Aula 04 - UML e Padrões de Projeto

#1$Princípios$de$Projeto$Separando$as$partes$que$variam$das$que$ficam$iguais$

•  Vamos!criar!dois!conjuntos!de!classes,!um!para!!voar!e!e!outro!para!grasnar.!

•  Cada! conjunto! de! classes! irá! conter! todas! as! implementações! de! seu!comportamento.!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 72

Classe Duck

Comportamentos de Grasnar

Comportamentos de Voar

Comportamentos de Duck

Separe o que varia

Do que fica igual

Page 73: Aula 04 - UML e Padrões de Projeto

Pensando$na$Solução...$Como$ vamos$ desenvolver$ o$ conjunto$ de$ classes$ que$implementam$os$comportamentos$de$voar$e$grasnar?$

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 73

Page 74: Aula 04 - UML e Padrões de Projeto

Pensando$na$Solução...$Como$ vamos$ desenvolver$ o$ conjunto$ de$ classes$ que$implementam$os$comportamentos$de$voar$e$grasnar?$

•  Gostaríamos!de!manter!a!arquitetura!flexível.!

• Queremos! atribuir! comportamentos! às! instâncias! da!classe!Duck;!

•  Poderíamos! alterar! o! comportamento! de! uma!instância!de!Duck!em!tempo!de!execução.!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 74

Page 75: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$Programa$para$uma$Interface$e$não$para$uma$implementação.$

UML e Padrões de Projeto Centro Universitário do Triângulo 75

Page 76: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$Programa$para$uma$Interface$e$não$para$uma$implementação.$

UML e Padrões de Projeto Centro Universitário do Triângulo 76

Page 77: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$Programa$para$uma$Interface$e$não$para$uma$implementação.$

UML e Padrões de Projeto Centro Universitário do Triângulo 77

Cada!comportamento!será!!representado!por!

uma!Interface$

Page 78: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$Programa$para$uma$Interface$e$não$para$uma$implementação.$

UML e Padrões de Projeto Centro Universitário do Triângulo 78

Cada!comportamento!será!!representado!por!

uma!Interface$

Implementa!o!vôo!do!pato$

Page 79: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$Programa$para$uma$Interface$e$não$para$uma$implementação.$

UML e Padrões de Projeto Centro Universitário do Triângulo 79

Cada!comportamento!será!!representado!por!

uma!Interface$

Implementa!o!vôo!do!pato$

Não!possui!implementação,!pois!é!

um!comportamento!para!quem!não!sabe!voar$

Page 80: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$Programa$para$uma$Interface$e$não$para$uma$implementação.$

UML e Padrões de Projeto Centro Universitário do Triângulo 80

Cada!comportamento!será!!representado!por!

uma!Interface$

Implementa!o!vôo!do!pato$

Não!possui!implementação,!pois!é!

um!comportamento!para!quem!não!sabe!voar$

Dessa forma, as classes derivadas de Duck não precisam conhecer nenhum detalhe de implementação dos seus comportamentos

Page 81: Aula 04 - UML e Padrões de Projeto

#2$Princípios$de$Projeto$

UML e Padrões de Projeto Centro Universitário do Triângulo 81

Com o novo design, as classes derivadas de Duck irão usar um comportamento representado por uma Interface. A implementação real do comportamento não fica acoplada às classes derivadas de Duck.

Page 82: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 82

Page 83: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 83

Somente!as!classes!de!vôo!implementam!esta!Interface$

Page 84: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 84

Somente!as!classes!de!vôo!implementam!esta!Interface$

Implementação!de!voar!para!todos!os!patos!que!têm!asas$

Page 85: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 85

Somente!as!classes!de!vôo!implementam!esta!Interface$

Implementação!de!voar!para!todos!os!patos!que!têm!asas$

Implementação!dos!patos!que!não!sabem!voar$

Page 86: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 86

Somente!as!classes!de!vôo!implementam!esta!Interface$

Implementação!de!voar!para!todos!os!patos!que!têm!asas$

Implementação!dos!patos!que!não!sabem!voar$

Implementação!de!grasnar!para!os!Rpos!

de!patos!que!grasnam$

Page 87: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 87

Somente!as!classes!de!vôo!implementam!esta!Interface$

Implementação!de!voar!para!todos!os!patos!que!têm!asas$

Implementação!dos!patos!que!não!sabem!voar$

Implementação!para!os!Rpos!de!patos!que!não!emitem!som!$

Implementação!de!grasnar!para!os!Rpos!

de!patos!que!grasnam$

Page 88: Aula 04 - UML e Padrões de Projeto

Implementando$os$Comportamentos$

UML e Padrões de Projeto Centro Universitário do Triângulo 88

Outros tipos de objetos podem reutilizar nossos comportamentos de voar e grasnar. Além disso, podemos adicionar novos comportamentos sem modificar nenhuma de nossas classes de comportamentos existentes.

Page 89: Aula 04 - UML e Padrões de Projeto

Pensando$em$reuso...$

UML e Padrões de Projeto Centro Universitário do Triângulo 89

Usando! o! nosso! novo! projeto,! o! que! você! faria! se!precisasse!adicionar!um!vôo!de!foguete!à!aplicação?!

!

Você! consegue! pensar! numa! classe! que! poderia! usar! o!comportamento!de!Quack!que!não!seja!um!pato?!

!

!

!

Page 90: Aula 04 - UML e Padrões de Projeto

Pensando$em$reuso...$

UML e Padrões de Projeto Centro Universitário do Triângulo 90

Usando! o! nosso! novo! projeto,! o! que! você! faria! se!precisasse!adicionar!um!vôo!de!foguete!à!aplicação?!

Poder íamos$ cr iar$ uma$ c lasse$ F lyRocket$ que$implementasse$a$interface$FlyBehaviour.!

Você! consegue! pensar! numa! classe! que! poderia! usar! o!comportamento!de!Quack!que!não!seja!um!pato?!

Uma$classe$que$ representasse$um$disposi_vo$eletrônico$que$simula$sons$de$pato.!

!

!

!

!

Page 91: Aula 04 - UML e Padrões de Projeto

Integrando$o$Comportamento$Delegaremos$ o$ comportamento$ de$ voar$ e$ grasnar$ em$ vez$ de$ usar$ os$métodos$definidos$nas$subclasses$de$Duck.$

!

UML e Padrões de Projeto Centro Universitário do Triângulo 91

Page 92: Aula 04 - UML e Padrões de Projeto

Integrando$o$Comportamento$Delegaremos$ o$ comportamento$ de$ voar$ e$ grasnar$ em$ vez$ de$ usar$ os$métodos$definidos$nas$subclasses$de$Duck.$

•  Vamos! adicionar! duas! variáveis! de! instância! à! classe! Duck$ chamadas!flyBehaviour!e!quackBehaviour.!

UML e Padrões de Projeto Centro Universitário do Triângulo 92

Page 93: Aula 04 - UML e Padrões de Projeto

Integrando$o$Comportamento$Delegaremos$ o$ comportamento$ de$ voar$ e$ grasnar$ em$ vez$ de$ usar$ os$métodos$definidos$nas$subclasses$de$Duck.$

•  Vamos! adicionar! duas! variáveis! de! instância! à! classe! Duck$ chamadas!flyBehaviour!e!quackBehaviour.!

•  Iremos! remover! os! métodos! fly()! e! quack()! da! classe! Duck! e! de! suas!subclasses!pelo!fato!de!estarmos!delegando!estes!comportamentos!para!as!classes!FlyBehaviour!e!QuackBehaviour.!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 93

Page 94: Aula 04 - UML e Padrões de Projeto

Integrando$o$Comportamento$Delegaremos$ o$ comportamento$ de$ voar$ e$ grasnar$ em$ vez$ de$ usar$ os$métodos$definidos$nas$subclasses$de$Duck.$

•  Vamos! adicionar! duas! variáveis! de! instância! à! classe! Duck$ chamadas!flyBehaviour!e!quackBehaviour.!

•  Iremos! remover! os! métodos! fly()! e! quack()! da! classe! Duck! e! de! suas!subclasses!pelo!fato!de!estarmos!delegando!estes!comportamentos!para!as!classes!FlyBehaviour!e!QuackBehaviour.!

•  Incluiremos! dois! novos! métodos! à! classe! Duck,! chamados! performFly! e!performQuack.$

!

!UML e Padrões de Projeto Centro Universitário do Triângulo 94

Page 95: Aula 04 - UML e Padrões de Projeto

Modelo$x$Implementação$

UML e Padrões de Projeto Centro Universitário do Triângulo 95

public abstract class Duck {

FlyBehavior flyBehavior;QuackBehavior quackBehavior;

public Duck() {} public void performFly() {

flyBehavior.fly();}

public void performQuack() {

quackBehavior.quack();} // outros métodos aqui..

}

Page 96: Aula 04 - UML e Padrões de Projeto

Modelo$x$Implementação$

UML e Padrões de Projeto Centro Universitário do Triângulo 96

Page 97: Aula 04 - UML e Padrões de Projeto

Mais$integração...$•  Como! agora! estamos! delegando! o! comportamento! de! voar! e! grasnar,!temos!que!definir! as! variáveis! de! instância!flyBehaviour! e!quackBehaviour!nas!subclasses!de!Duck.!!

UML e Padrões de Projeto Centro Universitário do Triângulo 97

Page 98: Aula 04 - UML e Padrões de Projeto

Mais$integração...$•  Como! agora! estamos! delegando! o! comportamento! de! voar! e! grasnar,!temos!que!definir! as! variáveis! de! instância!flyBehaviour! e!quackBehaviour!nas!subclasses!de!Duck.!!

UML e Padrões de Projeto Centro Universitário do Triângulo 98

public class MallardDuck extends Duck {

public MallardDuck() {

quackBehavior = new Quack(); flyBehavior = new FlyWithWings();

}

public void display() {System.out.println("I'm a real Mallard duck");

}}

Page 99: Aula 04 - UML e Padrões de Projeto

Mais$integração...$•  Como! agora! estamos! delegando! o! comportamento! de! voar! e! grasnar,!temos!que!definir! as! variáveis! de! instância!flyBehaviour! e!quackBehaviour!nas!subclasses!de!Duck.!!

UML e Padrões de Projeto Centro Universitário do Triângulo 99

public class MallardDuck extends Duck {

public MallardDuck() {

quackBehavior = new Quack(); flyBehavior = new FlyWithWings();

}

public void display() {System.out.println("I'm a real Mallard duck");

}}

A!classe!MallarDuck!herda!a!variáveis!de!instância!de!Quack$$

Page 100: Aula 04 - UML e Padrões de Projeto

Mais$integração...$•  Como! agora! estamos! delegando! o! comportamento! de! voar! e! grasnar,!temos!que!definir! as! variáveis! de! instância!flyBehaviour! e!quackBehaviour!nas!subclasses!de!Duck.!!

UML e Padrões de Projeto Centro Universitário do Triângulo 100

public class MallardDuck extends Duck {

public MallardDuck() {

quackBehavior = new Quack(); flyBehavior = new FlyWithWings();

}

public void display() {System.out.println("I'm a real Mallard duck");

}}

A!responsabilidade!de!grasnar!é!delegada!ao!

objeto!Quack$$

Page 101: Aula 04 - UML e Padrões de Projeto

Mais$integração...$•  Como! agora! estamos! delegando! o! comportamento! de! voar! e! grasnar,!temos!que!definir! as! variáveis! de! instância!flyBehaviour! e!quackBehaviour!nas!subclasses!de!Duck.!!

UML e Padrões de Projeto Centro Universitário do Triângulo 101

public class MallardDuck extends Duck {

public MallardDuck() {

quackBehavior = new Quack(); flyBehavior = new FlyWithWings();

}

public void display() {System.out.println("I'm a real Mallard duck");

}}

Como!MallarDuck!sabe!como!voar!este!comportamento!é!

uRlizado$

Page 102: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$

UML e Padrões de Projeto Centro Universitário do Triângulo 102

Como$podemos$alterar$o$comportamento$de$um$Duck$após$sua$instanciação?$

Page 103: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$

UML e Padrões de Projeto Centro Universitário do Triângulo 103

Como$podemos$alterar$o$comportamento$de$um$Duck$após$sua$instanciação?$

Como$podemos$alterar$este$comportamento$de$forma$dinâmica$(em$tempo$de$execução)?$

Page 104: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$

UML e Padrões de Projeto Centro Universitário do Triângulo 104

Como$podemos$alterar$o$comportamento$de$um$Duck$após$sua$instanciação?$

Como$podemos$alterar$este$comportamento$de$forma$dinâmica$(em$tempo$de$execução)?$

Por meio da mágica do polimorfismo, podemos atribuir dinamicamente uma classe de implementação diferente em tempo de execução.

Page 105: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Vamos!adicionar!dois!novos!métodos!à!classe!Duck.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 105

public void setFlyBehavior (FlyBehavior fb) {

flyBehavior = fb;} public void setQuackBehavior(QuackBehavior qb) {

quackBehavior = qb;}

Page 106: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Criaremos!um!novo!Rpo!de!pato.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 106

public class ModelDuck extends Duck {

public ModelDuck() {

flyBehavior = new FlyNoWay();quackBehavior = new Quack();

}

public void display() {System.out.println("I'm a model duck");

}}

Page 107: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Criaremos!um!novo!Rpo!de!pato.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 107

public class ModelDuck extends Duck {

public ModelDuck() {

flyBehavior = new FlyNoWay();quackBehavior = new Quack();

}

public void display() {System.out.println("I'm a model duck");

}}

O!novo!modelo!de!pato!começa!a!vida!no!chão,!sem!nenhuma!maneira!de!voar!

Page 108: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Vamos!criar!um!novo!Rpo!de!FlyBehaviour.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 108

public class FlyRocketPowered implements FlyBehavior {

public void fly() {

System.out.println("I'm flying with a rocket");

}}

Page 109: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Altere!a!sua!classe!de!teste,!instanciando!um!novo!ModelDuck!e!alterando!o!seu!comportamento!para!voar!como!um!foguete.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 109

public class DuckSimulator {

public static void main(String[] args) {

Duck mallard = new MallardDuck();mallard.performQuack();mallard.performFly();

Duck model = new ModelDuck();model.performFly();model.setFlyBehavior(new FlyRocket());model.performFly();

}}

Page 110: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Altere!a!sua!classe!de!teste,!instanciando!um!novo!ModelDuck!e!alterando!o!seu!comportamento!para!voar!como!um!foguete.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 110

public class DuckSimulator {

public static void main(String[] args) {

Duck mallard = new MallardDuck();mallard.performQuack();mallard.performFly();

Duck model = new ModelDuck();model.performFly();model.setFlyBehavior(new FlyRocket());model.performFly();

}}

A!primeira!chamada!ao!método!performFly()!delega!o!comportamento!para!o!flyBehaviour$definido!no!construtor!de!ModelDuck!

Page 111: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Altere!a!sua!classe!de!teste,!instanciando!um!novo!ModelDuck!e!alterando!o!seu!comportamento!para!voar!como!um!foguete.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 111

public class DuckSimulator {

public static void main(String[] args) {

Duck mallard = new MallardDuck();mallard.performQuack();mallard.performFly();

Duck model = new ModelDuck();model.performFly();model.setFlyBehavior(new FlyRocket());model.performFly();

}}

Para!alterar!o!comportamento!de!um!Duck!em!tempo!de!execução,!basta!chamar!um!dos!métodos!

polifórmicos!que!criamos!

Page 112: Aula 04 - UML e Padrões de Projeto

Comportamento$Dinâmico$•  Altere!a!sua!classe!de!teste,!instanciando!um!novo!ModelDuck!e!alterando!o!seu!comportamento!para!voar!como!um!foguete.!

!

!

!

UML e Padrões de Projeto Centro Universitário do Triângulo 112

public class DuckSimulator {

public static void main(String[] args) {

Duck mallard = new MallardDuck();mallard.performQuack();mallard.performFly();

Duck model = new ModelDuck();model.performFly();model.setFlyBehavior(new FlyRocket());model.performFly();

}}

Quando!o!performFly!é!chamado,!o!pato!voará!como!

um!foguete!

Page 113: Aula 04 - UML e Padrões de Projeto

Modelo$de$Classes$

UML e Padrões de Projeto Centro Universitário do Triângulo 113

Page 114: Aula 04 - UML e Padrões de Projeto

#3$Princípios$de$Projeto$Dar$prioridade$à$composição$

•  Cada!pato!tem!um!FlyBehaviour!e!um!QuackBehaviour!aos!quais!delega!as!capacidades!de!voar!e!grasnar.!

UML e Padrões de Projeto Centro Universitário do Triângulo 114

Page 115: Aula 04 - UML e Padrões de Projeto

#3$Princípios$de$Projeto$Dar$prioridade$à$composição$

•  Cada!pato!tem!um!FlyBehaviour!e!um!QuackBehaviour!aos!quais!delega!as!capacidades!de!voar!e!grasnar.!

UML e Padrões de Projeto Centro Universitário do Triângulo 115

Criar sistemas usando composições nos permite: -  Uma maior flexibilidade; -  Encapsular uma família de algoritmos em seu próprio conjunto de

classes; - Alterar o comportamento de objetos em tempo de execução.

Page 116: Aula 04 - UML e Padrões de Projeto

Padrão$Strategy$•  Acabamos! de! aplicar! o! nosso! primeiro! padrão! de! projetos,! o! padrão!Strategy.!

• O!padrão!Strategy!define!uma!família!de!objetos,!encapsula!cada!um!deles!e! o! torna! ! intercambiáveis.! O! Strategy! deixa! o! algoritmo! variar!independentemente!dos!clientes!que!o!uRlizam.!

UML e Padrões de Projeto Centro Universitário do Triângulo 116

Page 117: Aula 04 - UML e Padrões de Projeto

Bibliografia$•  Ian! Sommerville.! Engenharia! de! So[ware,! 9a! Edição.! Pearson! EducaRon,!2011.!

•  Erich! Freeman,! Elizabeth! Freeman.! HeadFirst! –! Design! PaÄerns.! O! ́REILLY!2004.!

• METSKER,!J.!Design!PaÄerns!Java!Workbook.!EUA:!AddisonKWesley!2002.!

UML e Padrões de Projeto Centro Universitário do Triângulo 117