Sei sulla pagina 1di 74

Design Patterns

Projeto de Sistemas de Software

Sumrio
Reuso de Software
Introduo Benefcios e Desvantagens Viso do Reuso

Padres de Projeto
Introduo

Motivao
Alguns Padres
Singleton Facade

Command
Observer DAO Filter
LES/PUC-Rio

Reuso de Software

Introduo
Maioria das Engenharias
Desenvolvimento de sistemas
Composio de componentes existentes Componentes usados em outros sistemas

Engenharia de Software
Antes
Focado no desenvolvimento original

Agora
Processo de desenvolvimento baseado em um reuso de software sistematizado, trazendo
Software de melhor qualidade

Desenvolvimento mais rpido


Menor custo

LES/PUC-Rio

Engenharia de Software baseada em Reuso


Reuso de Sistemas
Incorporao de um sistema, sem alter-lo, em outro sistema (COTS) Desenvolvimento de famlias de aplicaes

Reuso de Componentes
Sub-sistemas de uma aplicao a simples objetos

Reuso de Objetos e Funes


Objetos simples e bem definidos Funes

LES/PUC-Rio

Benefcios
Confiabilidade Crescente
Toda vez que um software utilizado, ele novamente testado Componentes j utilizados e testados em outros sistemas so mais confiveis que novos componentes

Risco de Processo Reduzido


Margem de erro dos custos de reuso menor que dos custos de desenvolvimento

Uso Efetivo de Especialistas


Especialista desenvolve software reutilizvel encapsulando seu conhecimento, ao invs de desenvolver as mesmas funcionalidades repetidas vezes em diferentes projetos

LES/PUC-Rio

Benefcios
Conformidade com Padres
Uso de padres organizacionais agiliza o desenvolvimento
Estabelece uma base comum de comunicao Garante a consistncia

Exemplo: padres de interface

Desenvolvimento Acelerado
Reduo do tempo de desenvolvimento e de validao

LES/PUC-Rio

Problemas
Custos de Manuteno Crescente
Dificuldade de adaptar componentes sem o cdigo fonte

Falta de Ferramentas de Suporte


Ferramentas CASE podem no suportar desenvolvimento com reuso

Sndrome do no foi inventado aqui


Falta de confiana no componente Desenvolver visto como mais desafiador que reutilizar

Criar e Manter um biblioteca de Componentes


Custo de criar e manter a biblioteca pode ser grande Tcnicas de classificar, catalogar e recuperar os componentes so imaturas

Encontrar, Entender e Adaptar Componentes Reusveis


Busca de componentes como parte do processo de desenvolvimento

LES/PUC-Rio

Viso do Reuso

Padres de Projeto
Desenvolvimento de Software Orientado a Aspectos

Frameworks Linhas de Produto de Aplicao


Desenvolvimento baseado em Componentes Integrao de COTS

Empacotamento de Sistemas Legados

Geradores de Programas

Sistemas orientados a Servios Bibliotecas de Programas

Aplicaes Verticais Configurveis

LES/PUC-Rio

Viso do Reuso
Padres de Projeto
Abstraes genricas que ocorrem nas aplicaes

Desenvolvimento baseado em Componentes


Sistemas desenvolvidos pela integrao de componentes

Frameworks
Coleo de classes abstratas e concretas que podem ser adaptadas e estendidas para a criao de aplicaes

Empacotamento de Sistemas Legados


Interfaces podem ser definidas para prover acesso a sistemas legados

Sistemas Orientados a Servios


Sistemas desenvolvidos pela ligao com servios compartilhados Servios podem ser externos

LES/PUC-Rio

Viso do Reuso
Linhas de Produto de Aplicao
Tipo de aplicao generalizado em uma arquitetura comum que pode ser adaptada de diferentes modos para diferentes clientes

Integrao de COTS (Commercial off-the-shelf)


Termo que permite desenvolver a partir de componentes j criados e realizar adaptaes Sistemas desenvolvidos pela integrao de aplicaes existentes

Aplicaes Verticais Configurveis


