Professional Documents
Culture Documents
1 - Introduo
J930
Padres de
Projeto
Introduo
argonavis.com.br
O que um padro?
Maneira testada ou documentada de alcanar um objetivo qualquer
Padres so comuns em vrias reas da engenharia
1-1
1 - Introduo
O que um padro?
"Cada padro descreve um problema que ocorre repetidas vezes em nosso ambiente, e ento descreve o ncleo da soluo para aquele problema, de tal maneira que pode-se usar essa soluo milhes de vezes sem nunca faz-la da mesma forma duas vezes"
Christopher Alexander, sobre padres em Arquitetura
"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, Helm, Vlissides & Johnson, sobre padres em software
3
1-2
1 - Introduo
1-3
1 - Introduo
Elementos de um padro
Nome Problema
Quando aplicar o padro, em que condies?
Soluo
Descrio abstrata de um problema e como usar os elementos disponveis (classes e objetos) para solucion-lo
Conseqncias
Custos e benefcios de se aplicar o padro Impacto na flexibilidade, extensibilidade, portabilidade e eficincia do sistema
7
Formas de classificao
H vrias formas de classificar os padres. Gamma et al [1] os classifica de duas formas
Por propsito: (1) criao de classes e objetos, (2) alterao da estrutura de um programa, (3) controle do seu comportamento Por escopo: classe ou objeto
1-4
1 - Introduo
2. Estrutura
Class Adapter Object Adapter Bridge Composite Decorator Facade Flyweight Proxy
3. Comportamento
Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
* Padres "clssicos" selecionados e organizados por Gamma et al. "Design Patterns" [1]
1-5
1 - Introduo
Fonte: [1]
11
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 desses objetos de maneira uniforme
4. Bridge
Desacoplar uma abstrao de sua implementao para que os dois possam variar independentemente
12
1-6
1 - Introduo
6. Observer
Definir uma dependncia um-para-muitos entre objetos para que quando um objeto mudar de estado, os seus dependentes sejam notificados e atualizados automaticamente
7. Mediator
Definir um objeto que encapsula a forma como um conjunto de objetos interagem
13
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
14
1-7
1 - Introduo
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
15
17. State
Permitir a um objeto alterar o seu comportamento quanto o seu estado interno mudar
18. Strategy
Definir uma famlia de algoritmos, encapsular cada um, e faz-los intercambiveis
19. Command
Encapsular requisio como objeto, para clientes parametrizarem diferentes requisies, filas, e suportar operaes reversveis
20. Interpreter
Dada uma linguagem, definir uma representao para sua gramtica junto com um interpretador
16
1-8
1 - Introduo
22. Iterator
Prover uma maneira de acessar elementos de um objeto agregado seqencialmente sem expor sua representao interna
23. Visitor
Representar uma operao a ser realizada sobre os elementos de uma estrutura de objetos
17
Design patterns ajudam a identificar as abstraes menos bvias e objetos que podem represent-las
Exemplo: objetos que representam um algoritmo ou um estado (raramente aparecem na fase de anlise)
18
1-9
1 - Introduo
Design patterns ajudam a definir interfaces ao identificar seus elementos-chave e tipos de dados que so passados
Podem restringir o que se pode colocar em uma interface Podem especificar relacionamentos entre interfaces Podem estabelecer regras para criao de interfaces
* Nome da operao, objetos que recebe como parmetros e valor de retorno
20
1 - 10
1 - Introduo
Design patterns oferecem formas de instanciar classes concretas em outras partes do sistema
Padres de construo abstraem o processo de criao de objetos oferecendo um meio transparente para associar uma interface com uma implementao.
21
Design patterns usam delegao para tornar a composio to poderosa para reuso quando a herana
Dois objetos esto envolvidos para tratar uma requisio: o objeto que recebe a requisio passa uma referncia de si mesmo para o objeto delegado
22
1 - 11
1 - Introduo
Delegao
Exemplo: Janela tem um retngulo (em vez de ser um)
Janela area() Retngulo altura largura area()
return retangulo.area() return largura * altura
Vantagem: facilita a composio de comportamentos em tempo de execuo Desvantagem: possvel performance menor; cdigo mais difcil de acompanhar.
Delegao uma boa escolha de design somente quando ela simplifica mais que complica! Funciona melhor quando usada de forma padro: Patterns!
23
1 - 12
1 - Introduo
1 - 13
1 - Introduo
6. Forte acoplamento
Classes fortemente acopladas so difceis de reusar, testar, manter, etc. Soluo: enfraquecer o acoplamento com Abstract Factory, Bridge, Chain of Responsibility, Command, Faade, Mediator ou Observer
Tipos de software
Aplicaes
Prioridades: reuso interno, manuteno, extenso
Frameworks
Dita a arquitetura da aplicao. Requer que usurio aprenda o framework e inclua cdigo e configurao. Prioridade: amplo reuso de design Geralmente so fortemente baseados em padres. Quem conhee os padres entende o framework mais facilmente.
28
1 - 14
1 - Introduo
1 - 15
1 - Introduo
Fontes
[1]
Steven John Metsker, Design Patterns Java Workbook. Addison-Wesley, 2002 [2] Erich Gamma et al. Design Patterns: Elements of Reusable Object-oriented Software. Addison-Wesley, 1995. Parte I foi principal referncia para este captulo.
31
www.argonavis.com.br
2003, Helder da Rocha (helder@acm.org)
1 - 16