SlideShare uma empresa Scribd logo
1 de 117
Baixar para ler 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

Mais conteúdo relacionado

Mais procurados

07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo FísicoCentro Paula Souza
 
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosBanco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosLeinylson Fontinele
 
Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02thomasdacosta
 
Lista de exercício
Lista de exercício   Lista de exercício
Lista de exercício Jota Thin
 
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
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizesArmando Daniel
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraNatanael Simões
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Modelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLModelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLClaudio Martins
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAlberto Simões
 
Metodologia orientado a objetos
Metodologia orientado a objetosMetodologia orientado a objetos
Metodologia orientado a objetosGabriel Faustino
 

Mais procurados (20)

07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico07 Modelagem de banco de dados: Modelo Físico
07 Modelagem de banco de dados: Modelo Físico
 
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosBanco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
 
Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02
 
Lista de exercício
Lista de exercício   Lista de exercício
Lista de exercício
 
Modelagem de dados
Modelagem de dados Modelagem de dados
Modelagem de dados
 
UML
UMLUML
UML
 
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
 
Diagrama de Classes
Diagrama de ClassesDiagrama de Classes
Diagrama de Classes
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
 
Introdução à UML com Casos de Uso
Introdução à UML com Casos de UsoIntrodução à UML com Casos de Uso
Introdução à UML com Casos de Uso
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
O que é um Banco de Dados Relacional?
O que é um Banco de Dados Relacional?O que é um Banco de Dados Relacional?
O que é um Banco de Dados Relacional?
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Modelagem Aplicações Web com UML
Modelagem Aplicações Web com UMLModelagem Aplicações Web com UML
Modelagem Aplicações Web com UML
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Clase4 poo-uml
Clase4 poo-umlClase4 poo-uml
Clase4 poo-uml
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de Atividade
 
Metodologia orientado a objetos
Metodologia orientado a objetosMetodologia orientado a objetos
Metodologia orientado a objetos
 

Destaque

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
 

Destaque (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
 

Último

GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docPauloHenriqueGarciaM
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...azulassessoria9
 
Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfFbioFerreira207918
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...marcelafinkler
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxJustinoTeixeira1
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdLeonardoDeOliveiraLu2
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa paraAndreaPassosMascaren
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxFlviaGomes64
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfJuliana Barbosa
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...marcelafinkler
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasrfmbrandao
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfLidianeLill2
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptNathaliaFreitas32
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubeladrianaguedesbatista
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaCentro Jacques Delors
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmicolourivalcaburite
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 

Último (20)

GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
Missa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdfMissa catequese para o dia da mãe 2025.pdf
Missa catequese para o dia da mãe 2025.pdf
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
 
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdfMESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 

Aula 04 - UML e Padrões de Projeto