Vous êtes sur la page 1sur 84

Introduo a Padres

Contexto
GUI / Comunicao
TelaLogi TelaPagamentoQualitiCar
Arquitetura do Sistema n d

NEGCIO
Fachada

ControladorLogi ControladorPagamentoQualitiC
n ard
...
CadastroCont CadastroPagamentosCart
asInternet ao
ContaInternet PagamentoCart
ao
Interfaces
negcio-dados
IRepositorioContasInternet IRepositorioPagamentosCartao

DADOS

RepositorioCont RepositorioCont RepositorioPagamen RepositorioPagament


asInternetBDR asInternetArqui tosCartaoBDR osCartaoBDOO
vo

Anlise e Projeto OO com UML e Padres | 2


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
Complexidade Crescente e Qualidade Decrescente
Mudanas aumentam a complexidade do software
Qualidade diminui a no ser que haja adaptaes

Anlise e Projeto OO com UML e Padres | 3


Como devemos proceder?

Pensar antes de agir!

Algumas aes:
Analisar impactos
Modelar, antes de codificar
Utilizar solues e tcnicas
validadas
No reinventar a roda!

Anlise e Projeto OO com UML e Padres | 4


Padres em outras
Engenharias
Cada padro descreve um problema que ocorre repetidas
vezes em nosso ambiente, e ento descreve o ncleo da
soluo para aquele problema, de tal maneira que pode-se
usar essa soluo milhes de vezes sem nunca faz-la da
mesma forma duas vezes
Christopher Alexander, sobre padres em Arquitetura

Anlise e Projeto OO com UML e Padres | 5


Padres de Projeto / Design
Patterns
Solues (validadas) para alcanar objetivos na
engenharia de software usando linguagens O-O
Registram conhecimento existente de forma que possam
ser reaplicados em vrios contextos

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

Anlise e Projeto OO com UML e Padres | 6


Por que aprender padres?
Aprender com a experincia dos outros
identificar problemas comuns em engenharia de software
utilizar solues testadas e bem documentadas
Aprender boas prticas de programao
Padres utilizam eficientemente herana, composio,
modularidade, polimorfirmo e abstrao para construir
cdigo reutilizvel, eficiente, de alta coeso e baixo
acoplamento
Ter um caminho e um alvo para refatoraes
Facilita a comunicao, compreenso e
documentao
Vocabulrio comum
Ajuda a entender o papel de classes do sistemas

Anlise e Projeto OO com UML e Padres | 7


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

Anlise e Projeto OO com UML e Padres | 8


Metforas no mundo real
Chain of
State Observer Responsability
Pessoas reagem de Jornais so entregues Chefe delega
formas diferente de aos seus assinantes . responsabilidade a um
acordo com o humor. subordinado, que delega a
outro, que ...

Padres so formados por vrios objetos.


Cada objeto tem um papel (responsabilidade) na
Anlise e Projeto OO com UML e Padres | 9
Padres de Projeto GoF
Padres de Projeto/Design Introduzidos no livro em 1994
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

Anlise e Projeto OO com UML e Padres | 10


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
...
Os padres apresentados aqui so aplicveis
em Java e outras linguagens O-O
Anlise e Projeto OO com UML e Padres | 11
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
Metsker os classifica em 5 grupos, por inteno
1. oferecer uma interface
2. atribuir uma responsabilidade
3. realizar a construo de classes ou objetos
4. controlar formas de operao
5. implementar uma extenso para a aplicao

Anlise e Projeto OO com UML e Padres | 13


23 Padres GoF
Classificao por Propsito

** Classificao segundo GoF. Anlise e Projeto OO com UML e Padres | 14


23 Padres GoF
Classificao por Inteno

Inteno Padres
1. Interfaces Adapter, Facade, Composite, Bridge
3. Construo Factory Method, Abstract Factory,
Builder, Prototype, Memento
2. Responsabilidade Singleton, Observer, Chain of
Responsibility,
Mediator, Proxy, Flyweight
4. Operaes Template Method, State, Command,
Strategy,
Interpreter
5. Extenses Iterator,Decorator, Visitor
Vistos em Sala Vistos Anteriormente Praticados nos prximos exerccios
** Classificao segundo Steven Metsker, Design Patterns Java Workbook, 2002.
Anlise e Projeto OO com UML e Padres | 15
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

Anlise e Projeto OO com UML e Padres | 17


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
Visto
anteriorment
Anlise e Projeto OO com UML e Padres | 18
e
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.

Anlise e Projeto OO com UML e Padres | 19


Relembrando o
Padro Faade
Cliente precisa saber Crie uma fachada!
muitos detalhes do
subsistema para utiliz-
lo!