Desenvolvimento de sistemas genricos que podem ser configurados s necessidades de clientes de um sistema especfico

Bibliotecas de Programas
Biblioteca de Classes e Funes comumente usadas

Geradores de Programas
Sistema Gerador tem conhecimento de tipos particulares de aplicao e pode gerar sistemas ou fragmentos de sistemas

Desenvolvimento de Software Orientado a Aspectos


Componentes compartilhados so entrelaados na aplicao em diferentes partes quando o programa compilado
LES/PUC-Rio

Padres de Projeto

Definio: Padro

Cada padro descreve um problema que ocorre repetidas vezes em nosso ambiente, e ento descreve o ncleo da sua soluo para aquele problema, de tal maneira que seja possvel usar essa soluo milhes de vezes sem nunca faz-la da mesma forma duas vezes.
Christopher Alexander sobre padres em arquitetura de construes

LES/PUC-Rio

Definio: Padro de Projeto

Os padres de projeto so descries de objetos que se comunicam e classes que so customizadas para resolver um problema de projeto genrico em um contexto especfico. Gamma, Helm, Vlissides & Johnson, sobre padres de projeto em software

LES/PUC-Rio

Definio: Padro de Projeto


Forma de reusar conhecimento abstrato sobre um problema e sua soluo Suficientemente abstrato para ser reusado sob diferentes contextos descries de problemas e essncias de solues aplicveis em classes de problemas bem conhecidos

solues que funcionam, tornando-se receitas para situaes similares


Freqentemente usa caractersticas da OO como herana e polimorfismo

LES/PUC-Rio

Definio: Padro de Projeto


Inspirados em A Pattern Language de Christopher Alexander
Padres de arquitetura de cidades, casas e prdios

Design Patterns: Elements of Reusable Object-Oriented Software


Catlogo publicado em 1994 Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, conhecidos como The Gang of Four (GoF) 23 padres de projeto

LES/PUC-Rio

Benefcios
Aprendizagem com a experincia dos outros
Identificao de problemas comuns de projeto de software Utilizao de solues testadas e bem documentadas Ajuda um novato a agir mais como um experiente

Produo de bons projetos orientados a objetos


Normalmente utilizam boas prticas de OO Utilizam eficientemente polimorfismo, herana e composio

Vocabulrio comum
Uso de solues que tm nome facilita comunicao Nvel mais alto de abstrao

Ajuda na documentao
Uso de solues que tm um nome facilita a documentao Conhecimento de padres de projeto torna mais fcil a compreenso de sistemas existentes

Ajuda na converso de um modelo de anlise em um modelo de implementao Aumento da produtividade


LES/PUC-Rio

Elementos Essenciais
Nome
Procura descrever o problema, a soluo e as conseqncias em uma ou duas palavras.

Problema
Quando aplicar o padro e em que condies

Soluo
Descrio abstrata de um problema
Como usar os elementos disponveis (classes e objetos) para solucion-lo

Conseqncias
Custos e benefcios de se aplicar o padro
Impacto na flexibilidade, reusabilidade e eficincia do sistema

LES/PUC-Rio

Livros sobre Padres de Software


Categoria do Padro Anlise OO Arquitetura Ttulo Analysis Patterns: Reusable Object Models Pattern-Oriented Software Architecture: A System of Patterns Design Patterns: Elements of Reusable Object-Oriented Software Projeto Anti-Patterns: Refactoring Software, Architectures, and Projects in Crisis Design Patterns Java Workbook Autores / Editores Martin Fowler Buschmann et al. Gamma et al. William J. Brown et al. Steven John Metsker

LES/PUC-Rio

Livro: Padres de Projeto da GoF


Catlogo de 23 padres No apresenta padro para um domnio de aplicao especfico Padres do GoF representam o estado-da-prtica em boas construes de projeto orientado a objetos comum encontrar no detalhamento de padres especficos de domnio a ocorrncia de algum dos padres do GoF

LES/PUC-Rio

Livro: Padres de Projeto da GoF Classificao


