Padrões de Projeto Categorizando Padrões de Projeto Apresentadores Andrey Pires Batista [email protected] Guilherme Alexandre Monteiro Reinaldo [email protected] {apb,gamr}@cin.ufpe.br 2 Roteiro O que é Padrão? Por que estudar Padrões de Projeto? Gangue dos Quatro “Gang of Four” Padrões de Projeto Padrões de Interface Padrões de Responsabilidade Padrões de Construção Padrões de Operação Padrões de Extensão Referência {apb,gamr}@cin.ufpe.br 3 O que é um Padrão? “ É uma maneira de fazer algo, ou buscar um objetivo.” Steven John Metsker “ cada padrão descreve um problema no nosso ambiente e o cerne da sua solução, de tal forma que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira ” Christopher Alexander {apb,gamr}@cin.ufpe.br 4 Por que estudar Padrões de Projeto? Reutilizar soluções Início direcionado, não reinventar a roda; Estabelecer terminologia comum Comunicação e trabalho em equipe requerem um base de vocabulário e um ponto de vista em comum; {apb,gamr}@cin.ufpe.br 5 GoF Gangue dos Quatro “Gang of Four” Os padrões de projeto foram originalmente descritos no livro Padrões de Projeto (GoF) escrito por Erick Gama e seus colegas. O GoF classifica os padrões seguindo dois critérios. Finalidade: reflete o que um padrão faz Escopo: se aplicam a classes ou objetos O GoF apresenta um catálogo de 23 padrões de projeto com finalidade de criação, estrutural ou comportamental. {apb,gamr}@cin.ufpe.br 6 Padrões de Projeto Fonte: Gama, Erick – Padrões de Projeto (1995). {apb,gamr}@cin.ufpe.br 7 Outras forma de categorizar Padrões de Projeto O autor Steven John Metsker, baseado no GoF organizou o livro “Padrões de Projeto em Java” categorizando os padrões de projeto segundo seu objetivo. “...o objetivo de um padrão de projeto em geral é facilmente expresso como a necessidade de ir além das características comuns embutidas em Java...” Steven John Metsker {apb,gamr}@cin.ufpe.br 8 Categorizando Padrões de Projeto Segundo seus Objetivos Interfaces Responsabilidade Construção Operações Extensões Obs.: O fato de categorizar os padrões por objetivos não quer dizer que cada um suporte apenas um tipo de objetivo. {apb,gamr}@cin.ufpe.br 9 Padrões de Projeto Fonte: Metsker, Steven John – Padrões de Projeto em Java (2004). {apb,gamr}@cin.ufpe.br 10 Interfaces O objetivo básico de uma interface é declarar um conjunto de métodos que uma classe implementa. Uma exceção a essa responsabilidade ocorre quando a interface deixa um registrador de objetos para notificação de eventos. Interfaces também podem colaborar no uso de constantes. (declarar constantes nas interfaces) {apb,gamr}@cin.ufpe.br 11 Padrões de Interfaces {apb,gamr}@cin.ufpe.br 12 Padrões de Interface Adapter Fornece a interface desejada pelo cliente, usando os serviços de uma classe com uma interface diferente. Façade Fornece uma interface unificada para um conjunto de interfaces, tornando o subsistema mais fácil de usar. Composite Compõe objetos em estruturas de árvore para representar hierarquias do tipo partes-todo, permitindo aos clientes tratar objetos individuais e composições de objetos de maneira uniforme. Bridge Separa uma abstração de sua implementação de modo que as duas possam variar independentemente. {apb,gamr}@cin.ufpe.br 13 Responsabilidade Delegar uma solicitação ou incumbência para outras entidades ou sistemas. A delegação pode ser feita de forma que vise a centralização, intensificação e limitação da responsabilidade de objetos comuns. {apb,gamr}@cin.ufpe.br 14 Padrões de Responsabilidade {apb,gamr}@cin.ufpe.br 15 Padrões de Responsabilidade Singleton Garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. Observer Define uma dependência de um para muitos de modo que, quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente. Mediator Define um objeto que encapsula o modo como um conjunto de objetos interage. Isso evita que os objetos se refiram um ao outro explicitamente e permite variar a interação deles independentemente. {apb,gamr}@cin.ufpe.br 16 Padrões de Responsabilidade Proxy Fornece um procurador, ou marcador de lugar, para outro objeto a fim de controlar o acesso a ele. Chain of Responsibility Evita acoplar o remetente de uma solicitação ao seu receptor(destinatário) dando a chance a que mais de um objeto possa lidar com a solicitação. Encadeia os objetos receptores e passa a solicitação ao longo da cadeia até que um objeto a trate. Flyweight Utiliza o compartilhamento para suportar eficientemente um grande número de objetos de granularidade fina. {apb,gamr}@cin.ufpe.br 17 Construção Construtores prover meios de instanciar a classe. suíte de colaboração toda chamada para um construtor também irá invocar um construtor da superclasse {apb,gamr}@cin.ufpe.br 18 Padrões de Construção {apb,gamr}@cin.ufpe.br 19 Padrões de Construção Builder Move a lógica de construção para um objeto fora da classe a instanciar. Factory Method Define a interface para criar um objeto, enquanto retém o controle de qual classe instanciar. Abstract Factory Proporciona a criação de uma família de objetos relacionados ou dependentes sem especificar as suas classes concretas. Prototype Fornece novos objetos copiando um exemplo. Memento Fornece armazenamento e restauração de um estado do objeto. {apb,gamr}@cin.ufpe.br 20 Operações Algoritmo procedimento – uma seqüência de instruções – que aceita entradas e produz saídas. Aparecem como parte de um método, ou envolver muitos métodos. Um Método Implementação de uma operação Operação Especificação de um serviço {apb,gamr}@cin.ufpe.br 21 Padrões de Operações {apb,gamr}@cin.ufpe.br 22 Padrões de Operações Template method Implementa um algoritmo em um método, postergando a definição de alguns passos do algoritmo para que outras classes possam redefini-los. State Distribui lógica específica de estado mediante classes que representem o estado de um objeto. Strategy Encapsula estratégias alternativas, ou abordagens, em classes separadas, cada uma das quais implementando uma operação comum. {apb,gamr}@cin.ufpe.br 23 Padrões de Operações Command Estabelece uma assinatura de método, na mairia das vezes execute() ou perform(), e nos deixa definir várias implementações dessa interface. Interpreter Permite que os desenvolvedores componham objetos executáveis de acordo com um conjunto de regras de composição definidas. {apb,gamr}@cin.ufpe.br 24 Extensão O acréscimo de uma classe, uma interface ou um método código existente. Subclasses Por meio de delegação Métodos que encaminham chamadas idênticas fornecidas por outro objeto (superclasse final) {apb,gamr}@cin.ufpe.br 25 Padrões de Extensões {apb,gamr}@cin.ufpe.br 26 Padrões de Extensões Decorator Permite que os desenvolvedores componham o comportamento do objeto dinamicamente, através do uso de delegação. Interator Fornece uma maneira de acessar os elementos de uma coleção seqüencialmente.(ex.:iterar sobre um composite) Visitor Deixar definir uma nova operação para uma hierarquia, sem mudar as suas classes. {apb,gamr}@cin.ufpe.br 27 Referências Gamma, Erich Padrões de projeto: soluções reutilizáveis de software orientado a objeto / Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides; trad. Luiz A. Meirelles Salgado. - Porto Alegre: Bookman, 2000 Metsker, Steven John Padrões de projeto em java / Steven John Metsker; trad. Werner Loeffler. - Porto Alegre : Bookman, 2004 Shalllonway, Alan Explicando padrões de projeto: uma nova perspectiva em projeto orientado a objeto / Alan Shalloway e James R. Trott; trad. Ana M. de Alencar Price. - Porto Alegre : Bookman, 2004. {apb,gamr}@cin.ufpe.br 28 Padrões de Projeto Categorizando Padrões de Projeto