slide com
Anlise e Projeto OO com UML e Padres | 20
animao
Discusso
1. Leia sobre o padro Bridge e destaque em que
contexto usamos uma variao deste padro na
arquitetura do QIB. Analise tambm a diferena
entre o Bridge e o uso feito no QIB. Por que o
Bridge mais geral?

Anlise e Projeto OO com UML e Padres | 21


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.

Anlise e Projeto OO com UML e Padres | 22


Adapter
Problema e Soluo
Problema Soluo
Cliente
Adaptador
operacao() void operacao() { metodoEsperado
Deseja ()
utilizar metodoEsperado();
ClasseExistent } void
e metodoEsperado() {
metodoUtil() metodoUtil();
}

slide com Anlise e Projeto OO com UML e Padres | 23


animao
Object Adapter
<<interface>>
Alvo
Cliente
operacao()

implementa
ClasseExistente ce; Adaptador
...
ce.metodoUtil(); 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 | 24


Discusso
1. Voc consegue visualizar outra forma de criar
adaptadores?
Quais as vantagens de sua abordagem?

2. Qual o escopo de um adaptador em termos das


responsabilidades implementadas?
3. Adaptadores bidirecionais
4. Onde podemos usar adaptadores no QIB?

Anlise e Projeto OO com UML e Padres | 25


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.

Anlise e Projeto OO com UML e Padres | 26


Composite
Problema e Soluo
Problema Soluo
Cliente precisa tratar de Tratar grupos e indivduos
maneira uniforme objetos diferentes atravs de uma
individuais e composies nica interface
Todos so
desses objetos component
es
Cliente

Componen
te

Individu
Grupo
o

Anlise e Projeto OO com UML e Padres | 27


Estrutura do Composite
:Composicao

:Composicao :Folha :Folha

:Folha :Folha :Folha


Component 1..*
Cliente e
operacao()

Folha Composio filhos

operacao() operacao()
for (int i=0; i<filhos.length;
add(Componente) i++) {
remove(Componen filho = filhos[i];
te) filho.operacao();
}

Anlise e Projeto OO com UML e Padres | 28


Resumo: quando usar?
Faade
Simplificar o uso de uma coleo de objetos
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 | 30


PADRES QUE OFERECEM
ALTERNATIVAS
CONSTRUO DE OBJETOS
Anlise e Projeto OO com UML e Padres | 31
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

Anlise e Projeto OO com UML e Padres | 32


Padres que oferecem alternativas
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

Anlise e Projeto OO com UML e Padres | 33


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.

Anlise e Projeto OO com UML e Padres | 34


Funcionamento de uma
Fbrica
Problema:
O acesso a um objeto concreto ser feito atravs da interface
conhecida atravs de sua superclasse, mas o cliente tambm
no quer (ou no pode) saber qual implementao concreta
estar utilizando
Fabrica
Poligon
o
desenha(
)
Retang
Forma
cliente ulo
desenha( desenha(
) )
Circulo
desenha(
)

Anlise e Projeto OO com UML e Padres | 35


Estrutura do Factory Method

Criador Produto
cliente
criarProduto
()

CriadorConcre ProdutoConcr
to eto
criarProduto()

Anlise e Projeto OO com UML e Padres | 36


Abstract Factory
Objetivo segundo o GoF:
Prover uma interface para criar famlias
de objetos relacionados ou dependentes
sem especificar suas classes concretas.

Anlise e Projeto OO com UML e Padres | 37


Problema
Criar uma famlia de objetos relacionados sem
conhecer suas classes concretas

Anlise e Projeto OO com UML e Padres | 38


Estrutura
FabricaAbstra ProdutoUm
cliente ta
criarProdutoUm ProdutoDoi
() s
criarProdutoDoi
s()

FabricaConcre ProdutoUm
taA A
criarProdutoUm( ProdutoDoi
) sA
criarProdutoDois
() FabricaConcre ProdutoUm
taB B
criarProdutoUm( ProdutoDoi
) sB
criarProdutoDois
() Anlise e Projeto OO com UML e Padres | 39
Discusso
1. Qual a diferena entre Factory Method e
Abstract Factory?
2. 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?

Anlise e Projeto OO com UML e Padres | 40


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 | 41


Exerccio Qualiti Internet
Banking
Dado:
A arquitetura do sistema modelada no exerccio anterior

Refatorar o Projeto para:


Permitir flexibilidade na mudana do mecanismo de
persistncia (BDR ou XML)
Uniformizar as diversas interfaces de operadoras de
carto (visa, master, etc) no subsistema
OperadoraCarto

Dica: utilize os padres


