You are on page 1of 40

08/09/2009

Introduo a Padres

Contexto
GUI / Comunicao

Arquitetura do Sistema
NEGCIO

TelaLogin

TelaPagamentoQualitiCard

Fachada ControladorLogin 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

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

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

08/09/2009

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 o conhecimento existente de uma forma que possa 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

08/09/2009

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

08/09/2009

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) na soluo. | Anlise e Projeto OO com 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 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

Introduzidos no livro em 1994

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, ...

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

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

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

Factory Method Builder Abstract Factory Prototype Singlenton

** Classificao segundo GoF.

Anlise e Projeto OO com UML e Padres | 14

08/09/2009

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

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

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 anteriormente

Anlise e Projeto OO com UML e Padres | 18

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.

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

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.

Anlise e Projeto OO com UML e Padres | 21

Adapter Problema e Soluo


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

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

slide com animao

Anlise e Projeto OO com UML e Padres | 22

11

08/09/2009

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

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

12

08/09/2009

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

Todos so componentes

Cliente Componente

Individuo

Grupo

Anlise e Projeto OO com UML e Padres | 25

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

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.

Anlise e Projeto OO com UML e Padres | 27

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

14

08/09/2009

PADRES QUE OFERECEM ALTERNATIVAS CONSTRUO DE OBJETOS


Anlise e Projeto OO com UML e Padres | 29

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

15

08/09/2009

Padres que oferecem alternativas

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.

Anlise e Projeto OO com UML e Padres | 32

16

08/09/2009

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() Forma cliente desenha() Circulo desenha() Retangulo desenha()

Anlise e Projeto OO com UML e Padres | 33

Estrutura do Factory Method

cliente

Criador criarProduto()

Produto

CriadorConcreto criarProduto()

ProdutoConcreto

Anlise e Projeto OO com UML e Padres | 34

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.

Anlise e Projeto OO com UML e Padres | 35

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

Anlise e Projeto OO com UML e Padres | 36

18

08/09/2009

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

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

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

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

20

08/09/2009

PADRES ASSOCIADOS A DISTRIBUIO DE RESPONSABILIDADES


Anlise e Projeto OO com UML e Padres | 41

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 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; }

Lazy inicializatiom idiom


Anlise e Projeto OO com UML e Padres | 44

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.

Anlise e Projeto OO com UML e Padres | 45

Observer
Problema:

registra-se altera

notifica

tempo

slide com animao

Anlise e Projeto OO com UML e Padres | 46

23

08/09/2009

Estrutura de 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()

SujeitoConcreto - conc: SujeitoConcreto - dadosObservados + 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.

Anlise e Projeto OO com UML e Padres | 48

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

Filme: O Grande Dave, Estrelado por Eddie Murphy

Anlise e Projeto OO com UML e Padres | 49

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

25

08/09/2009

Discusso
1.

Qual a diferena entre:


Singleton e Faade? Chain of Responsibility e Adapter?

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?

Anlise e Projeto OO com UML e Padres | 51

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

26

08/09/2009

PADRES QUE PERMITEM ACRESCENTAR COMPORTAMENTOS


Anlise e Projeto OO com UML e Padres | 53

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

27

08/09/2009

Exemplo de Extenso por Delegao

Anlise e Projeto OO com UML e Padres | 55

Padres que permitem acrescentar comportamentos


Padres que permitem acrescentar comportamentos em um objeto sem mudar sua classe
Command (captulo anterior) Template Method (captulo anterior) 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 | 56

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.

Anlise e Projeto OO com UML e Padres | 57

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

29

08/09/2009

Exemplo: I/O Streams

// 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();

Anlise e Projeto OO com UML e Padres | 60

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.

Anlise e Projeto OO com UML e Padres | 61

Problema
Tipo genrico

Iterator

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

Anlise e Projeto OO com UML e Padres | 62

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(); }

iterator() um exemplo de Factory Method


Anlise e Projeto OO com UML e Padres | 63

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

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

PADRES QUE LIDAM COM FORMAS DE IMPLEMENTAR OPERAES E ALGORITMOS


Anlise e Projeto OO com UML e Padres | 66

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

Assinatura: descreve uma operao com um nome, parmetros e


tipo de retorno. Exemplo: public String toString()

Algoritmo: uma seqncia de instrues que aceita entradas e


produz sada. Pode ser um mtodo, parte de um mtodo ou pode consistir de vrios mtodos.

Anlise e Projeto OO com UML e Padres | 67

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

Anlise e Projeto OO com UML e Padres | 69

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

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.

Anlise e Projeto OO com UML e Padres | 71

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

36

08/09/2009

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 | 73 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 | 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.

Anlise e Projeto OO com UML e Padres | 75

Problema

Anlise e Projeto OO com UML e Padres | 76

38

08/09/2009

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

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.

Anlise e Projeto OO com UML e Padres | 78

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

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

40

You might also like