Padres de Criao
Abstraem o processo de instanciao
Tornam um sistema independente da forma como os objetos so criados, compostos e representados

LES/PUC-Rio

Livro: Padres de Projeto da GoF Classificao


Padres Estruturais
Lidam com a composio de classes (ou objetos) para formar grandes estruturas no sistema

LES/PUC-Rio

Livro: Padres de Projeto da GoF Classificao


Padres Comportamentais
Caracterizam a forma como classes (ou objetos) interagem
Distribuem responsabilidade

LES/PUC-Rio

Livro: Padres de Projeto da GoF Classificao


Padres Comportamentais
Caracterizam a forma como classes (ou objetos) interagem
Distribuem responsabilidade

LES/PUC-Rio

Livro: Padres de Projeto da GoF


1. Abstract Factory 2. Builder 3. Factory Method 4. Prototype 5. Singleton 6. Adapter 7. Bridge 8. Composite 9. Decorator 10.Facade 13.Chain of Responsibility 14.Command 15.Interpreter 16.Iterator 17.Mediator 18.Memento 19.Observer 20.State 21.Strategy 22.Template Method

11.Flyweight
12.Proxy

23.Visitor
Padres de Criao Padres Estruturais Padres de Comportamento
LES/PUC-Rio

Livro: Padres de Projeto da GoF


Template
1. Pattern Name and Classification 2. Intent 3. Also Known as 4. Motivation 5. Applicability 6. Structure 7. Participants 8. Collaborations 9. Consequences 10.Implementation

11.Sample Code
12.Known Uses 13.Related Patterns

LES/PUC-Rio

Livro: Padres de Projeto do POSA


POSA Pattern-Oriented Software Architecture: A System of Patterns

Categoriza os padres em 3 categorias


Padres Arquiteturais Padres de Projeto

Idiomas

LES/PUC-Rio

Livro: Padres de Projeto do POSA


Padres Arquiteturais
Expressam um esquema de organizao estrutural para sistemas de software Oferecem um conjunto de subsistemas pr-definidos, especifica suas respectivas responsabilidades e inclui regras e diretrizes para organizar as relaes entre eles Exemplos
MVC Broker Layer Reflection

LES/PUC-Rio

Livro: Padres de Projeto do POSA


Padres de Projeto
Oferece um esquema para refinar os subsistemas ou componentes de um sistema de software ou as relaes entre eles. So considerados padres de mdia escala Exemplos
Singleton Observer Adapter Command Strategy

LES/PUC-Rio

Livro: Padres de Projeto do POSA Idiomas


Padro de baixo nvel especfico de uma linguagem de programao Mostra como se pode implementar um dado componente/classe ou interao entre componentes/classes usando os recursos de uma LP

Exemplos
Singleton em C++ ou em Java Counted Pointer: gerncia de memria em C++

LES/PUC-Rio

Livro: Padres de Projeto do POSA


Template
1. Name 2. As Known as

3. Example
4. Context 5. Problem 6. Solution

7. Structure
8. Dynamics 9. Implementation 10.Example Resolved 11.Variants 12.Known Uses 13.Consequences 14.See Also
LES/PUC-Rio

Pattern Community
Hillside Group (www.hillside.net)
Instituio sem fins lucrativos Objetivo: disseminar e estimular o uso de padres ao longo do desenvolvimento de software

Organiza as chamadas PLOPs conferncias


Plop, Europlop, SugarloafPlop, KoalaPlop Dinmica distinta de um evento comum
Apresentao de novos padres Apresentao de sistemas que utilizam padres Divulgao de pesquisas relacionadas a padres

LES/PUC-Rio

Alguns Padres de Projeto

Alguns Padres de Projeto


GoF
Singleton Facade Command Observer

Outros padres
DAO Filter

LES/PUC-Rio

Singleton
Motivao
Garantir que exista um determinado nmero X de objetos de uma classe
Independentemente do nmero de requisies que receber para cri-lo

Exemplos de aplicao
nico banco de dados

nico acesso ao arquivo de log