Adapter e Abstract Factory.
Anlise e Projeto OO com UML e Padres | 42
PADRES ASSOCIADOS
DISTRIBUIO DE
RESPONSABILIDADES
Anlise e Projeto OO com UML e Padres | 43
Padres associados
Distribuio de
responsabilidades
Singleton: centraliza a responsabilidade em uma nica
instncia de uma classe
Observer: desacopla um objeto do conhecimento de que
outros objetos dependem dele
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 granularidade fina (blocos de montagem)

Anlise e Projeto OO com UML e Padres | 44


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
Um nico banco de dados
Um nico arquivo de log
Um nico objeto que representa um vdeo
Uma nica fachada (Faade pattern)
Anlise e Projeto OO com UML e Padres | 45
Estrutura do Singlenton
Objeto com acesso
privado Construtor privado
Ponto de acesso esttico e
Singlenton global
- dados
-instancia : null
- Singlenton ()
+ getInstancia() public static synchronized Singlenton
+getDados() getInstancia() {
if (instancia == null) {
instancia = new Singlenton();
}
return instancia;
}

Lazy inicializatiom
idiom
Anlise e Projeto OO com UML e Padres | 46
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.

Anlise e Projeto OO com UML e Padres | 47


Observer
Problema:

registra-se notifica

altera

tempo

slide com Anlise e Projeto OO com UML e Padres | 48


animao
Estrutura do Observer
for(int i =0; i < obs.lenght; i+
+){
obs[i].atualizar();
}
Sujeito
- obs: Observador[] <<interface>
Observador
cadastrar(Observad
or) atualizar()
remover(Observado
r) notificar()
ObservadorConcre
SujeitoConcreto to
- conc:
- dados
SujeitoConcreto
+ getDados()
-+dadosObservados
atualizar()
+ setDados()

dadosObservados =
conc.getDados();
Anlise e Projeto OO com UML e Padres | 49
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.

Anlise e Projeto OO com UML e Padres | 50


Chain of Responsability
Problema
Permitir que vrios objetos
possam servir a uma
requisio ou repass-la
Permitir diviso de
responsabilidades de forma
transparente

Filme: O Grande Dave,


Estrelado por Eddie Murphy

Anlise e Projeto OO com UML e Padres | 51


Estrutura do
Chain of Responsability
<<interface>
Processador
cliente
processarRequisica
o()

ProcessadorConcr
eto1
- sucessor:
Processador
processarRequisicao(
) ProcessadorConcr
eto2
- sucessor:
Processador
processarRequisicao(
) ...
ProcessadorConcr
sucessor.processarRequisi
etoN
cao()
processarRequisicao(
)
Anlise e Projeto OO com UML e Padres | 52
Discusso
1. Qual a diferena entre:
Singleton e Faade?
Chain of Responsibility e Adapter?
2. Na sua opnio:
Todos os objetos deveriam ser Singleton?
Singleton estaria indiretamente introduzindo variveis
globais? Isto bom ou ruim?

Anlise e Projeto OO com UML e Padres | 53


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
Proxy: quando for preciso um intermedirio para o objeto
real
Flyweight: quando for necessrio reutilizar objetos
visando performance (cuidado com o efeito oposto!)

Anlise e Projeto OO com UML e Padres | 54


PADRES QUE LIDAM COM
FORMAS DE IMPLEMENTAR
OPERAES E ALGORITMOS
Anlise e Projeto OO com UML e Padres | 55
Padres que lidam com formas de
implementar
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 | 56


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.

Anlise e Projeto OO com UML e Padres | 57


Problema/Soluo
ClasseAbstrata
void concreto(){ algoritm lacunas:
... parteUm(); o
... parteDois(); parteU
} m
parteDoi
abstract void
s
parteUm();
abstract void
parteDois();
Algoritmo
ClasseConcreta ClasseConcreta resultante
A B s:
parteUm(); parteUm();
parteDois(); parteDois();

Anlise e Projeto OO com UML e Padres | 58


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.

Anlise e Projeto OO com UML e Padres | 59


Problema
Desconecta Cenrio Atual:
do :Objeto
Operao
If(estado == desconectado){
faaIsto();
Conectado
} else if (estado == conectado){
falaAquilo();
} else {
Transmitind faa();
o }
Desejado:
estado.faa();

Desejamos usar objetos para representar estados e


polimorfismo para tornar a execuo de tarefas
dependentes de estado Anlise
transparentes
e Projeto OO com UML e Padres | 60
Estrutura
Contexto <interface>
Estado
estado: Estado
processar()
requisio()

estado.processar();

EstadoConcreto EstadoConcreto
Um Dois
processar() 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 do
contexto.

