!
!
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

Aula 04 - UML e Padrões de Projeto