Você está na página 1de 82

Introduo a Padres

Contexto
GUI / Comunicao

Arquitetura do Sistema
Fachada
ControladorLogin

TelaLogin

TelaPagamentoQualitiCard

NEGCIO

ControladorPagamentoQualitiCard

ContaInternet
Interfaces negcio-dados

CadastroContas Internet

CadastroPagamentosCartao

...

PagamentoCartao

IRepositorioContasInternet
DADOS

IRepositorioPagamentosCartao

RepositorioContasI nternetBDR

RepositorioContasI nternetArquivo

RepositorioPagamentos CartaoBDR

RepositorioPagamentos CartaoBDOO

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 possa ser reaplicado 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 Padres utilizam eficientemente herana, composio, modularidade, polimorfirmo e abstrao para construir cdigo reutilizvel, eficiente, de alta coeso e baixo acoplamento

Aprender boas prticas de programao

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? Descrio abstrata de um problema e como usar os elementos disponveis (classes e objetos) para solucion-lo Custos e benefcios de se aplicar o padro Impacto na flexibilidade, extensibilidade, portabilidade e eficincia do sistema

Soluo Conseqncias

Anlise e Projeto OO com UML e Padres | 8

Metforas no mundo real


State
Pessoas reagem de formas diferente de acordo com o humor.

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) Anlise e Projeto OOna comsoluo. UML e Padres |

Padres de Projeto GoF


Padres de Projeto/Design
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 Introduzidos no livro em 1994

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. 2. 3. 4. 5.
oferecer uma interface atribuir uma responsabilidade realizar a construo de classes ou objetos controlar formas de operao implementar uma extenso para a aplicao
Anlise e Projeto OO com UML e Padres | 13

23 Padres GoF Classificao por Propsito


Propsito

Criao Factory Method


Builder Abstract Factory Prototype Singlenton
Classe Escopo Objeto

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

** Classificao segundo GoF.

Anlise e Projeto OO com UML e Padres | 14

23 Padres GoF Classificao por Inteno

Inteno 1. Interfaces 3. Construo 2. Responsabilidade 4. Operaes 5. Extenses


Vistos em Sala

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

** 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 definir uma interface comum para objetos individuais e composies de objetos desacoplar uma abstrao de sua implementao para que ambos possam variar independentemente

Composite:

Bridge:
Faade:

oferecer uma interface simples para uma coleo de classes

Visto anteriormente

Anlise e Projeto OO com UML e Padres | 18

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

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

Relembrando o

slide com animao

Anlise e Projeto OO com UML e Padres | 20

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

Adapter Problema e Soluo


Problema
Cliente
operacao() Deseja utilizar
void operacao() { metodoEsperado(); }

Soluo
Adaptador metodoEsperado()
void metodoEsperado() { metodoUtil(); }

ClasseExistente
metodoUtil()

slide com animao

Anlise e Projeto OO com UML e Padres | 22

Object Adapter
<<interface>>

Cliente

Alvo operacao()
implementa

ClasseExistente
metodoUtil()

ClasseExistente ce; ... ce.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

Discusso
1.

2. 3. 4.

Voc consegue visualizar outra forma de criar adaptadores?


Quais as vantagens de sua abordagem?

Qual o escopo de um adaptador em termos das responsabilidades implementadas? Adaptadores bidirecionais Onde podemos usar adaptadores no QIB?

Anlise e Projeto OO com UML e Padres | 24

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

Composite Problema e Soluo


Problema
Cliente precisa tratar de maneira uniforme objetos individuais e composies desses objetos

Soluo
Tratar grupos e indivduos diferentes atravs de uma nica interface
Cliente Componente

Todos so componentes

Individuo

Grupo

Anlise e Projeto OO com UML e Padres | 26

Estrutura do Composite
:Composicao
:Composicao :Folha :Folha :Folha :Folha

:Folha

Cliente

Componente operacao()

1..*

Folha operacao()

Composio operacao() add(Componente) remove(Componente)

filhos for (int i=0; i<filhos.length; i++) { filho = filhos[i]; filho.operacao(); }

