SlideShare a Scribd company logo
1 of 117
Download to read offline
!
!
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!viniciusdepaula@unitri.edu.br!
Introdução$a$Padrões$
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
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
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
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!!
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
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
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
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
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
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
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
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
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
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
Classificação$dos$Padrões$
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
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(
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(
BemPVindo$aos$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
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(
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
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$
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!!$
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.
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!!
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(
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
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?
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
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$
Surge$uma$manutenção$no$sistema...$
Após! a! atualização! do! sistema,! 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
Surge$uma$manutenção$no$sistema...$
Após! a! atualização! do! sistema,! 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!$
Surge$uma$manutenção$no$sistema...$
Após! a! atualização! do! sistema,! 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!$
Surge$uma$manutenção$no$sistema...$
Após! a! atualização! do! sistema,! 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.
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
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!
!$
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...!
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...!
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!
!$
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?!
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?!
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?!
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
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
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.
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
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.
Que$tal$uma$Interface?$
UML e Padrões de Projeto Centro Universitário do Triângulo 51
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.
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.
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?
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
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.
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
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
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
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.
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]
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?!
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
Princípios$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
#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
#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.
#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
#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.
#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
#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
#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
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
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
#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
#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
#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$
#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$
#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$
#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
#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.
Implementando$os$Comportamentos$
UML e Padrões de Projeto Centro Universitário do Triângulo 82
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$
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$
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$
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$
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$
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.
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?!
!
!
!
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$ criar$ uma$ classe$ FlyRocket$ 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.!
!
!
!
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
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
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
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
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..
}
Modelo$x$Implementação$
UML e Padrões de Projeto Centro Universitário do Triângulo 96
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
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");
}
}
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$$
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$$
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$
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?$
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)?$
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.
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;
}
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");
}
}
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!
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");
}
}
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();
}
}
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!
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!
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!
Modelo$de$Classes$
UML e Padrões de Projeto Centro Universitário do Triângulo 113
#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
#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.
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
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

More Related Content

What's hot

Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugolGabriel Faustino
 
Ciclo de vida de software
Ciclo de vida de softwareCiclo de vida de software
Ciclo de vida de softwarediha36
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoLeinylson Fontinele
 
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. CarvalhoAula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. CarvalhoRudson Kiyoshi Souza Carvalho
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareCloves da Rocha
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosMauro Pereira
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software PressmanSimoneinfo
 
Prototipação de software
Prototipação de softwarePrototipação de software
Prototipação de softwareleopp
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 

What's hot (20)

Teste de software
Teste de softwareTeste de software
Teste de software
 
Eng.ª do Software - 4. Processos de software
Eng.ª do Software - 4. Processos de softwareEng.ª do Software - 4. Processos de software
Eng.ª do Software - 4. Processos de software
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Ciclo de vida de software
Ciclo de vida de softwareCiclo de vida de software
Ciclo de vida de software
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
 
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. CarvalhoAula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
Aula de Analise e Projetos - Diagramas UML - prof. Rudson Kiyoshi S. Carvalho
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
UML
UMLUML
UML
 
A Linguagem UML
A Linguagem UMLA Linguagem UML
A Linguagem UML
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
Matrizes em c#
Matrizes em c#Matrizes em c#
Matrizes em c#
 
Prototipação de software
Prototipação de softwarePrototipação de software
Prototipação de software
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
Gestao agil de projetos
Gestao agil de projetosGestao agil de projetos
Gestao agil de projetos
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 

Viewers also liked

Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de ProjetoEduardo Mendes
 
Aula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoAula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoVinícius de Paula
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoVinícius de Paula
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAAricelio Souza
 
Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto ObserverLuiza Uira
 
Padrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyPadrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyJoão Carlos Ottobboni
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Introdução à Engenharia de Software (parte II)
Introdução à Engenharia de Software (parte II)Introdução à Engenharia de Software (parte II)
Introdução à Engenharia de Software (parte II)Nécio de Lima Veras
 
Padrões no Desenvolvimento de Software
Padrões no Desenvolvimento de SoftwarePadrões no Desenvolvimento de Software
Padrões no Desenvolvimento de SoftwareEmanuel Poletto
 
Engenharia de Software para Jogos
Engenharia de  Software para JogosEngenharia de  Software para Jogos
Engenharia de Software para JogosRicardo Leite
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 

Viewers also liked (16)

Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de Projeto
 
Aula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de ProjetoAula 01 - UML e Padrões de Projeto
Aula 01 - UML e Padrões de Projeto
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Games, lado dev
Games, lado devGames, lado dev
Games, lado dev
 
Aula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de ProjetoAula 06 - UML e Padrões de Projeto
Aula 06 - UML e Padrões de Projeto
 
Padrões de Projeto (GoF)
Padrões de Projeto (GoF)Padrões de Projeto (GoF)
Padrões de Projeto (GoF)
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAA
 
Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto Observer
 
Padrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyPadrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e Strategy
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Introdução à Engenharia de Software (parte II)
Introdução à Engenharia de Software (parte II)Introdução à Engenharia de Software (parte II)
Introdução à Engenharia de Software (parte II)
 
Padrões no Desenvolvimento de Software
Padrões no Desenvolvimento de SoftwarePadrões no Desenvolvimento de Software
Padrões no Desenvolvimento de Software
 
Engenharia de Software para Jogos
Engenharia de  Software para JogosEngenharia de  Software para Jogos
Engenharia de Software para Jogos
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 

Recently uploaded

A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxfabiolalopesmartins1
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresLilianPiola
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxIsabelaRafael2
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 

Recently uploaded (20)

XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptx
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolaresALMANANHE DE BRINCADEIRAS - 500 atividades escolares
ALMANANHE DE BRINCADEIRAS - 500 atividades escolares
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 

Aula 04 - UML e Padrões de Projeto