Escolar Documentos
Profissional Documentos
Cultura Documentos
(Padres GoF)
PUC Minas So Gabriel
Programao Modular
Contexto
GUI / Comunicao
TelaLogin
TelaLogin
TelaPagamentoQualitiCard
TelaPagamentoQualitiCard
Arquitetura do Sistema
NEGCIO
Fachada
Fachada
ControladorLogin
ControladorLogin
CadastroContasI
CadastroContasI
nternet
nternet
ContaInternet
ContaInternet
ControladorPagamentoQualitiCard
ControladorPagamentoQualitiCard
CadastroPagamentosCartao
CadastroPagamentosCartao
...
PagamentoCartao
PagamentoCartao
Interfaces
negcio-dados
IRepositorioContasInternet
IRepositorioPagamentosCartao
DADOS
RepositorioContasIn
RepositorioContasIn
ternetBDR
ternetBDR
RepositorioContasIn
RepositorioContasIn
ternetArquivo
ternetArquivo
RepositorioPagamentosC
RepositorioPagamentosC
artaoBDR
artaoBDR
RepositorioPagamentosCa
RepositorioPagamentosCa
rtaoBDOO
rtaoBDOO
Evoluo de Software
Grandes sistemas de software nunca so concludos; 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
No reinventar a roda!
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
Observer
Chain of Responsability
Chefe delega responsabilidade a
um subordinado, que delega a
outro, que ...
Descreve 23 padres
solues genricas para os problemas mais
comuns do desenvolvimento de software
orientado a objetos
obtidas atravs de experincias de sucesso
na indstria de software
Sobre o livro
Seus quatro autores so conhecidos como
"The Gang of Four (GoF)
O livro tornou-se um clssico na literatura
orientada a objetos e continua atual
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
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
23 Padres GoF
Classificao por Propsito
23 Padres GoF
Classificao por Inteno
Inteno
Padres
1. Interfaces
3. Construo
2. Responsabilidade
4. Operaes
5. Extenses
Iterator,Decorator, Visitor
Vistos em Sala
Vistos Anteriormente
PADRES RELACIONADOS A
INTERFACES
Anlise e Projeto OO com UML e Padres | 16
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
Padres relacionados a
Interfaces
Adapter:
para adaptar a interface de uma classe para outra que o cliente
espera
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
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.
Relembrando o
Padro Faade
Cliente precisa saber muitos
detalhes do subsistema para
utiliz-lo!
slide com
animao
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.
Adapter
Problema e Soluo
Problema
Soluo
Cliente
operacao()
Deseja
utilizar
ClasseExistente
metodoUtil()
slide com
animao
Adaptador
void operacao() {
metodoEsperado();
}
metodoEsperado()
void metodoEsperado() {
metodoUtil();
}
Object Adapter
<<interface>>
Cliente
Alvo
operacao()
implementa
ClasseExistente ce;
...
ce.metodoUtil();
Adaptador
operacao()
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.
Composite
Problema e Soluo
Problema
Soluo
Individuo
Grupo
Estrutura do Composite
:Composicao
:Composicao
:Folha
Componente
Cliente
:Folha
:Folha
:Folha
:Folha
1..*
operacao()
Folha
operacao()
Composio
operacao()
add(Componente)
remove(Componente)
filhos
for (int i=0; i<filhos.length; i++) {
filho = filhos[i];
filho.operacao();
}
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
Anlise e Projeto OO com UML e Padres | 27
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
construo de objetos
Factory Method: adia a deciso sobre qual classe concreta
instanciar
Abstract Factory: constuir uma famlia de objetos
relacionados
Prototype: especificar a criao de um objeto a partir de um
exemplo (modelo) fornecido
Memento: reconstruir um objeto a partir de uma verso que
contm apenas seu estado interno
Builder: Separa a criao de um objeto de sua representao
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.
Fabrica
Poligono
desenha()
cliente
Forma
Retangulo
desenha()
desenha()
Circulo
desenha()
cliente
Criador
Produto
criarProduto()
CriadorConcreto
ProdutoConcreto
criarProduto()
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
Estrutura
cliente
FabricaAbstrata
criarProdutoUm()
criarProdutoDois()
FabricaConcretaA
criarProdutoUm()
criarProdutoDois()
FabricaConcretaB
criarProdutoUm()
criarProdutoDois()
ProdutoUm
ProdutoDois
ProdutoUmA
ProdutoDoisA
ProdutoUmB
ProdutoDoisB
Anlise e Projeto OO com UML e Padres | 36
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
PADRES ASSOCIADOS
DISTRIBUIO DE RESPONSABILIDADES
Anlise e Projeto OO com UML e Padres | 38
Padres associados
Distribuio de responsabilidades
Singleton: centraliza a responsabilidade em uma nica instncia de uma
classe
Singleton
Objetivo segundo o GoF:
Garantir que uma classe tenha uma nica instncia, e
prover um ponto de acesso global a ela.
independente do nmero de requisies que receber para
cri-lo
Aplicaes
Estrutura do Singlenton
Objeto com acesso
privado
Singlenton
- dados
-instancia : null
- Singlenton ()
+ getInstancia()
+getDados()
Construtor privado
Ponto de acesso esttico e global
Observer
Objetivo segundo o GoF:
Definir uma dependncia um-para-muitos entre
objetos de forma que, quando um objeto mudar
de estado, todos os seus dependentes sejam
notificados e atualizados automaticamente.
Observer
Problema:
registra-se
notifica
altera
tempo
slide com
animao
Estrutura do Observer
for(int i =0; i < obs.lenght; i++){
obs[i].atualizar();
}
Sujeito
- obs: Observador[]
cadastrar(Observador)
remover(Observador)
notificar()
SujeitoConcreto
- dados
+ getDados()
+ setDados()
<<interface>
Observador
atualizar()
ObservadorConcreto
- conc: SujeitoConcreto
- dadosObservados
+ atualizar()
dadosObservados = conc.getDados();
Anlise e Projeto OO com UML e Padres | 44
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.
Chain of Responsability
Problema
Permitir que vrios objetos
possam servir a uma requisio
ou repass-la
Permitir diviso de
responsabilidades de forma
transparente
Estrutura do
Chain of Responsability
cliente
<<interface>
Processador
processarRequisicao()
ProcessadorConcreto1
- sucessor: Processador
processarRequisicao()
ProcessadorConcreto2
- sucessor: Processador
processarRequisicao()
sucessor.processarRequisicao()
...
ProcessadorConcretoN
processarRequisicao()
Anlise e Projeto OO com UML e Padres | 47
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
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
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();
ClasseConcretaA
parteUm();
parteDois();
ClasseConcretaB
algoritmo
lacunas:
parteUm
parteDois
Algoritmo
resultantes:
parteUm();
parteDois();
State
Objetivo segundo o GoF:
Permitir a um objeto alterar o seu
comportamento quando o seu estado interno
mudar.
O objeto ir aparentar mudar de classe.
Problema
Desconectado
Conectado
Transmitindo
Cenrio Atual:
:Objeto
Operao
If(estado == desconectado){
faaIsto();
} else if (estado == conectado){
falaAquilo();
} else {
faa();
}
Desejado:
estado.faa();
Estrutura
<interface>
Estado
Contexto
estado: Estado
processar()
requisio()
estado.processar();
EstadoConcretoUm
processar()
EstadoConcretoDois
processar()
Exemplo
TCPState
TCPConnection
open()
close()
acknowledge()
open()
close()
acknowledge()
TCPEstablished
open()
close()
acknowledge()
TCPListen
TCPClosed
open()
close()
acknowledge()
open()
close()
acknowledge()
Command
Objetivo segundo GoF:
Encapsular uma requisio como um objeto,
permitindo que clientes parametrizem diferentes
requisies, filas ou requisies de log, e suportar
operaes reversveis.
Problema
Estrutura
Executor
cmd: Comando
executar()
Comando
executar()
cmd.executar ()
ComandoConcretoA
executar()
ComandoConcretoB
executar()
receptor.acao()
ReceptorA
aoA()
ReceptorB
aoB()
Conseqncias
Desacopla o invocador do receptor
So objetos; podem ser manipulados e
estendidos
Fcil adicionar novos comandos
Comandos compostos podem ser criados
usando o padro Composite
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
Extenses
Extenso a adio de uma classe, interface ou mtodo a
uma base de cdigo existente
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)
Exemplo de
Extenso por Delegao
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()
DecoradorConcretoA
estadoAdicional
operacao()
component.operacao();
DecoradorConcretoB
comportamentoAdicional()
operacao()
super.operacao();
comportamentoAdicional();
Anlise e Projeto OO com UML e Padres | 67
Exemplo
Toolkit de interface grfica
Texto - componente concreto
Texto com bordas - decorator
Texto com bordas e barra de rolagem - decorator
Conseqncias
Mais flexibildade que herana esttica
Modelo tende a ficar mais simples e uniforme
Entretanto
Apesar de um decorator e o componente serem
do mesmo tipo, no so o mesmo objeto
Proliferao de pequenos objetos que
implementam as extenses
Qual a diferena entre o Decorator Adaptador?
Anlise e Projeto OO com
UML e Padres | 69
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
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 poder
manipular 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 | 73