Anlise e Projeto OO com UML e Padres | 61


Exemplo
TCPConnecti TCPState
on open()
open() close()
close() acknowledge()
acknowledge()

TCPEstablish
TCPListen TCPClosed
ed
open() open() open()
close() close() close()
acknowledge() acknowledge() 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 | 62
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.

Anlise e Projeto OO com UML e Padres | 63


Problema

Anlise e Projeto OO com UML e Padres | 64


Estrutura
Executor Comando
cmd: Comando
executar()
executar()

cmd.executar
()

ComandoConcre ComandoConcre
toA toB
executar() executar()

receptor.acao(
)
Receptor Receptor
A B
aoA() aoB()

Anlise e Projeto OO com UML e Padres | 65


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

Anlise e Projeto OO com


UML e Padres | 66
Discusso
1. Qual a diferena entre State e Command?

Anlise e Projeto OO com UML e Padres | 67


Interpreter
Objetivo segundo GoF:
Ver
www.cin.ufpe.br/~in1007/linguagens

Anlise e Projeto OO com UML e Padres | 68


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 | 69


Exerccio Qualiti Internet
Banking
Dado:
A arquitetura do sistema modelada no exerccio anterior

Modelar o Caso de Uso de Agendamento:


Produzir diagramas de Anlise
Introduzir caso de uso arquitetura

Dica: utilize o padro


Command em sua resposta
Anlise e Projeto OO com UML e Padres | 70
PADRES QUE PERMITEM
ACRESCENTAR
COMPORTAMENTOS
Anlise e Projeto OO com UML e Padres | 71
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)
Desenvolvimento em Java sempre uma forma
de extenso
Extenso comea onde o reuso termina

Anlise e Projeto OO com UML e Padres | 72


Exemplo de
Extenso por Delegao

Anlise e Projeto OO com UML e Padres | 73


Padres que permitem
acrescentar comportamentos
Padres que permitem acrescentar
comportamentos em um objeto sem mudar sua
classe
Decorator: adiciona responsabilidades a um objeto
dinamicamente
Iterator: oferece uma maneira de acessar uma coleo
de instncias de uma classe
Visitor: permite a adio de novas operaes a uma
classe sem mudar a classe

Anlise e Projeto OO com UML e Padres | 74


Decorator
Objetivo segundo GoF:
Anexar responsabilidades adicionais a
um objeto dinamicamente.
Decorators oferecem uma alternativa
flexvel ao uso de herana para estender
uma funcionalidade.

Anlise e Projeto OO com UML e Padres | 75


Estrutura
Componente
operacao()

ComponenteConc
Decorador
reto component.operacao
operacao() operacao() ();

DecoradorConcre
DecoradorConcretoB
toA
estadoAdicional comportamentoAdicional
operacao() ()
operacao()
super.operacao();
comportamentoAdicional
Anlise
(); e Projeto OO com UML e Padres | 76
Exemplo
Toolkit de interface grfica
Texto - componente concreto
Texto com bordas - decorator
Texto com bordas e barra de rolagem -
decorator

Anlise e Projeto OO com


UML e Padres | 77
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 | 78
Iterator
Objetivo de acordo com o GoF:
Prover uma maneira de acessar os
elementos de um objeto agregado
seqencialmente sem expor sua
representao interna.

Anlise e Projeto OO com UML e Padres | 79


Problema
Coleo arbitrria de objetos
Tipo Iterator (array, hashmap, lista, conjunto,
genrico
pilha, tabela, ...)

Anlise e Projeto OO com UML e Padres | 80


Iterator
Iterators servem para acessar o contedo de um agregado
(colees, arrays, etc) sem expor sua representao interna
Oferece uma interface uniforme para percorrer diferentes
estruturas agregadas
Em Java, Iterators so implementados nas colees. 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();
}
iterator() um exemplo de Factory Method

Anlise e Projeto OO com UML e Padres | 81


Discusso
1. Qual a estrutura do diagrama de classes de
forma a permitir iterao polimrfica?

Anlise e Projeto OO com UML e Padres | 82


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 | 83


Exerccio Qualiti Internet
Banking
Dado:
A arquitetura do sistema modelada no exerccio anterior

Modelar o Caso de Uso Configurar Conta:


Produzir diagramas de Anlise
Introduzir caso de uso arquitetura

Dica: utilize os padres


Composite, Observer e Decorator.
Anlise e Projeto OO com UML e Padres | 84
Quiz sobre padres
Para exercitar seu conhecimento:

http://www.vincehuston.org/dp/patterns_quiz.html

Anlise e Projeto OO com UML e Padres | 85

Vous aimerez peut-être aussi