Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Aula 04 - UML e Padrões de Projeto

1.161 visualizaciones

Publicado el

Especialização em Desenvolvimento Java - Módulo: UML e Padrões de Projeto

Publicado en: Educación
  • Inicia sesión para ver los comentarios

Aula 04 - UML e Padrões de Projeto

  1. 1. ! ! 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!
  2. 2. Introdução$a$Padrões$
  3. 3. 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
  4. 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! UML e Padrões de Projeto Centro Universitário do Triângulo 4
  5. 5. 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
  6. 6. 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!!
  7. 7. 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
  8. 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.!! ! UML e Padrões de Projeto Centro Universitário do Triângulo 8
  9. 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.!! UML e Padrões de Projeto Centro Universitário do Triângulo 9
  10. 10. 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
  11. 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! UML e Padrões de Projeto Centro Universitário do Triângulo 11
  12. 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! UML e Padrões de Projeto Centro Universitário do Triângulo 12
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. Classificação$dos$Padrões$
  18. 18. 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
  19. 19. 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(
  20. 20. 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(
  21. 21. BemPVindo$aos$Padrões$de$Projeto$
  22. 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 22
  23. 23. 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(
  24. 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 24
  25. 25. 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$
  26. 26. 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!!$
  27. 27. 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.
  28. 28. 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!!
  29. 29. 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(
  30. 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 30
  31. 31. 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?
  32. 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 32
  33. 33. 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$
  34. 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 34
  35. 35. 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!$
  36. 36. 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!$
  37. 37. 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.
  38. 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 38
  39. 39. 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! !$
  40. 40. 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...!
  41. 41. 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...!
  42. 42. 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! !$
  43. 43. 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?!
  44. 44. 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?!
  45. 45. 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?!
  46. 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 46
  47. 47. 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
  48. 48. 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.
  49. 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 49
  50. 50. 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.
  51. 51. Que$tal$uma$Interface?$ UML e Padrões de Projeto Centro Universitário do Triângulo 51
  52. 52. 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.
  53. 53. 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.
  54. 54. 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?
  55. 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 55
  56. 56. 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.
  57. 57. 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
  58. 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 58
  59. 59. 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
  60. 60. 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.
  61. 61. 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]
  62. 62. 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?!
  63. 63. 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
  64. 64. Princípios$de$Projeto$
  65. 65. #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
  66. 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 66
  67. 67. #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.
  68. 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 68
  69. 69. #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.
  70. 70. #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
  71. 71. #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
  72. 72. #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
  73. 73. 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
  74. 74. 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
  75. 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 75
  76. 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 76
  77. 77. #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$
  78. 78. #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$
  79. 79. #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$
  80. 80. #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
  81. 81. #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.
  82. 82. Implementando$os$Comportamentos$ UML e Padrões de Projeto Centro Universitário do Triângulo 82
  83. 83. 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$
  84. 84. 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$
  85. 85. 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$
  86. 86. 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$
  87. 87. 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$
  88. 88. 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.
  89. 89. 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?! ! ! !
  90. 90. 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.! ! ! !
  91. 91. 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
  92. 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.! UML e Padrões de Projeto Centro Universitário do Triângulo 92
  93. 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.! ! ! UML e Padrões de Projeto Centro Universitário do Triângulo 93
  94. 94. 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
  95. 95. 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.. }
  96. 96. Modelo$x$Implementação$ UML e Padrões de Projeto Centro Universitário do Triângulo 96
  97. 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 97
  98. 98. 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"); } }
  99. 99. 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$$
  100. 100. 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$$
  101. 101. 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$
  102. 102. 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?$
  103. 103. 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)?$
  104. 104. 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.
  105. 105. 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; }
  106. 106. 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"); } }
  107. 107. 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!
  108. 108. 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"); } }
  109. 109. 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(); } }
  110. 110. 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!
  111. 111. 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!
  112. 112. 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!
  113. 113. Modelo$de$Classes$ UML e Padrões de Projeto Centro Universitário do Triângulo 113
  114. 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 114
  115. 115. #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.
  116. 116. 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
  117. 117. 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

×