Вы находитесь на странице: 1из 35

Padres de Projeto

Uma Introduo

Fernando Deschamps
Sistemas Industriais Inteligentes S2i Departamento de Automao e Sistemas DAS Universidade Federal de Santa Catarina UFSC

Agenda
Introduo:
O que so padres de projeto? Motivao de seu uso.

Conceitos bsicos:
Principais atributos. Problemas que os padres de projeto resolvem. Como selecionar um padro. Como usar um padro.

Alguns padres de projeto. Exemplos da estrutura de alguns dos padres de projeto. Onde obter mais informaes.

Introduo
Em geral, em engenharia de software, dois so os principais temas tratados:
Metodologia para o desenvolvimento de sistemas. Linguagem de modelagem para o projeto de software orientado a objetos.

As dificuldades encontradas so decorrentes da falta de experincia de quem est aprendendo ambos os temas pela primeira vez ou da dificuldade de combinao de todos os elementos que fazem parte do projeto de um sistema complexo. Estudos de casos so uma fonte bastante rica para a soluo de problemas de projeto, mesmo para projetistas experientes.

Algumas Definies...
O que um padro de projeto?
Um padro de projeto uma estrutura recorrente no projeto de software orientado a objetos. Pelo fato de ser recorrente, vale a pena que seja documentada e estudada.

O que faz um padro de projeto?


Um padro de projeto nomeia, abstrai e identifica os aspectos chave de uma estrutura de projeto comum para torn-la til para a criao de um projeto orientado a objetos reutilizvel.

Problemas de Projeto Solucionados por Padres


Procurando objetos apropriados. Determinando a granularidade dos objetos. Especificando interfaces dos objetos. Especificando implementaes dos objetos.
Herana de classe versus herana de interface. Programando para uma interface, no para uma implementao.

Colocando os mecanismos de reutilizao para funcionar.


Herana versus composio. Delegao. Herana versus tipos parametrizados.

Problemas de Projeto Solucionados por Padres


Relacionando estruturas de tempo de execuo e de tempo de compilao. Projetando para mudanas.
Dependncias de operaes especficas, plataformas de software e hardware, de representaes ou implementaes de objetos e algortmicas. Acoplamento forte. Incapacidade na alterao de classes. Programas de aplicao. Bibliotecas de classes (toolkits). Arcabouos de classes (frameworks).

Principais Atributos
Os principais atributos de uma boa descrio de um padro de projeto so:
Nome: referncia que descreve de forma bastante sucinta o padro. Problema (motivao, inteno e objetivos, aplicabilidade): apresenta o contexto do padro e quando ele pode ser usado. Soluo (estrutura, participantes, exemplo de cdigo): descreve a soluo e os elementos que a compem. Conseqncias e padres relacionados: analisa os resultados, vantagens e desvantagens obtidos com a aplicao do padro.

Como selecionar um padro de projeto?


Considere como os padres de projeto solucionam problemas de projeto. Examine as sees de descrio do problema de cada padro. Estude como os padres se interrelacionam. Estude padres de finalidades semelhantes. Examine uma causa de reformulao de projeto. Considere o que deveria ser varivel no seu projeto.

Como usar um padro de projeto?


Leia o padro por inteiro, uma vez, para obter uma viso geral. Estude as sees de descrio do problema e do padro. Olhe exemplos de cdigo do padro. Escolha nomes para os participantes do padro que tenham sentido no contexto da aplicao. Defina as classes. Defina nomes especficos da aplicao para as operaes no padro. Implemente as operaes para suportar as responsabilidades e colaboraes presentes.

Alguns Padres de Projeto


Em geral os padres de projeto podem ser classificados em trs diferentes tipos:
Padres de criao: abstraem o processo de criao de objetos a partir da instanciao de classes. Padres estruturais: tratam da forma como classes e objetos esto organizados para a formao de estruturas maiores. Padres comportamentais: preocupam-se com algoritmos e a atribuio de responsabilidade entre objetos.

Cada um desses tipos pode ser subclassificado em:


Padres de classes: em geral estticos, definidos em tempo de compilao. Padres de objetos: em geral dinmicos, definidos em tempo de execuo.

Padres de Criao
Abstract Factory: fornece uma interface para a criao de famlias de objetos relacionados ou dependentes sem especificar suas classes concretas.
Uso conhecido: transportabilidade entre diferentes bibliotecas de interfaces grficas (Gnome e KDE).

Builder: separa a construo (geralmente passo a passo) de um objeto complexo da sua representao, de modo que o mesmo processo de construo possa criar diferentes representaes.
Uso conhecido: converso de formatos de texto em editores.

Padres de Criao
Factory Method: define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe ser instanciada. Permite a uma classe postergar a instanciao de subclasses.
Uso conhecido: bastante usado em toolkits e frameworks para a instanciao de objetos.

Prototype: especifica os tipos de objetos a serem criados usando uma instncia prototpica e cria novos objetos copiando este prottipo.
Uso conhecido: depurador Etgdb.

Padres de Criao
Singleton: garante que uma classe tenha somente uma instncia e fornece um ponto global de acesso para ela.
Uso conhecido: programas que s podem ter uma instncia sendo executada em um dado momento.

Exemplo: Abstract Factory

Exemplo: Builder