Anlise e Projeto OO com UML e Padres | 27

Resumo: quando usar?


Faade

- Simplificar o uso de uma coleo de objetos


- Adaptar uma interface existente para um cliente - Implementar um design que permita total
desacoplamento entre interface e implementao

Adapter Bridge

Composite

- Tratar composies e unidades uniformemente


Anlise e Projeto OO com UML e Padres | 29

PADRES QUE OFERECEM ALTERNATIVAS CONSTRUO DE OBJETOS


Anlise e Projeto OO com UML e Padres | 30

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

Padres que oferecem alternativas


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

construo de objetos

Anlise e Projeto OO com UML e Padres | 32

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

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

Poligono
desenha() cliente Forma desenha() Circulo desenha() Retangulo desenha()

Anlise e Projeto OO com UML e Padres | 34

Estrutura do Factory Method

cliente

Criador criarProduto()

Produto

CriadorConcreto criarProduto()

ProdutoConcreto

Anlise e Projeto OO com UML e Padres | 35

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

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

Anlise e Projeto OO com UML e Padres | 37

Estrutura
cliente FabricaAbstrata criarProdutoUm() criarProdutoDois() ProdutoUm ProdutoDois

FabricaConcretaA criarProdutoUm() criarProdutoDois() FabricaConcretaB criarProdutoUm() criarProdutoDois()

ProdutoUmA ProdutoDoisA ProdutoUmB ProdutoDoisB

Anlise e Projeto OO com UML e Padres | 38

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?

Anlise e Projeto OO com UML e Padres | 39

Quando usar?
Factory Method

Para isolar a classe concreta do produto criado da interface usada pelo cliente Para criar famlias inteiras de objetos que tm algo em comum sem especificar suas interfaces.

Abstract Factory

Prototype

Para criar objetos usando outro como base


Para armazenar o estado de um objeto sem quebrar o encapsulamento. O uso tpico deste padro na implementao de operaes de Undo. Para construir objetos complexos em vrias etapas e/ou que possuem representaes diferentes
Anlise e Projeto OO com UML e Padres | 40

Memento

Builder

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

PADRES ASSOCIADOS A DISTRIBUIO DE RESPONSABILIDADES


Anlise e Projeto OO com UML e Padres | 42

Distribuio de responsabilidades
Singleton: centraliza a responsabilidade em uma nica
instncia de uma classe

Padres associados a

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

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

Estrutura do Singlenton
Objeto com acesso privado Construtor privado Ponto de acesso esttico e global

Singlenton - dados -instancia : null - Singlenton () + getInstancia() +getDados()

public static synchronized Singlenton getInstancia() { if (instancia == null) { instancia = new Singlenton(); } return instancia; }

Lazy inicializatiom idiom


Anlise e Projeto OO com UML e Padres | 45

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.

Anlise e Projeto OO com UML e Padres | 46

Observer
Problema:

registra-se altera

notifica

tempo

slide com animao

Anlise e Projeto OO com UML e Padres | 47

Estrutura do Observer
for(int i =0; i < obs.lenght; i++){ obs[i].atualizar(); }

Sujeito - obs: Observador[] cadastrar(Observador) remover(Observador) notificar()

<<interface> Observador atualizar()

SujeitoConcreto - dados + getDados() + setDados()

ObservadorConcreto - conc: SujeitoConcreto - dadosObservados + atualizar()

dadosObservados = conc.getDados();
Anlise e Projeto OO com UML e Padres | 48

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

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

Estrutura do Chain of Responsability


cliente <<interface> Processador processarRequisicao()

ProcessadorConcreto1 - sucessor: Processador processarRequisicao()

ProcessadorConcreto2 - sucessor: Processador


processarRequisicao()
sucesso.processarRequisicao()

...
ProcessadorConcretoN processarRequisicao()

Anlise e Projeto OO com UML e Padres | 51

Discusso
1.

Qual a diferena entre:


Singleton e Faade? Chain of Responsibility e Adapter? Todos os objetos deveriam ser Singleton? Singleton 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?