nica fachada (padro Facade)

LES/PUC-Rio

Singleton
Propsito
Assegurar o controle da quantidade de instncias da classe Ponto de acesso global a ela

Aplicabilidade
Exatamente uma instncia da classe
Acessvel pelos clientes de ponto de acesso bem conhecido

Instncia nica deve ser extensvel atravs de subclasses


Clientes capazes de usar instncia estendida sem alterar seu cdigo

LES/PUC-Rio

Singleton
Estrutura

Participantes
Singleton
Define operao Instance que permite que clientes acessem instncia nica
Instance operao de classe

Pode ser responsvel pela criao de sua nica instncia

LES/PUC-Rio

Singleton
Conseqncias
Acesso controlado a instncia nica Espao de nomes reduzido Refinamento de operaes e representao No h nmero variado de instncias Mais flexvel do que operaes de classes

LES/PUC-Rio

Singleton

LES/PUC-Rio

Facade
Motivao

LES/PUC-Rio

Facade
Motivao

LES/PUC-Rio

Facade
Propsito
Prover interface unificada para conjunto de interfaces em um subsistema Define interface de alto-nvel
Subsistema mais fcil de usar

Aplicabilidade
Prover interface simples para subsistema complexo Muitas dependncias entre clientes e classes que implementam uma abstrao Criar camadas no subsistema

LES/PUC-Rio

Facade
Estrutura

LES/PUC-Rio

Facade
Participantes Facade
Conhece quais classes do subsistema seriam responsveis pelo atendimento de uma solicitao
Delega solicitaes de clientes a objetos apropriados do subsistemas

Classes de subsistema
Implementam as funcionalidades do subsistema Respondem a solicitaes de servios da Facade No tm conhecimento da Facade

LES/PUC-Rio

Facade
Conseqncias
Esconde do cliente os componentes do subsistema
Reduz o nmero de objetos que os clientes lidam Subsistema mais fcil de usar

Fraco acoplamento entre subsistema e seus clientes No impede que aplicaes usem classes do subsistema, caso elas precisem

LES/PUC-Rio

Facade

LES/PUC-Rio

Command
Motivao

LES/PUC-Rio

Command
Propsito
Encapsular requisio como objeto
Permite parametrizar clientes com diferentes requisies

Dar suporte a operaes que no podem ser desfeitas

Aplicabilidade
Parametrizar objetos por ao a ser realizada Especificar, enfileirar e executar requisies em diferentes momentos Suportar desfazer Suportar log de alteraes
Podem ser reaplicadas caso o sistema falhe

Estruturar o sistema em operaes de alto nvel construdas sobre operaes primitivas

LES/PUC-Rio

Command
Estrutura

LES/PUC-Rio

Command
Participantes
Command
Define interface para a execuo de uma operao

ConcreteCommand
Define uma vinculao entre um objeto Receiver e uma ao Implementa Execute atravs da invocao da(s) correspondente(s) operao(es) no Receiver

Client
Cria um objeto ConcreteCommand e estabelece o seu receptor (Receiver)

Invoker
Solicita ao Command a execuo da solicitao

Receiver
Sabe como executar as operaes associadas a uma solicitao
Qualquer classe pode funcionar como um receiver

LES/PUC-Rio

Command
Conseqncias
Desacopla objeto que invoca operao do que sabe realiz-la Comandos so objetos de primeira classe Comandos podem ser reunidos para fazer um comando composto Facilidade de adicionar novos comandos

LES/PUC-Rio

Command

class

LES/PUC-Rio

Observer

LES/PUC-Rio

Observer
Propsito
Dependncia de um-para-muitos entre objetos
Quando um objeto muda de estado, todos seus dependentes so notificados e atualizados automaticamente

Aplicabilidade
Abstrao tem dois aspectos, um dependente do outro
Encapsular estes aspectos em objetos separados permite variao e reuso independentemente

Mudana em um objeto requer alterar outros


No se sabe quantos objetos precisam ser alterados

Objeto capaz de notificar outros objetos sem presumir quem so esses objetos

