Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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: 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: Command
Exemplo: Observer
Exemplo: State
Exemplo: Strategy
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
http://www.industriallogic.com/papers/learning.html
http://www.mindspring.com/~mgrand/pattern_synopses.htm