Professional Documents
Culture Documents
Introduo a Padres
Contexto
GUI / Comunicao
Arquitetura do Sistema
NEGCIO
TelaLogin
TelaPagamentoQualitiCard
...
ContaInternet
Interfaces negcio-dados
CadastroContas Internet
CadastroPagamentosCartao PagamentoCartao
IRepositorioContasInternet
DADOS
IRepositorioPagamentosCartao
RepositorioContasI nternetBDR
RepositorioContasI nternetArquivo
RepositorioPagamentos CartaoBDR
RepositorioPagamentos CartaoBDOO
08/09/2009
Evoluo de Software
Grandes sistemas de software nunca so completados; eles simplesmente continuam evoluindo [Lehman] Motivos e conseqncias (algumas Leis de Lehman)
Mudana Contnua e Crescimento Contnuo
Mudanas so inevitveis para que o software continue til Adio de funcionalidades para manter a satisfao do usurio
08/09/2009
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
08/09/2009
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
08/09/2009
Observer
Jornais so entregues aos seus assinantes .
Chain of Responsability
Chefe delega responsabilidade a um subordinado, que delega a outro, que ...
Padres so formados por vrios objetos. Cada objeto tem um papel (responsabilidade) na soluo. | Anlise e Projeto OO com UML e Padres
08/09/2009
Mais padres?
H vrios catlogos de padres para software
Muitos so especficos a uma determinada rea
padres J2EE padres de implementao Java ou C# padres para concorrncia padres para distribuio, ...
Padres de Projeto
08/09/2009
Formas de classificao
H vrias formas de classificar os padres Os padres GoF so tradicionalmente classificados pelo propsito:
1. criao de classes e objetos; 2. alterao da estrutura de um programa, 3. controle do seu comportamento
Estrutura Class Adapter Object Adapter Bridge Composite Decorator Facade Flyweight Proxy
Comportamento Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
08/09/2009
Padres Adapter, Facade, Composite, Bridge Factory Method, Abstract Factory, Builder, Prototype, Memento Singleton, Observer, Chain of Responsibility, Mediator, Proxy, Flyweight Template Method, State, Command, Strategy, Interpreter Iterator,Decorator, Visitor
Vistos Anteriormente Praticados nos prximos exerccios
08/09/2009
Interface
Interface:
coleo de mtodos e constantes que uma classe permite que objetos de outras classes acessem
Exigem que a classe que implementa a interface oferea implementao para seus mtodos No garante que mtodos tero implementao que efetue alguma computao: stubs
Composite:
definir uma interface comum para objetos individuais e composies de objetos
Bridge:
desacoplar uma abstrao de sua implementao para que ambos possam variar independentemente
Faade:
oferecer uma interface simples para uma coleo de classes
Visto anteriormente
08/09/2009
Fachada
Objetivo segundo o GoF:
oferecer uma interface nica para um conjunto de interfaces de um subsistema. Faade define uma interface de nvel mais elevado que torna o subsistema mais fcil de usar.
Padro Faade
Cliente precisa saber muitos detalhes do subsistema para utiliz-lo! Crie uma fachada!
Relembrando o
10
08/09/2009
Adapter
Objetivo segundo o GoF:
converter a interface de uma classe em outra interface esperada pelos clientes. Adapter permite a comunicao entre classes que no poderiam trabalhar juntas devido incompatibilidade de suas interfaces.
Soluo
Adaptador metodoEsperado()
void metodoEsperado() { metodoUtil(); }
11
08/09/2009
Object Adapter
<<interface>>
Cliente
Alvo operacao()
implementa
ClasseExistente metodoUtil()
Adaptador operacao()
Cliente: aplicao que colabora com objetos que implementam Alvo Alvo: define a interface requerida pelo Cliente ClasseExistente: classe dos objetos que requerem adaptao Adaptador: adapta a interface do Recurso interface Alvo
Anlise e Projeto OO com UML e Padres | 23
Composite
Objetivo segundo o GoF:
Compor objetos em estruturas de rvore para representar hierarquias todo-parte. Composite permite que clientes tratem objetos individuais e composies de objetos de maneira uniforme.
12
08/09/2009
Soluo
Tratar grupos e indivduos diferentes atravs de uma nica interface
Todos so componentes
Cliente Componente
Individuo
Grupo
Estrutura do Composite
:Composicao :Composicao :Folha :Folha :Folha :Folha :Folha
Cliente
Componente operacao()
1..*
Folha operacao()
13
08/09/2009
Discusso
1.
Voc consegue citar exemplos de Composite e Adaptor na API JAVA ou em outros frameworks? Voc consegue visualizar outra forma de criar adaptadores?
Quais as vantagens de sua abordagem?
2.
Adapter
Adaptar uma interface existente para um cliente
Bridge
Implementar um design que permita total desacoplamento entre interface e implementao
Composite
Tratar composies e unidades uniformemente
14
08/09/2009
Construtores
Alguns problemas em depender de construtores
Cliente pode no ter todos os dados necessrios para instanciar um objeto Cliente fica acoplado a uma implementao concreta (precisa saber a classe concreta para usar new com o construtor) Objeto complexo pode necessitar da criao de objetos menores previamente, com certo controle difcil de implementar com construtores No h como limitar o nmero de instncias criadas
15
08/09/2009
construo de objetos
Factory Method: adia a deciso sobre qual classe concreta instanciar Abstract Factory: constuir uma famlia de objetos que compartilham um "tema" em comum Prototype: especificar a criao de um objeto a partir de um exemplo fornecido Memento: reconstruir um objeto a partir de uma verso que contm apenas seu estado interno Builder: obtm informao necessria em passos antes de requisitar a construo de um objeto
Anlise e Projeto OO com UML e Padres | 31
Factory Method
Objetivo segundo o GoF:
Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. Factory Method permite que uma classe delegue a responsabilidade de instanciao s subclasses.
16
08/09/2009
Fabrica
cliente
Criador criarProduto()
Produto
CriadorConcreto criarProduto()
ProdutoConcreto
17
08/09/2009
Abstract Factory
Objetivo segundo o GoF:
Prover uma interface para criar famlias de objetos relacionados ou dependentes sem especificar suas classes concretas.
Problema
Criar uma famlia de objetos relacionados sem conhecer suas classes concretas
18
08/09/2009
Estrutura
cliente FabricaAbstrata criarProdutoUm() criarProdutoDois() ProdutoUm ProdutoDois
Discusso
1. 2.
Qual a diferena entre Factory Method e Abstract Factory? possvel o cliente solicitar a criao de um objeto sem ter conhecimento algum de sua classe concreta?
Que possveis formas voc enxerga para implementar isto?
19
08/09/2009
Quando usar?
Factory Method
Para isolar a classe concreta do produto criado da interface usada pelo cliente
Abstract Factory
Para criar famlias inteiras de objetos que tm algo em comum sem especificar suas interfaces.
Prototype
Para criar objetos usando outro como base
Memento
Para armazenar o estado de um objeto sem quebrar o encapsulamento. O uso tpico deste padro na implementao de operaes de Undo.
Builder
Para construir objetos complexos em vrias etapas e/ou que possuem representaes diferentes
Anlise e Projeto OO com UML e Padres | 39
20
08/09/2009
Distribuio de responsabilidades
Singleton: centraliza a responsabilidade em uma nica
instncia de uma classe
Padres associados a
Mediator: centraliza a responsabilidade em uma classe que determina como outros objetos interagem Proxy: assume a responsabilidade de outro objeto
(intercepta)
Chain of Responsibility: permite que uma requisio passe por uma corrente de objetos at encontrar um que a processe Flyweight: centraliza a responsabilidade em objetos
compartilhados de alta granularidade (blocos de montagem)
Anlise e Projeto OO com UML e Padres | 42
21
08/09/2009
Singlenton
Objetivo segundo o GoF:
Garantir que uma classe s tenha uma nica instncia, e prover um ponto de acesso global a ela.
independente do nmero de requisies que receber para cri-lo
Aplicaes
Um nico banco de dados Um nico acesso ao arquivo de log Um nico objeto que representa um vdeo Uma nica fachada (Faade pattern)
Anlise e Projeto OO com UML e Padres | 43
Estrutura do Singlenton
Objeto com acesso privativo Singlenton - dados -instancia : null - Singlenton () + getInstancia() +getDados() Construtor privativo Ponto de acesso esttico e global
public static synchronized Singlenton getInstancia() { if (instancia == null) { instancia = new Singlenton(); } return instancia; }
22
08/09/2009
Observer
Objetivo segundo o GoF:
Definir uma dependncia um-para-muitos entre objetos para que quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente.
Observer
Problema:
registra-se altera
notifica
tempo
23
08/09/2009
Estrutura de Observer
for(int i =0; i < obs.lenght; i++){ obs[i].atualizar(); }
dadosObservados = conc.getDados();
Anlise e Projeto OO com UML e Padres | 47
Chain of Responsibility
Objetivo segundo o GoF:
"Evita acoplar o remetente de uma requisio ao seu destinatrio ao dar a mais de um objeto a chance de servir a requisio. Compe os objetos em cascata e passa a requisio pela corrente at que um objeto a sirva.
24
08/09/2009
Chain of Responsability
Problema
Permitir que vrios objetos possam servir a uma requisio ou repass-la Permitir diviso de responsabilidades de forma transparente
...
ProcessadorConcretoN processarRequisicao()
25
08/09/2009
Discusso
1.
2.
Na sua opnio:
Todos os objetos deveriam ser Singlentons? Singlentons estariam indiretamente introduzindo variveis globais? Isto bom ou ruim? Que diferentes maneiras voc conseguiria visualizar para indicar o prximo processo em uma cadeia de responsabilidades? Qual a diferena entre cada uma delas?
Quando usar?
Singleton: quando apenas uma instncia for permitida Observer: quando houver necessidade de notificao
automtica
Chain of Responsibility: quando uma requisio puder ou precisar ser tratada por um ou mais entre vrios objetos Mediator: para controlar a interao entre dois objetos
independentes
26
08/09/2009
Extenses
Extenso a adio de uma classe, interface ou mtodo a uma base de cdigo existente [2] Formas de extenso
Herana (criao de novas classes) Delegao (para herdar de duas classes, pode-se estender uma classe e usar delegao para "herdar" o comportamento da outra classe)
27
08/09/2009
28
08/09/2009
Decorator
Objetivo segundo GoF:
Anexar responsabilidades adicionais a um objeto dinamicamente. Decorators oferecem uma alternativa flexvel ao uso de herana para estender uma funcionalidade.
Estrutura
Componente operacao()
ComponenteConcreto operacao()
Decorador operacao()
component.operacao();
29
08/09/2009
// objeto do tipo File File tanque = new File("agua.txt"); // componente FileInputStream // cano conectado no tanque FileInputStream cano = new FileInputStream(tanque); // read() l um byte a partir do cano byte octeto = cano.read();
Anlise e Projeto OO com UML e Padres | 59
// partindo do cano (componente concreto) Concatenao de decorador FileInputStream cano = new FileInputStream(tanque); // decorador leitor conectado no componente InputStreamReader leitor = new InputStreamReader(cano); // pode-se ler um char a partir de chf (mas isto impede que // o char chegue ao fim da linha: h um vazamento no cano!) char letra = leitor.read(); Uso de mtodo com comportamento alterado // decorador br conectado no decorador chf BufferedReader leitorbf = new BufferedReader (leitor); // l linha de texto a de br Comportamento adicional String linha = leitorbf.readLine();
30
08/09/2009
Iterator
Objetivo de acordo com o GoF:
Prover uma maneira de acessar os elementos de um objeto agregado seqencialmente sem expor sua representao interna.
Problema
Tipo genrico
Iterator
Coleo arbitrria de objetos (array, hashmap, lista, conjunto, pilha, tabela, ...)
31
08/09/2009
Iterator
Iterators servem para acessar o contedo de um agregado (colees, arrays, etc) sem expor sua representao interna Oferece uma interface uniforme para atravessar diferentes estruturas agregadas Em Java, Iterators so implementados nas colees do Java. obtido atravs do mtodo iterator() de Collection, que devolve uma instncia de java.util.Iterator. Interface java.util.Iterator:
package java.util; public interface Iterator<E> { boolean hasNext(); Object next(); void remove(); }
quando usar?
Decorator
Para acrescentar recursos e comportamento a um objeto existente, receber sua entrada e podermanipular sua sada.
Iterator
Para navegar em uma coleo elemento por elemento
Visitor
Para estender uma aplicao com novas operaes sem que seja necessrio mexer na interface existente.
Anlise e Projeto OO com UML e Padres | 64
32
08/09/2009
33
08/09/2009
Operaes
Algumas Definies
Operao: especificao de um servio que pode ser requisitado por uma instncia de uma classe. Exemplo: operao toString() implementada em todas as classes. Mtodo: implementao de uma operao. Um mtodo tem uma
assinatura. Exemplo: cada classe implementa toString() diferentemente
operaes e algoritmos
Template Method:
implementa um algoritmo em um mtodo adiando a definio de alguns passos do algoritmo para que subclasses possam defini-los
State:
distribui uma operao para que cada classe represente um estado diferente; encapsula um estado
Strategy:
encapsula um algoritmo fazendo com que as implementaes sejam intercambiveis
Command:
encapsula uma instruo em um objeto
Interpreter:
distribui uma operao de tal forma que cada implementao se aplique a um tipo de composio diferente
Anlise e Projeto OO com UML e Padres | 68
34
08/09/2009
Template Method
Objetivo segundo o GoF:
Definir o esqueleto de um algoritmo dentro de uma operao, deixando alguns passos a serem preenchidos pelas subclasses. Template Method permite que suas subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura.
Problema/Soluo
ClasseAbstrata void concreto(){ ... parteUm(); ... parteDois(); } abstract void parteUm(); abstract void parteDois(); algoritmo lacunas: parteUm parteDois
Algoritmo resultantes:
35
08/09/2009
State
Objetivo segundo o GoF:
Permitir a um objeto alterar o seu comportamento quanto o seu estado interno mudar. O objeto ir aparentar mudar de classe.
Problema
Desconectado
Cenrio Atual:
:Objeto
Operao If(estado == desconectado){ faaIsto(); } else if (estado == conectado){ falaAquilo(); } else { faa(); }
Conectado
Transmitindo
Desejado:
estado.faa();
Desejamos usar objetos para representar estados e polimorfismo para tornar a execuo de tarefas dependentes de estado transparentes
36
08/09/2009
Estrutura
Contexto estado: Estado requisio()
estado.processar();
EstadoConcretoUm processar()
EstadoConcretoDois processar()
Contexto: define uma interface de interesse ao cliente, delegando suas requisies ao estado corrente. Estado: define uma interface para encapsular o comportamento de todos os estados. EstadoConcreto: implementa o comportamento associado ao estado Anlise e Projeto OO com UML e Padres | 73 do contexto.
Exemplo
TCPConnection open() close() acknowledge() TCPState open() close() acknowledge()
Sempre que a aplicao mudar de estado, o objeto TCPConnection muda o objeto TCPState que est usando
Anlise e Projeto OO com UML e Padres | 74
37
08/09/2009
Command
Objetivo segundo GoF:
Encapsular uma requisio como um objeto, permitindo que clientes parametrizem diferentes requisies, filas ou equisies de log, e suportar operaes reversveis.
Problema
38
08/09/2009
Estrutura
Executor cmd: Comando executar()
cmd.executar ()
Comando executar()
ComandoConcretoA executar()
ComandoConcretoB executar()
receptor.acao()
ReceptorA aoA()
ReceptorB aoB()
Discusso
1. 2.
Qual a diferena entre State e Command? Sobre State, voc consegue imagina alguma implementao alternativa que:
Evite que cada estado concreto tenha que implementar mtodos no suportados neste estado; O contexto no esta ciente das transies entre estados.
39
08/09/2009
quando usar?
Template Method
Para compor um algoritmo feito por mtodos abstratos que podem ser completados em subclasses
State
Para representar o estado de um objeto
Command
Para representar um comando (ao imperativa do cliente)
Strategy
Para representar um algoritmo (comportamento)
Interpreter
Para realizar composio com comandos e desenvolver uma linguagem de programao usando objetos
Anlise e Projeto OO com UML e Padres | 79
40