padroes de projeto - introducao

Download Padroes de Projeto - Introducao

Post on 01-Jul-2015

489 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Padres de Projeto IntroduoProf. Eduardo Bezerra edubezerra@gmail.com

Definio Um padro uma entidade que descreve um problema que ocorre freqentemente, e ento descreve a essncia de uma soluo para o problema, de maneira que voc possa usar esta soluo um milho de vezes, sem faz-la do mesmo jeito duas vezes.Christopher Alexander (Arquiteto e Urbanista)

ALEXANDER, C. et al. A Pattern Language: Towns, Buildings, Construction. Oxford University Press, New York, NY, 1977.

2

Tipos de padres de software Padres organizacionais (organizational patterns) Padres de requisitos Padres de anlise (analysis patterns) Padres de projeto (design patterns) Padres arquitetnicos (architectural patterns) Padres de implementao (idioms, coding patterns) Padres de testes Anti-padres (anti patterns)3

Catlogos de padres Um catlogo de padres um grupo de padres que esto relacionados de uma certa forma e podem ser usados juntos ou independentemente. Core JEE (Java Enterprise Edition) PoEAA (Patterns of Enterprise Application Architecture) POSA (Pattern-Oriented Software Architecture) GRASP (General Responsibility Assignment Software Patterns/Principles) GoF (Gang of Four)

4

Catlogo Core JEE

Fonte: http://java.sun.com/blueprints/corej2eepatterns/Patterns/

5

Catlogo PoEAA

Fonte: http://martinfowler.com/eaaCatalog/

6

Catlogo POSA Pattern-Oriented Software Architecture: A System of Patterns, F. Buschmann et al, Wiley & Sons, Chichester, UK, 1996. Patterns for Concurrent and Networked Objects, Douglas C. Schmidt et al, Wiley & Sons, 2000. Volume 3: Patterns for Resource Management, Michael Kircher, Prashant Jain, Wiley & Sons, 2004. A Pattern Language for Distributed Computing, Frank Buschmann et al, Wiley & Sons, 2007. On Patterns and Pattern Languages, Frank Buschmann et al, Wiley & Sons, 2007.7

Catlogo GRASP Low Coupling/High Cohesion Expert Creator Polymorphism Pure Fabrication Dont Talk to Strangers (Law of Demeter) Controller Indirection Protected Variations8

Catlogo GoF

Fonte da figura: GoF Book

9

Categorizao dos padres GoF Os 23 padres GoF podem ser categorizados de acordo com diversos critrios. Dois possveis critrios so o escopo e a finalidade.

De acordo com o escopo: classe (4) objeto (20)

De acordo com a finalidade: estruturais (7) de criao (5) comportamentais (11)10

Categorizao por escopo Escopo de classe Descrevem relacionamentos entre classes e suas subclasses (herana). Estticos: relacionamentos so fixos e definidos em tempo de compilao.

Escopo de objeto Descrevem relacionamentos entre objetos. Dinmicos: relacionamentos entre objetos podem ser alterados em tempo de execuo.11

Categorizao por finalidade Estruturais Tratam da composio de classes e objetos para formar estruturas complexas. Associados maneira como classes e objetos so organizados estruturalmente. Oferecem formas efetivas para usar conceitos OO como herana e composio. So abstraes de aspectos estruturais

12

Categorizao por finalidade De criao Associados ao processo de criao de objetos Tornam um sistema independente de como seus objetos so criados, compostos e representados

Comportamentais Tm a ver com a maneira pela qual responsabilidades so distribudas a classes e objetos durante a realizao de uma tarefa. So abstraes de aspectos comportamentais13

Categorizao por finalidade1. Abstract Factory 2. Builder 3. Factory Method 4. Prototype 5. Singleton 6. Adapter 7. Bridge 8. Composite 9. Decorator 10. Facade 11. Flyweight 12. Proxy 13. Chain of Responsibility 14. Command 15. Interpreter 16. Iterator 17. Mediator 18. Memento 19. Observer 20. State 21. Strategy 22. Template Method 23. VisitorPadres de Criao Padres Estruturais Padres de Comportamento14

Categorizao dos padres GoF

Fonte da figura: Argo Navis, curso J930 - Padres de Design

15

Resumo do padres GoF (1/7) 1. Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes. 2. Faade: Oferecer uma interface nica de nvel mais elevado para um conjunto de interfaces de um subsistema. 3. Composite: Permitir o tratamento de objetos individuais e composies hierrquicas desses objetos de maneira uniforme. 4. Bridge: Desacoplar uma abstrao de sua implementao, de tal forma que os dois possam variar independentemente. 16

Resumo do padres GoF (2/7) 5. Singleton: Garantir que uma classe s tenha uma nica instncia, e prover um ponto de acesso global a ela. 6. Observer: Definir uma dependncia um-paramuitos entre objetos para que, quando um objeto mudar de estado, os seus dependentes sejam notificados e atualizados. 7. Mediator: Definir um objeto que encapsula a forma como um conjunto de objetos interage.17