LES/PUC-Rio

Observer
Estrutura

LES/PUC-Rio

Observer
Participantes
Subject
Conhece seu Observer

Qualquer nmero de objetos Observer podem observar um Subject


Prov uma interface para acoplar e desacoplar objetos Observer

ConcreteSubject
Guarda o estado de interesse para ConcreteObserver

Envia uma notificao para seu Observer quando seu estado muda

Observer
Define uma interface de atualizao para objetos que devem ser notificados sobre mudanas em um Subject

ConcreteObserver
Mantm uma referncia para um objeto ConcreteSubject Guarda o estado que deve ficar consistente com o de Subject Implementa o Observer atualizando a interface para manter seu estado consistente com o de Subject
LES/PUC-Rio

Observer
Conseqncias
Acoplamento abstrato entre Sujeito e Observador Suporte a comunicao em broadcast (mensagem que todos os observadores enxergam). Atualizaes inesperadas

LES/PUC-Rio

Observer

LES/PUC-Rio

Data Access Object - DAO

Aplicao

DAO

BDs

XMLs
LES/PUC-Rio

Outras aplicaes

DAO
Propsito
Mediador entre as aplicaes e a base de dados Tradutor dos mundos

Aplicabilidade
Base de dados fornece dados para alguma aplicao
DAO converte os dados para serem manipulados

Aplicao fornece dados para a base de dados


DAO realiza a traduo para armazenamento, por exemplo.

LES/PUC-Rio

DAO
Estrutura

LES/PUC-Rio

DAO
Participantes
BusinessObject
Requisita acesso para armazenar ou requisitar algum dado de algum base.

DataAccessObject (DAO)
Oferece servios para o BusinessObject de forma transparente.

DataSource
Representa a fonte de dados (ex: BD, outro sistema, repositrio XML, etc). Acessada pelo DAO.

TransferObject
Usado para representar os dados obtidos pelo DAO e para serem compreendidos pelo BusinessObject.

LES/PUC-Rio

DAO
Conseqncias
Organizao na forma de prover e requisitar informaes localizadas em bases de dados. Simplificao na manuteno Baixo acoplamento.

LES/PUC-Rio

DAO

LES/PUC-Rio

Intercepting Filter

Aplicao

Cliente Pr-processamentos

Filter Ps-processamentos

Execuo ...

LES/PUC-Rio

Intercepting Filter
Propsito
Executar pr e ps processamentos de algum processamento Design pattern da J2EE

Aplicabilidade
O processamento desejado pode ter uma cadeia de processamentos ligados Pr e ps processamentos Ex: Tradues

LES/PUC-Rio

Intercepting Filter
Estrutura

LES/PUC-Rio

Intercepting Filter
Participantes
FilterManager
Cliente a usa para processar alguma operao (objetivo/meta) desejada em um especifico contexto.

FilterChain
Carrega os filtros e as metas.

IFilter
Define que devem ser realizados pr ou ps processamentos. A implementao definida nas suas classes concretas (ConcreteFilter)

ITarget
Meta fornecida pelo cliente.

Context
Conjunto de dados usados.

LES/PUC-Rio

Intercepting Filter
Conseqncias
Organizao em pr e ps processamentos. Facilidade em representar cadeias de operaes.

LES/PUC-Rio

Intercepting Filter

LES/PUC-Rio

Trabalho de Padres de Projeto

Informaes
Cada padro deve ser apresentado em uma sesso de 15 minutos. Estrutura da apresentao:
Propsito do Padro Motivao (um exemplo de motivao de uso do padro, que pode ser o do livro ou algum outro encontrado) Aplicabilidade Estrutura

Participantes
Colaboraes Conseqncias Exemplo de Cdigo (diferente do livro).

A qualidade da apresentao dos padres e o exemplo sero os critrios de avaliao.


Horrio
LES/PUC-Rio

Grupos
Rafael
Visitor Factory Method

Alessandro
Builder Composite

LES/PUC-Rio

Fim!!

Potrebbero piacerti anche