2.

Na sua opnio:

Anlise e Projeto OO com UML e Padres | 52

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

PADRES QUE LIDAM COM FORMAS DE IMPLEMENTAR OPERAES E ALGORITMOS


Anlise e Projeto OO com UML e Padres | 54

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 distribui uma operao para que cada classe represente um estado diferente; encapsula um estado

State:

Strategy:

encapsula um algoritmo fazendo com que as implementaes sejam intercambiveis


encapsula uma instruo em um objeto 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 | 55

Command: Interpreter:

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

Problema/Soluo
ClasseAbstrata void concreto(){ ... parteUm(); ... parteDois(); } abstract void parteUm(); abstract void parteDois(); algoritmo lacunas: parteUm

parteDois

ClasseConcretaA parteUm(); parteDois();

ClasseConcretaB parteUm(); parteDois();

Algoritmo resultantes:

Anlise e Projeto OO com UML e Padres | 57

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.

Anlise e Projeto OO com UML e Padres | 58

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

Anlise e Projeto OO com UML e Padres | 59

Estrutura
Contexto estado: Estado requisio()
estado.processar();

<interface> 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 | 60 do contexto.

Exemplo
TCPConnection open() close() acknowledge()
TCPState open() close() acknowledge()

TCPEstablished open() close() acknowledge()

TCPListen open() close() acknowledge()

TCPClosed 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 | 61

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

Problema

Anlise e Projeto OO com UML e Padres | 63

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

Comando executar()

ComandoConcretoA executar()

ComandoConcretoB executar()

receptor.acao()

ReceptorA aoA()

ReceptorB aoB()

Anlise e Projeto OO com UML e Padres | 64

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

Discusso
1. 2.

Qual a diferena entre State e Command? Sobre State, voc consegue imaginar alguma implementao alternativa que:

Evite que cada estado concreto tenha que implementar mtodos no suportados neste estado; O contexto no est ciente das transies entre estados.

Anlise e Projeto OO com UML e Padres | 66

Interpreter
Objetivo segundo GoF:

Ver www.cin.ufpe.br/~in1007/linguagens

Anlise e Projeto OO com UML e Padres | 67

quando usar?
Template Method

Para compor um algoritmo feito por mtodos abstratos que podem ser completados em subclasses Para representar o estado de um objeto Para representar um comando (ao imperativa do cliente) Para representar um algoritmo (comportamento) Para realizar composio com comandos e desenvolver uma linguagem de programao usando objetos
Anlise e Projeto OO com UML e Padres | 68

State Command Strategy Interpreter

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

PADRES QUE PERMITEM ACRESCENTAR COMPORTAMENTOS


Anlise e Projeto OO com UML e Padres | 70

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)

Desenvolvimento em Java sempre uma forma de extenso

Extenso comea onde o reuso termina

Anlise e Projeto OO com UML e Padres | 71

Exemplo de Extenso por Delegao

Anlise e Projeto OO com UML e Padres | 72

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 carregada. Visitor: permite a adio de novas operaes a uma classe sem mudar a classe.

Anlise e Projeto OO com UML e Padres | 73

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

Estrutura
Componente operacao()

ComponenteConcreto operacao()

Decorador operacao()
component.operacao();

DecoradorConcretoA estadoAdicional operacao()

DecoradorConcretoB comportamentoAdicional() operacao()


super.operacao(); comportamentoAdicional();
Anlise e Projeto OO com UML e Padres | 75

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

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

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

Problema
Tipo genrico

Iterator

Coleo arbitrria de objetos (array, hashmap, lista, conjunto, pilha, tabela, ...)

Anlise e Projeto OO com UML e Padres | 79

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(); }
Anlise e Projeto OO com UML e Padres | 80

iterator() um exemplo de Factory Method

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

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

Quis sobre padres


Para exercitar seu conhecimento:
http://www.vincehuston.org/dp/patterns_quiz.html

Anlise e Projeto OO com UML e Padres | 83

Você também pode gostar