Resumo do padres GoF (3/7) 8. Proxy: Prover um substituto ou ponto atravs do qual um objeto possa controlar o acesso a outro. 9. Chain of Responsibility: Compor objetos em cascata para, atravs dela, delegar uma requisio at que um objeto a sirva. 10. Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos complexos.

18

Resumo do padres GoF (4/7) 11. Builder: Separar a construo de objeto complexo da representao para criar representaes diferentes com mesmo processo. 12. Factory Method: Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. 13. Abstract Factory: Prover interface para criar famlias de objetos relacionados ou dependentes sem especificar suas classes concretas.19

Resumo do padres GoF (5/7) 14. Prototype: Especificar tipos a criar usando uma instncia como prottipo e criar novos objetos ao copiar este prottipo. 15. Memento: Externalizar o estado interno de um objeto para que o objeto possa ter esse estado restaurado posteriormente. 16. Template Method: Definir o esqueleto de um algoritmo dentro de uma operao, deixando alguns passos a serem preenchidos pelas subclasses. 17. State: Permitir a um objeto alterar o seu comportamento quando o seu estado interno mudar. 20

Resumo do padres GoF (6/7) 18. Strategy: Definir uma famlia de algoritmos, encapsular cada um, e faz-los intercambiveis. 19. Command: Encapsular uma requisio como objeto, para parametrizar clientes com diferentes requisies, filas e dar suporte a aes reversveis. 20. Interpreter: Dada uma linguagem, definir uma representao para sua gramtica junto com um interpretador.

21

Resumo do padres GoF (7/7) 21. Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente. 22. Iterator: Prover acesso sequencial a elementos de um objeto agregado, sem expor sua representao interna. 23. Visitor: Representar uma operao a ser realizada sobre os elementos de uma estrutura de objetos.

22

Referncias

23

Referncias (cont.) Gamma et al., Padres de Projeto - Solues Reutilizveis de Software Orientado a Objetos, Porto Alegre: Bookman, 2000. Freeman et al., Use a Cabea!: Padres de Projetos (Design Patterns), Rio de Janeiro: Alta Books, 2005. Steven John Metsker, Design Patterns Java Workbook. Addison-Wesley, 2002. Brown et al., Anti-Patterns: Refactoring Software, Architectures and Projects in Crisis, Wiley, 1998.24

Referncias (cont.) Martin Fowler, Padres de Arquitetura de Aplicaes Corporativas, Porto Alegre: Bookman, 2006. Deepak Alur, John Crupi & Dan Malks, CORE J2EE Patterns Melhores Prticas e Estratgias de Design, 2 edio, Rio de Janeiro: Campus/Elsevier, 2004. Craig Larman, Utilizando UML e Padres, 3 edio, 2005, ISBN: 85-363-0358-1, Porto Alegre: Bookman.

25

Material complementar

26

Introduo Projetar software OO reusvel e de boa qualidade uma tarefa difcil. Para realizar essa tarefa a contento, projetistas experientes usam solues de sucesso com as quais j trabalharam no passado. Isso leva descoberta de padres de projeto. Durante duas dcadas, a comunidade de padres vem se desenvolvendo de acordo com essa dinmica.27

Padres Outras definies Um padro a abstrao de uma forma concreta que ocorre muitas vezes em contextos especficos. Riehle & Zullighoven, 1996 Os padres de projeto so descries de objetos que se comunicam e classes que so customizadas para resolver um problema genrico de design em um contexto especfico Gamma et al., 1994 Resolve um problema. um conceito provado. A soluo no bvia. Descreve um relacionamento. Jim Coplien, 1996.28

Padres - caractersticas Capturam solues de projeto exaustivamente refinadas com o passar do tempo. So o resultado de um longo processo de projeto, re-projeto, teste e reflexo sobre o que torna um sistema mais flexvel, reusvel e modular.

29

Elementos da descrio GoF (1/3) Nome nome do padro

Inteno O que o padro de projeto faz

Tambm conhecimento como Outros nomes pelos quais o padro conhecido

Motivao Outros nomes pelos quais o padro conhecido

Aplicabilidade Descreve situaes em que o padro aplicvel.

30

Elementos da descrio GoF (2/3) Estrutura Ilustrao grfica dos elementos (classes, interfaces) que constituem o design do padro.

Participantes Descrio das responsabilidades de cada elemento do padro.

Colaboraes Descrio das responsabilidades de cada elemento do padro.

Conseqncias Resultados e compromissos decorrentes da aplicao do padro. Impactos sobre a flexibilidade, estensibilidade, portabilidade ou desempenho do sistema.

31

Elementos da descrio GoF (2/3) Implementao Sugestes e dicas para implementar o padro.

Exemplo de cdigo Exemplos de cdigo em uma linguagem de programao OO.

Usos conhecidos Usos conhecidos do padro em sistemas reais.

Padres relacionados Relacionamentos e diferenas com outros padres.

32