Padres de Design Toacy Cavalcante de Oliveira Problema
Padrões de Design Toacy Cavalcante de Oliveira
Problema 24 February 2021 2
Análise vs Projeto n Análise ¨ Modela o mundo real. ¨ Usualmente não é “mapeável”para o Projeto pois tende a ser ineficiente/ineficaz. n Projeto ¨ Atribuição de Responsabilidades. ¨ Boas práticas (+Coesão, -Acoplamento) 24 February 2021 3
Como compatibilizar os dois mundos? Tipicamente, bons projetistas são formados após um longo período de experiência. n São hábeis praticantes do conceitos básicos de ES. n ¨ Abstração, 24 February 2021 Flexibilidade e Modularidade 4
Problema n Como capturar este conhecimento de modo a transmiti-lo a outros desenvolvedores para que estes também se tornem experts? n Design Patterns 24 February 2021 5
Introdução 24 February 2021 6
Definições n “um padrão descreve um problema que se repete várias vezes em um determinado meio, descrevendo o núcleo de sua solução, de modo que esta solução possa ser usada milhares e milhares de vezes. " [Christopher Alexander] 24 February 2021 7
Definições n Os Padrões de Design formam um conjunto de regras que descrevem como realizar certas tarefas no âmbito do desenvolvimento de software [Pree, 1994]. 24 February 2021 8
Definições n n Um Padrão de Design visa resolver um problema recorrente de design que surge em determinadas situações [Buschmann et al. , 1996]. Os Padrões de Design identificam e definem abstrações que estão acima do nível de uma única classe e de suas instâncias, ou de componentes [Gamma et al. , 1994]. 24 February 2021 9
Motivação para DP Novos problemas são geralmente similares a problemas já resolvidos anteriormente. n As soluções para problemas similares seguem padrões recorrentes. n 24 February 2021 10
Benefícios n n Servem de guia para a solução do problema. Ajudam a gerenciar a complexidade do software Estimulam a aplicação e disseminação de boas práticas da POO. Definem um vocabulário comum entre os projetistas, o que ajuda na disseminação de soluções bem sucedidas. 24 February 2021 11
Histórico 24 February 2021 12
De onde vêm? n Christofer Alexander ¨A Pattern Language, Oxford University Press 1977 ¨ Timeless way of Building, Oxford University Press 1979 n C. A. era arquiteto e identificou uma série de padrões utilizados na construção de edificações. 24 February 2021 13
OOPSLA n Em 1987, Ward Cunningham e Kent Beck usaram algumas das idéias de Alexander no trabalho sobre GUI intitulado “Using Pattern Languages for Object-Oriented Programs” [OOPSLA-87]. 24 February 2021 14
Gang-of-Four n Em 1994, Erich Gamma, Richard Helm, John Vlissides e Ralph Johnson publicaram um dos livros mais importantes de Engenharia de Software da década de 90: “Design Patterns: Elements of Reusable Object-Oriented Software” [Go. F]. 24 February 2021 15
Livros Design Patterns: Elements of Reusable Object-Oriented Software Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Addison-Wesley, October 1994 24 February 2021 16
Descrevendo Padrões 24 February 2021 17
4 Elementos Essenciais n Nome do padrão n Problema n Solução n Conseqüências 24 February 2021 18
Nome n Serve de referência para o padrão. n Aumenta o vocabulário de projeto. n Deve ser único. 24 February 2021 19
Problema n Quando aplicar um padrão. n Contexto. n Lista de condições que justifiquem aplicar o padrão. 24 February 2021 20
Solução n Elementos que compõem o padrão. n “Arranjo” geral dos seus elementos. n Responsabilidades e colaborações destes elementos. 24 February 2021 21
Conseqüência n Análises n Vantagens / desvantagens n Flexibilidade, capacidade de extensão ou portabilidade. 24 February 2021 22
Exemplo 24 February 2021 23
Identificação n n Nome: Observer Problema: Notificar a ocorrência de um evento a uma lista de objetos. Solução: Observers delegam a responsabilidade de monitoramento para um objeto central o Subject. Consequencias: Permite variar Subject e Observer de forma independente. Permite comunicação broadcast. 24 February 2021 24
Observer - Elementos 24 February 2021 25
Catálogo 24 February 2021 26
Go. F & POSA n Go. F (“the gang of four”) catalogue ¨ “Design Patterns: Elements of Reusable Object Oriented Software, ” Gamma, Helm, Johnson, Vlissides, Addison-Wesley, 1995 n POSA catalogue ¨ Pattern-Oriented Software Architecture, Buschmann, et al. ; Wiley, 1996 24 February 2021 27
Estrutura do Catálogo n Classifica padrões de acordo com seu propósito, ¨ De Criação ¨ Estrutural ¨ Comportamental n e escopo. ¨ Objeto ¨ Classe 24 February 2021 28
Quanto ao escopo n Classes ¨ Padrões tratam do relacionamento entre classes e subclasses; n Objetos ¨ Padrões tratam relacionamentos entre objetos e por isso podem ser alterados em tempo de execução. 24 February 2021 29
De Criação n Diz respeito ao processo ou ciclo de criação de um objeto. ¨ Escopo classe: delega a criação de um objeto para alguma de suas subclasses. ¨ Escopo objeto: delega a criação de um objeto para outro objeto 24 February 2021 30
Estrutural n Diz respeito a composição de objetos e classes; ¨ Escopo classe: Utilizam herança para compor objetos ¨ Escopo Objeto: Descreve formas de compor objetos. 24 February 2021 31
Comportamental n Caracteriza o modo como classes e objetos interagem e compartilham responsabilidades. ¨ Escopo Classe: Utiliza herança para descrever algoritmos e controle de fluxo. ¨ Escopo Objeto: Descreve como um grupo de objetos cooperam de modo a executar uma tarefa. 24 February 2021 32
Visão Geral 24 February 2021 33
Estrutura Interna n Além das 4 características essenciais, o Catálogo do Go. F define outras características para descrever padrões. 24 February 2021 34
Estrutura Interna 1/3 n Nome do Padrão e Classificação ¨ n Propósito ¨ ¨ n O quê o Padrão faz? Que tipo de problema ou característica particular de projeto ele trata? Também Conhecido Como: ¨ n Passa a fazer parte do vocabulário dos projetistas. Conjunto de outros nomes (apelidos) conhecidos para o Padrão, se existir algum. Motivação ¨ Um cenário que ilustra o problema de projeto e como as estruturas de classes e objetos no Padrão o resolvem. 24 February 2021 35
Estrutura Interna 2/3 n Aplicação ¨ ¨ ¨ n Estrutura ¨ n Uma representação gráfica das classes no padrão Participantes ¨ n Quais são as situações onde este padrão pode ser aplicado? Quais são os exemplos de projetos que ele pode tratar? Como você pode reconhecer estas situações? As classes e/ou objetos que participam no padrão de projeto, e suas responsabilidades Colaborações ¨ Como os participantes interagem para cumprir suas responsabilidades 24 February 2021 36
Estrutura Interna 3/3 n Conseqüências ¨ ¨ n Implementação ¨ n Fragmentos de código que ilustram como o padrão deve ser implementado Usos Conhecidos ¨ n Dicas e técnicas que o projetista deve saber, e possíveis armadilhas para as quais ele deve estar preparado. Exemplo de Código ¨ n Como o padrão alcança seus objetivos? Quais são os resultados do uso do padrão? Exemplos de utilização do padrão em sistemas já implementados. Padrões Relacionados ¨ Lista de alguns padrões fortemente relacionados ao padrão em questão e as suas principais diferenças. 24 February 2021 37
Observer 24 February 2021 38
O padrão Observer n Classificação ¨ Comportamental n de Objetos Propósito ¨ Provê sincronização, coordenação e consistência entre objetos relacionados. n Também Conhecido Como: ¨ Dependents, 24 February 2021 Publish-Subscribe 39
Motivação n Necessidade de manter consistência entre objetos relacionados. n Não existe interesse em tornar as classes fortemente acopladas. n Ex. Planilha e gráfico de barras. ¨ ¨ Não tem conhecimento um do outro Trabalham em conjunto apresentando uma mesma informação n O padrão observer oferece um mecanismo para resolver esse problema n Subject Possui um conjunto de observers. n Notifica seus observers quando sofre uma mudança de estado 24 February 2021 40
Aplicabilidade n Quando uma mudança em um objeto exige mudanças em outros, e não são conhecidos quantos devem ser mudados. n Quando um objeto deve ser capaz de notificar outros objetos sem que estes sejam fortemente acoplados. 24 February 2021 41
Estrutura 24 February 2021 42
Participantes n Subject ¨ ¨ n Concrete. Subject ¨ ¨ n guarda o estado de interesse para Concrete. Observer envia uma notificação para seu Observer quando seu estado muda. Observer ¨ n conhece seu Observer. Qualquer número de objetos Observer podem observar um Subject provê uma interface para acoplar e desacoplar objetos Observer. define uma interface de atualização para objetos que devem ser notificados sobre mudanças em um Subject. Concrete. Observer ¨ ¨ ¨ Mantém uma referência para um objeto Concrete. Subject Guarda o estado que deve ficar consistente com o de Subject Implementa o Observer atualizando a interface para manter seu estado consistente com o de Subject. 24 February 2021 43
Colaborações n O Concrete. Subject notifica seus observadores sempre que ocorrer uma mudança. n Após ter sido notificado, um Concrete. Observer pode consultar o subject. 24 February 2021 44
Conseqüências n Acoplamento fraco entre o Subject e o Observer n Suporte para comunicações em broadcast n Atualizações inesperadas 24 February 2021 45
Implementação n Observando mais de um subject ¨ Subject ativador é passado como parâmetro no método update() n Quem dispara a atualização? ¨ Subject ¨ Cliente 24 February 2021 46
Exemplo de código 24 February 2021 47
Exemplo de código 24 February 2021 48
Exemplo de código 24 February 2021 49
Usos conhecidos n Serviço de Eventos e Serviço de Notificação (CORBA) 24 February 2021 50
Padrões relacionados n Mediator ¨ Encapsula a semântica de atualizações complexas, o Change. Manager atua como um mediador entre subjects e observers n Singleton ¨o Change. Manager pode usar o padrão singleton para torná-lo único e globalmente acessível. 24 February 2021 51
Catálogo 24 February 2021 52
Catálogo n Abstract Factory: ¨ n Adapter: ¨ n Separa uma abstração de sua implementação, de modo que ambas possam variar independentemente. Builder: ¨ n Converte a interface de uma classe em outra, esperada pelo cliente. O Adapter permite que classes que antes não poderiam trabalhar juntas, por incompatibilidade de interfaces, possam agora fazê-lo. Bridge: ¨ n Provê uma interface para criação de famílias de objetos relacionados ou interdependentes. Remove a dependência entre o cliente, que usa os objetos, e a classe dos objetos produzidos. Provê uma interface genérica para a construção incremental de agregações. Um Builder esconde os detalhes de como os componentes são criados, representados e compostos. Chain of Responsibility: ¨ Encadeia os objetos receptores e transporta a mensagem através da corrente até que um dos objetos a responda. Assim, separa (provê loose coupling) objetos transmissores dos receptores, dando a chance de mais de um objeto poder tratar a mensagem. 24 February 2021 53
Catálogo de Padrões de Projeto n Command: ¨ n Composite: ¨ n Anexa responsabilidades adicionais a um objeto dinâmicamente. Provê uma alternativa flexível para extensão de funcionalidade, sem ter que usar Herança. Facade: ¨ n Compõe objetos em árvores de agregação (relacionamento parte-todo). O Composite permite que objetos agregados sejam tratados como um único objeto. Decorator: ¨ n Encapsula uma mensagem como um objeto, de modo que se possa parametrizar clientes com diferentes mensagens. Separa, então, o criador da mensagem do executor da mesma. Provê uma interface unificada para um conjunto de interfaces em um subsistema. O Facade define uma interface alto nível para facilitar o uso deste subsistema. Factory Method: ¨ Define uma interface para criação de um objeto, permitindo que as subclasses decidam qual classe instanciar. O Factory Method deixa a responsabilidade de instanciação para as subclasses. 54 24 February 2021
Catálogo n Flyweight: ¨ n Interpreter: ¨ n Provê um modo de acesso a elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas internas. Mediator: ¨ n Usado para definição de linguagem. Define representações para gramáticas e abstrações para análise sintática. Iterator: ¨ n Usa o compartilamento para dar suporte eficiente a um grande número de objetos com alto nível de granularidade. Desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações dentre desse grupo. Memento: ¨ Captura e externaliza o estado interno de um objeto (captura um "snapshot"). O Memento não viola o encapsulamento. 24 February 2021 55
Catálogo n Observer: ¨ n Prototype: ¨ n Provê Design para um controlador de acesso a um objeto. Singleton: ¨ n Especifica os tipos de objetos a serem criados num sistema, usando uma instância protótipo. Cria novos objetos copiando este protótipo. Proxy: ¨ n Provê sincronização, coordenação e consistência entre objetos relacionados. Assegura que uma classe tenha apenas uma instância e provê um ponto global de acesso a ela. State: ¨ Deixa um objeto mudar seu comportamento quando seu estado interno muda, mudando, efetivamente, a classe do objeto. 24 February 2021 56
Catálogo n Strategy: ¨ n Template Method: ¨ n Define uma família de algoritmos, encapsula cada um deles, e torna a escolha de qual usar flexível. O Strategy desacopla os algoritmos dos clientes que os usa. Define o esqueleto de um algoritmo em uma operação. O Template Method permite que subclasses componham o algoritmo e tenham a possibilidade de redefinir certos passos a serem tomados no processo, sem contudo alterar sua inetrface. Visitor: ¨ Representa uma operação a ser realizada sobre elementos da estrutura de um objeto. O Visitor permite que se crie um nova operação sem que se mude a classe dos elementos sobre as quais ela opera. 24 February 2021 57
Utilização 24 February 2021 58
Como utilizar Padrões? n Existem algumas perguntas que auxiliam o emprego de Design Patterns. n A resposta não é exata mas da uma boa direção! 24 February 2021 59
Variação n Existe variação de uma regra de negócio ou implementação? ¨ Strategy ¨ Bridge ¨ Proxy ¨ Decorator ¨ Visitor 24 February 2021 60
Ex. Strategy n Existe alguma variação na regra? ¨ Define uma família de algoritmos, encapsula cada um deles, e torna a escolha de qual usar flexível. O Strategy desacopla os algoritmos dos clientes que os usa. n Ex. Feature Alternativas são candidatas para o Strategy. 24 February 2021 61
Interfaces n Existe uma preocupação com interfaces e/ou tratamento de “objetos” incompatíveis? ¨ Adapter ¨ Composite ¨ Facade 24 February 2021 62
Ex. Facade n Existe a necessidade de simplificar, “OOificar” uma classe ou um subsistema? ¨ Provê uma interface unificada para um conjunto de interfaces em um subsistema. O Facade define uma interface alto nível para facilitar o uso deste subsistema. 24 February 2021 63
Desacoplamanto n Existe a necessidade de desacoplar ? ¨ Observer ¨ Chain of Responsibility ¨ Iterator ¨ Mediator ¨ State 24 February 2021 64
Ex. State n Existem objetos om muitos estados, implicando e um difícil gerenciamento destes (muito código) ? ¨ Deixa um objeto mudar seu comportamento quando seu estado interno muda, mudando, efetivamente, a classe do objeto. 24 February 2021 65
Criação n Existe a necessidade de criar coisas? ¨ Abstract Factory ¨ Builder ¨ Factory 24 February 2021 Method 66
Ex. Factory Method n As subclasses necessitam saber/descobrir o que instanciar? ¨ Define uma interface para criação de um objeto, permitindo que as subclasses decidam qual classe instanciar. O Factory Method deixa a responsabilidade de instanciação para as subclasses. 24 February 2021 67
Mais sobre Padrões 24 February 2021 68
+Padrões n Analysis patterns – ¨ ¨ ¨ n Architectural patterns ¨ n Soluções típicas para problemas de análise recorrente. Analysis Patterns, Fowler; Addison-Wesley, 1996 Applying UML and Patterns, Larman, Prentice-Hall, 1998 Veja POSA Idioms Smalltalk Best Practice Patterns, Beck; Prentice Hall, 1997 Concurrent Programming in Java, Lea; Addison-Wesley, 1997 Advanced C++, Coplien, Addison-Wesley, 1992 Effective C++: 50 Specific Ways to Improve Your Programs and Design (2 nd Edition), Scott Meyers, Addison-Wesley, (September 1997) ¨ More Effective C++: 35 New Ways to Improve ¨ ¨ 24 February 2021 69
Anti-Patterns n Soluções de projeto que não respeitam as regras de bons procedimentos em ES. ¨ Abstração, n Flexibilidade e Modularidade http: //www. antipatterns. com 24 February 2021 70
From http: //www. antipatterns. com/briefing/sld 006. htm Anti-Patterns 24 February 2021 71
Referências Adicionais Apostila do Prof. Ivan (no site) n Design Patterns Explained: A New Perspective on Object-Oriented Design, Alan Shalloway, James R. Trott, n http: //www. netobjectives. com/dpexplained/ download/dpmatrix. pdf n 24 February 2021 72
- Slides: 72