padrões de projeto (gof)

Download Padrões de Projeto (GoF)

Post on 22-Jan-2018

124 views

Category:

Design

1 download

Embed Size (px)

TRANSCRIPT

  1. 1. Srie Fundamentos da Engenharia de Software Padres de Projetos I PINHEIRO, lvaro Farias Autor
  2. 2. Srie Fundamentos da Engenharia de Software Padres de Projetos II Publicao 2017 O autor acredita que todas as informaes aqui apresentadas esto corretas e podem ser utilizadas para qualquer fim legal. Entretanto, no existe qualquer garantia explcita ou implcita, de que o uso de tais informaes conduzir sempre ao resultado desejado. Os nomes de sites e empresas, por ventura, mencionados, foram utilizados apenas para ilustrar os exemplos, no tendo vnculo nenhum com o livro, no garantindo a sua existncia nem divulgao. Eventuais erratas estaro disponveis para download no site de publicao. As imagens utilizadas neste livro foram obtidas na Internet. Dados da Publicao Pinheiro, lvaro Farias Srie Fundamentos da Engenharia de Software: Padres de Projetos Ano II Nmero 2 Recife, Fevereiro de 2017 Selo Editorial: Publicao Independente 1. GoF Criacional 2. GoF Estrutural 3. GoF Comportamental
  3. 3. Srie Fundamentos da Engenharia de Software Padres de Projetos III Publicao Independente Revista em portugus com o ttulo Padres de Projetos Srie Fundamentos da Engenharia de Software Ano II Nmero 2 Recife Pernambuco Brasil Fevereiro de 2017
  4. 4. Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF http://www.alvarofpinheiro.eti.br/ Pgina 1 Introduo Um padro a soluo para um determinado problema em um determinado contexto. Um padro codifica conhecimento especfico obtido em uma experincia em um determinado domnio. Um sistema bem estruturado estar cheio de padres: de linguagem; de projeto; e de arquitetura. Segundo Fowler, podem ser utilizados para melhorar o entendimento ou comunicao dos problemas e decises arquiteturais. Podem ser vistos como uma tentativa de criar um vocabulrio comum para comunicao. Um padro que se deve ter conhecimento na orientao a objetos o GRASP que significa General Responsability Assignment Software Patterns e que descreve os princpios fundamentais do design orientado a objetos e a atribuio de responsabilidades. Outro padro o de Gamma, et al que descreve vinte e trs padres clssicos na orientao a objetos. O padro de Gamma mais conhecido como padro da gangue dos quatro (Gang of Four patterns, ou apenas GoF). Segue um exemplo de template dos Padres de Projetos: Nome - o nome que serve como referencia para o padro; Problema - explica o problema que ocorre em um contexto, com sintomas e em condies; Soluo - elementos que constituem o design, seus relacionamentos, responsabilidades e colaboraes; Consequncias - resultados e compromissos decorrentes da aplicao do padro. Impactos sobre a flexibilidade, extensibilidade, portabilidade ou desempenho do sistema. Fundamentam a escolha do padro mais apropriado; Nome e Classificao - identificam unicamente o padro e o classifica para catalogao; Inteno - uma breve descrio que deve responder o que o padro faz qual sua inteno e que problema ele trata; Tambm Conhecido Como - outros nomes pelo qual o padro conhecido; Motivao - um cenrio que ilustra o problema e como as classes deste padro o solucionam; Aplicabilidade - em que situaes o padro pode ser aplicado; Estrutura - representao grfica do padro com suas classes e colaboraes; Participantes - classes e objetos que participam no padro, incluindo suas responsabilidades; Colaboraes - como os participantes colaboram entre si; Consequncias - como o padro atende a seus objetivos e que efeitos colaterais seu uso pode provocar; Implementao - dicas, tcnicas e erros comuns ao implementar este padro; Exemplo de Cdigo - fragmentos de cdigo ilustrando o padro; Usos Conhecidos - exemplos de uso do padro em sistemas reais; e Padres Relacionados - padres que esto fortemente relacionados a este, incluindo suas diferenas, ou utilizados por este.
  5. 5. Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF http://www.alvarofpinheiro.eti.br/ Pgina 2 1.1 Categorias dos Padres de Projetos Existem basicamente trs categorias, as criacionais, estruturais e comportamentais. Padres Criacionais: auxiliam na criao de objetos, tornando o programa menos dependente do modo como os objetos so criados e compostos. Assim, estes padres permitem que se mudem as classes dos objetos criados em tempo de execuo com pouco esforo de programao; Padres Estruturais: Descrevem formas flexveis para compor classes e objetos; e Padres Comportamentais: Estes padres so relacionados a algoritmos e responsabilidades associados a cada objeto. Mudando-se os objetos e classes utilizados, pode-se mudar o comportamento do programa. Acoplando-se um objeto a outro, pode-se adicionar comportamento ao segundo objeto. 1.2 Critrios dos Padres de Projetos Os padres de projeto so classificados por dois critrios, o de objetivo e o de escopo. Objetivo reflete as categorias (criao, de estrutura ou de comportamento). Escopo especifica quando o padro aplicado (classes ou a objetos). Padres com escopo de classe lidam com relacionamentos estabelecidos atravs de herana, ou seja, estticos e definidos em tempo de compilao. Padres com escopo de objeto lidam com relacionamentos de objeto, que podem ser modificados em tempo de execuo e so mais dinmicos. Praticamente todo padro utiliza herana de alguma forma, por isto apenas os padres que focam em relacionamentos atravs de herana devem ser classificados com escopo de classe. Os padres mais importantes esto em escopo de objeto. 1.3 Gang of Four (GoF) Gamma et al descrevem vinte e trs padres que podem ser utilizados em praticamente qualquer rea de programao. Estes padres se tornaram clssicos da orientao a objetos e so chamados de padres da gangue dos quatro (Gang of Four patterns, ou apenas GoF). Esse padro se divide em dois critrios: Critrio Objetivo que refletem as categorias de criao, estrutura e comportamento, por sua vez esse critrio se divide em trs categorias. Categoria dos Criacionais usados para determinar como os objetos so criados; Categoria dos Estruturais que descrevem formas flexveis para compor classes e objetos; e a Categoria dos Comportamentais relacionados aos algoritmos e responsabilidades associados a cada objeto. O Critrio Escopo que especifica quando o padro aplicado classe e/ou objeto. Como pode ser visto logo abaixo. Figura 0.1 Padres GoF Criacional Estrutural Comportamental 1.Factory Method (Classe) 1.Adapter (Classe/Objeto) 1.Interpreter (Classe) 2.Abstract Factory (Objeto) 2.Bridge (Objeto) 2.Template Method (Classe) 3.Builder (Objeto) 3.Composite (Objeto) 3.Chain Responsability (Objeto)
  6. 6. Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF http://www.alvarofpinheiro.eti.br/ Pgina 3 4.Prototype (Objeto) 4.Decorator (Objeto) 4.Command (Objeto) 5.Singleton (Objeto) 5.Facade (Objeto) 5.Strategy (Objeto) 6.Flyweight (Objeto) 6.State (Objeto) 7.Proxy (Objeto) 7.Observer (Objeto) 8.Memento (Objeto) 9.Mediator (Objeto) 10.Visitor (Objeto) 11.Iterator (Objeto) Fonte: Prprio Autor Descrio Resumida dos Padres GoF: Abstract Factoty-Permitir que um cliente crie famlias de objetos sem especificar suas classes concretas; Adapter-Classe adaptadora entre a classe interna e um componente; Bridge-Desassociar a evoluo de duas classes; Builder-Encapsular a construo de um comportamento e permitir que ele seja construdo em etapas; Chain Responsibility-Define uma forma de passar uma solicitao entre objetos; Command-Encapsular um pedido de comando em um objeto; Composite-Criar uma hierarquia parte todo; Decorator-Estender a funcionalidade dinamicamente; Facade-Definir uma interface de alto nvel; Factory Method-Subclasses decidem quais classes concretas sero criadas; Flyweight-Definir ajustes finos em subclasses; Interator-Fornecer forma de acessar seqencialmente uma coleo de objetos sem expor a sua implementao; Interpreter-Permitir a incluso de elementos de linguagem em um aplicativo; Mediator-Definir comunicao simplificada entre classes; Mementor-Salvar e restaurar o estado interno de um objeto; Observer-Definir um regime de notificao de objetos de mudanas para um outro objeto; Prototype-Permitir criar novas instancias simplesmente copiando instancias existentes; Proxy-Um classe que controla o acesso para outra classe; Singleton-Assegurar que somente um objeto de uma determinada classe seja criado em todo o projeto; State-Alterar o comportamento de um objeto quando seu estado muda; Strategy-Encapsular um algoritmo dentro de uma classe; Template Method-Permitir que subclasses redefinam os passos de um algoritmo; e Visitor-Define uma nova operao em uma classe sem troc-la. 1.4 Padro de Projeto GoF Criacional Padres criacionais so usados para determinar como os objetos sero criados ou instanciados. Padres de projeto abstraem o processo de instanciao. Eles ajudam a tornar o sistema independente de como os objetos so criados, compostos e representados. Um padro criacional de
  7. 7. Srie Fundamentos da Engenharia de Software Ano II Nmero 2 GoF http://www.alvarofpinheiro.eti.br/ Pgina 4 classe utiliza herana para variar a classe que ser instanciada. Um padro criacional de objeto ir delegar a instanciao de um objeto para outro objeto. Padres criacionais tornam-se importantes medida que os sistemas evoluem e passam a depender mais de composio de objetos do que de herana de classes. medida que isto acontece, a nfase migra da codificao de um conjunto de comportamentos para a codificao de conjuntos menores de comportamento, que podem ser combinados em vrios conjuntos mais complexos. 1.4.1 Abstract Factory Inteno: Prov uma interface para criar famlias de objetos relacionados ou dependentes sem especificar suas classes concretas. Aplicabilidade: Este padro deve ser utilizado quando o programa precisa de independncia de como seus objetos so criados, compostos e representados. Ou quando o sistema precise ser configurado para uma ou muitas famlias de classes ou objetos. Ou quando uma famlia de objetos relaciona