Padres Estruturais
Adapter: converte a interface de uma classe em outra interface esperada pelos clientes. Permite que certas classes trabalhem em conjunto, pois de outra forma seria impossvel por causa de suas interfaces incompatveis.
Uso conhecido: popularmente conhecido como wrapper, usado para adaptar a interface de classes.

Bridge: separa uma abstrao da sua implementao, de modo que as duas possam variar independentemente.
Uso conhecido: para evitar o vnculo entre abstrao e implementao quando de mudanas na implementao em tempo de execuo.

Padres Estruturais
Composite: compe objetos em estrutura de rvore para representar hierarquias do tipo partes-todo. Permite que os clientes da estrutura tratem objetos individuais e composies de objetos de maneira uniforme.
Uso conhecido: para representar hierarquias partes-todo.

Decorator: atribui responsabilidades adicionais a um objeto dinamicamente. Fornece uma alternativa flexvel utilizao de subclasses para a extenso de funcionalidades.
Uso conhecido: para a atribuio de enfeites grficos e outras funcionalidades acessrias a widgets.

Padres Estruturais
Faade: fornece uma interface unificada para um conjunto de interfaces em um subsistema. Define uma interface de nvel mais alto que torna o subsistema mais fcil de usar.
Uso conhecido: interface nica em sistemas complexos.

Flyweight: usa compartilhamento para suportar grandes quantidades de objetos, de granularidade fina, de maneira eficiente.
Uso conhecido: sistemas com grande nmero de objetos.

Proxy: fornece um objeto representante ou um marcador de outro objeto para controlar o acesso ao mesmo.
Uso conhecido: algumas implementaes de CORBA.

Exemplo: Adapter

Exemplo: Composite

Exemplo: Faade

Exemplo: Proxy

Padres Comportamentais
Chain of Responsibility: evita o acoplamento entre o remetente de uma solicitao e o destinatrio da solicitao, dando a mais de um objeto a chance de tratar a solicitao. Encadeia os objetos receptores e passa a solicitao ao longo da cadeia at que um objeto a trate.
Uso conhecido: tratamento de eventos de usurio.

Command: encapsula uma solicitao como um objeto, permitindo a parametrizao de clientes com diferentes solicitaes, o enfileiramento e o registro de solicitaes e o suporte a operaes que possam ser, por exemplo, desfeitas.
Uso conhecido: suporte a desfazer.

Padres Comportamentais
Interpreter: dada uma linguagem, define uma representao para sua gramtica juntamente com um interpretador que usa a representao para interpretar sentenas nesta linguagem.
Uso conhecido: interpretar uma linguagem com um rvore sinttica abstrata, como em compiladores de linguagens orientadas a objetos.

Iterator: fornece uma maneira de acessar seqencialmente os elementos de um objeto agregado sem expor sua representao subjacente.
Uso conhecido: C++ Standard Template Library.

Padres Comportamentais
Mediator: define um objeto que encapsula a interao entre um conjunto de objetos. Promove o acoplamento fraco ao evitar que os objetos se refiram explicitamente uns aos outros, permitindo a variao das interaes independentemente.
Uso conhecido: arquitetura de aplicaes de Smalltalk.

Memento: sem violar a encapsulao, captura e externaliza um estado interno de um objeto, de modo que o mesmo possa posteriormente ser restaurado para este estado.
Uso conhecido: armazenar um instantneo do estado do objeto sem romper sua encapsulao.

Padres Comportamentais
Observer: define uma dependncia um-para-muitos entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes so automaticamente notificados e atualizados.
Uso conhecido: propagao de mudanas e atualizaes com acoplamento fraco entre os objetos.

State: permite que um objeto altere seu comportamento quando seu estado interno muda. O objeto parecer ter mudado sua classe.
Uso conhecido: em algumas implementaes da pilha TCP/IP.

Padres Comportamentais
Strategy: define uma famlia de algoritmos, encapsula cada um deles e os faz intercambiveis. Permite que o algoritmo varie independentemente dos clientes que o utilizam.
Uso conhecido: sistemas de otimizao.

Template Method: define o esqueleto de um algoritmo em uma operao, postergando a definio de alguns passos para subclasses. Permite que as subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura.
Uso conhecido: arquiteturas Application/Document/View.

Padres Comportamentais
Visitor: representa uma operao a ser executada sobre os elementos de uma estrutura de objetos. Permite a definio de uma nova operao sem mudar as classes dos elementos sobre os quais opera.
Uso conhecido: para executar uma srie de operaes sobre objetos que possuem interfaces diferentes, sem poluir a interface dos mesmos.

Exemplo: Chain of Responsibility

Exemplo: Command

Exemplo: Observer

Exemplo: State

Exemplo: Strategy

Exemplo: Template Method

Outras Referncias
Livro base: Padres de Projeto: Solues Reutilizveis de Software Orientado a Objetos - The Gang of Four. Design Patterns Tutorial:
http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/patterns/objectives.html

Design Patterns, Pattern Languages and Frameworks:


http://www.cs.wustl.edu/~schmidt/patterns.html

A Learning Guide to Design Patterns:

http://www.industriallogic.com/papers/learning.html

Data & Object Factory's Design Patterns Page:


http://www.dofactory.com/patterns/Patterns.aspx

Overview of Design Patterns:

http://www.mindspring.com/~mgrand/pattern_synopses.htm

Вам также может понравиться