introdução a padrões. contexto arquitetura do sistema análise e projeto oo com uml e padrões |...

84
Introdução a Padrões

Upload: luisa-bennert-olivares

Post on 07-Apr-2016

228 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Introdução a Padrões

Page 2: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Contexto• Arquitetura do Sistema

Análise e Projeto OO com UML e Padrões | 2

GUI / Comunicação

NEGÓCIO

Interfaces negócio-dados

DADOS

Fachada

TelaLogin TelaPagamentoQualitiCard

ControladorLogin ControladorPagamentoQualitiCard

CadastroPagamentosCartao...

ContaInternet PagamentoCartao

IRepositorioContasInternet IRepositorioPagamentosCartao

RepositorioPagamentosCartaoBDR

RepositorioPagamentosCartaoBDOO

RepositorioContasInternetBDR

RepositorioContasInternetArquivo

CadastroContasInternet

Page 3: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Evolução de Software“Grandes sistemas de software nunca são concluídos; eles

simplesmente continuam evoluindo” [Lehman]

• Motivos e conseqüências (algumas Leis de Lehman)– Mudança Contínua e Crescimento Contínuo

• Mudanças são inevitáveis para que o software continue útil• Adição de funcionalidades para manter a satisfação do usuário

– Complexidade Crescente e Qualidade Decrescente• Mudanças aumentam a complexidade do software• Qualidade diminui a não ser que haja adaptações

Análise e Projeto OO com UML e Padrões | 3

Page 4: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Como devemos proceder?

Pensar antes de agir!

Algumas ações:– Analisar impactos– Modelar, antes de codificar– Utilizar soluções e técnicas validadas

• Não reinventar a roda!

Análise e Projeto OO com UML e Padrões | 4

Page 5: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões em outras Engenharias“Cada padrão descreve um problema que ocorre repetidas vezes em nosso ambiente, e então descreve o núcleo da solução para aquele problema, de tal maneira que pode-se usar essa solução milhões de vezes sem nunca fazê-la da mesma forma duas vezes”

Christopher Alexander, sobre padrões em Arquitetura

Análise e Projeto OO com UML e Padrões | 5

Page 6: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões de Projeto / Design Patterns

• Soluções (validadas) para alcançar objetivos na engenharia de software usando linguagens O-O– Registram conhecimento existente de forma que possam ser

reaplicados em vários contextos

“Os padrões de projeto são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico de design em um contexto específico”

Gamma, Helm, Vlissides & Johnson, sobre padrões em software

Análise e Projeto OO com UML e Padrões | 6

Page 7: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Por que aprender padrões?• Aprender com a experiência dos outros

– identificar problemas comuns em engenharia de software– utilizar soluções testadas e bem documentadas

• Aprender boas práticas de programação– Padrões utilizam eficientemente herança, composição,

modularidade, polimorfirmo e abstração para construir código reutilizável, eficiente, de alta coesão e baixo acoplamento

• Ter um caminho e um alvo para refatorações• Facilita a comunicação, compreensão e documentação

– Vocabulário comum– Ajuda a entender o papel de classes do sistemas

Análise e Projeto OO com UML e Padrões | 7

Page 8: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Elementos de um padrão• Nome• Problema

– Quando aplicar o padrão, em que condições?

• Solução– Descrição abstrata de um problema e como usar os elementos

disponíveis (classes e objetos) para solucioná-lo

• Conseqüências– Custos e benefícios de se aplicar o padrão– Impacto na flexibilidade, extensibilidade, portabilidade e eficiência do

sistema

Análise e Projeto OO com UML e Padrões | 8

Page 9: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Metáforas no mundo realStatePessoas reagem de formas diferente de acordo com o humor.

ObserverJornais são entregues aos seus assinantes .

Análise e Projeto OO com UML e Padrões | 9

Chain of ResponsabilityChefe delega responsabilidade a um subordinado, que delega a outro, que ...

Padrões são formados por vários objetos.Cada objeto tem um papel (responsabilidade) na solução.

Page 10: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões de Projeto GoF

Padrões de Projeto/Design• Descreve 23 padrões• soluções genéricas para os problemas mais

comuns do desenvolvimento de software orientado a objetos

• obtidas através de experiências de sucesso na indústria de software

• Sobre o livro– Seus quatro autores são conhecidos como

"The Gang of Four” (GoF)– O livro tornou-se um clássico na literatura

orientada a objetos e continua atual

Introduzidos no livro em 1994

Análise e Projeto OO com UML e Padrões | 10

Page 11: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Mais padrões?

• Há vários catálogos de padrões para software– Muitos são específicos a uma determinada área• padrões J2EE • padrões de implementação Java ou C# • padrões para concorrência• padrões para distribuição• ...

– Os padrões apresentados aqui são aplicáveis em Java e outras linguagens O-O

Análise e Projeto OO com UML e Padrões | 11

Page 12: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões de Projeto

Page 13: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Formas de classificaçãoHá várias formas de classificar os padrões• Os padrões GoF são tradicionalmente classificados pelo

propósito:1. criação de classes e objetos2. alteração da estrutura de um programa 3. controle do seu comportamento

• Metsker os classifica em 5 grupos, por intenção1. oferecer uma interface2. atribuir uma responsabilidade 3. realizar a construção de classes ou objetos4. controlar formas de operação5. implementar uma extensão para a aplicação

Análise e Projeto OO com UML e Padrões | 13

Page 14: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

23 Padrões GoF Classificação por Propósito

Análise e Projeto OO com UML e Padrões | 14** Classificação segundo GoF.

Page 15: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

23 Padrões GoF Classificação por Intenção

Intenção Padrões

1. Interfaces Adapter, Facade, Composite, Bridge

3. Construção Factory Method, Abstract Factory, Builder, Prototype, Memento

2. Responsabilidade Singleton, Observer, Chain of Responsibility,Mediator, Proxy, Flyweight

4. Operações Template Method, State, Command, Strategy,Interpreter

5. Extensões Iterator,Decorator, Visitor

Análise e Projeto OO com UML e Padrões | 15** Classificação segundo Steven Metsker, Design Patterns Java Workbook, 2002.

Vistos em Sala Vistos Anteriormente Praticados nos próximos exercícios

Page 16: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

PADRÕES RELACIONADOS A INTERFACES

Análise e Projeto OO com UML e Padrões | 16

Page 17: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Interface• Interface:

– coleção de métodos e constantes que uma classe permite que objetos de outras classes acessem

– Exigem que a classe que implementa a interface ofereça implementação para seus métodos

– Não garante que métodos terão implementação que efetue alguma computação: stubs

Análise e Projeto OO com UML e Padrões | 17

Page 18: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões 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 composições

de objetos

• Bridge: – desacoplar uma abstração de sua implementação para que ambos

possam variar independentemente

• Façade: – oferecer uma interface simples para uma coleção de classes

Análise e Projeto OO com UML e Padrões | 18

Visto anteriormente

Page 19: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Fachada• Objetivo segundo o GoF:– “oferecer uma interface única para um conjunto

de interfaces de um subsistema.”– “Façade define uma interface de nível mais

elevado que torna o subsistema mais fácil de usar.”

Análise e Projeto OO com UML e Padrões | 19

Page 20: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Relembrando o Padrão Façade

Análise e Projeto OO com UML e Padrões | 20

Cliente precisa saber muitos detalhes do subsistema para utilizá-lo!

Crie uma fachada!

slide comanimação

Page 21: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Discussão1. Leia sobre o padrão Bridge e destaque em que contexto

usamos uma variação deste padrão na arquitetura do QIB. Analise também a diferença entre o Bridge e o uso feito no QIB. Por que o Bridge é mais geral?

Análise e Projeto OO com UML e Padrões | 21

Page 22: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Adapter

• Objetivo segundo o GoF:– “converter a interface de uma classe em outra

interface esperada pelos clientes.”– “Adapter permite a comunicação entre classes

que não poderiam trabalhar juntas devido à incompatibilidade de suas interfaces.”

Análise e Projeto OO com UML e Padrões | 22

Page 23: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Adapter Problema e Solução

Problema Solução

Análise e Projeto OO com UML e Padrões | 23

Clienteoperacao()

ClasseExistentemetodoUtil()

void operacao() { metodoEsperado();}

AdaptadormetodoEsperado()

void metodoEsperado() { metodoUtil();}

Deseja utilizar

slide comanimação

Page 24: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Object Adapter

• Cliente: aplicação que colabora com objetos que implementam Alvo• Alvo: define a interface requerida pelo Cliente• ClasseExistente: classe dos objetos que requerem adaptação• Adaptador: adapta a interface do Recurso à interface Alvo

Análise e Projeto OO com UML e Padrões | 24

<<interface>>Alvo

operacao()Cliente

Adaptador

operacao()

ClasseExistente ce;...ce.metodoUtil();

implementa

Page 25: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Discussão1. 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 bidirecionais4. Onde podemos usar adaptadores no QIB?

Análise e Projeto OO com UML e Padrões | 25

Page 26: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Composite

• Objetivo segundo o GoF:– “Compor objetos em estruturas de árvore para

representar hierarquias todo-parte.”– “Composite permite que clientes tratem objetos

individuais e composições de objetos de maneira uniforme.”

Análise e Projeto OO com UML e Padrões | 26

Page 27: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Composite Problema e Solução

Problema• Cliente precisa tratar de maneira

uniforme objetos individuais e composições desses objetos

Solução• Tratar grupos e indivíduos

diferentes através de uma única interface

Análise e Projeto OO com UML e Padrões | 27

Cliente

Componente

Individuo Grupo

Todos são componentes

Page 28: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura do Composite

Análise e Projeto OO com UML e Padrões | 28

ClienteComponente

operacao()

Folhaoperacao()

Composição

operacao()add(Componente) remove(Componente)

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

filhos

1..*

:Composicao

:Composicao :Folha :Folha

:Folha:Folha :Folha

Page 29: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Resumo: quando usar?• Façade– Simplificar o uso de uma coleção de objetos

• Adapter– Adaptar uma interface existente para um cliente

• Bridge– Implementar um design que permita total

desacoplamento entre interface e implementação• Composite– Tratar composições e unidades uniformemente

Análise e Projeto OO com UML e Padrões | 30

Page 30: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

PADRÕES QUE OFERECEM ALTERNATIVAS À CONSTRUÇÃO DE OBJETOS

Análise e Projeto OO com UML e Padrões | 31

Page 31: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Construtores• Alguns problemas em depender de construtores

– Cliente pode não ter todos os dados necessários para instanciar um objeto

– Cliente fica acoplado a uma implementação concreta (precisa saber a classe concreta para usar new com o construtor)

– Objeto complexo pode necessitar da criação de objetos menores previamente, com certo controle difícil de implementar com construtores

– Não há como limitar o número de instâncias criadas

Análise e Projeto OO com UML e Padrões | 32

Page 32: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões que oferecem alternativas à construção de objetos

• Factory Method: adia a decisão sobre qual classe concreta instanciar

• Abstract Factory: constuir uma família de objetos relacionados• Prototype: especificar a criação de um objeto a partir de um

exemplo (modelo) fornecido• Memento: reconstruir um objeto a partir de uma versão que

contém apenas seu estado interno• Builder: Separa a criação de um objeto de sua representação

Análise e Projeto OO com UML e Padrões | 33

Page 33: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

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 instanciação às subclasses.”

Análise e Projeto OO com UML e Padrões | 34

Page 34: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Fabrica

Funcionamento de uma Fábrica• Problema:

– O acesso a um objeto concreto será feito através da interface conhecida através de sua superclasse, mas o cliente também não quer (ou não pode) saber qual implementação concreta estará utilizando

Análise e Projeto OO com UML e Padrões | 35

Forma

desenha()

Poligono

desenha()

Retangulo

desenha()

Circulo

desenha()

cliente

Page 35: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura do Factory Method

Análise e Projeto OO com UML e Padrões | 36

Criador

criarProduto()

CriadorConcreto

criarProduto()

Produto

ProdutoConcreto

cliente

Page 36: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Abstract Factory

• Objetivo segundo o GoF:– “Prover uma interface para criar famílias de

objetos relacionados ou dependentes sem especificar suas classes concretas.”

Análise e Projeto OO com UML e Padrões | 37

Page 37: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Problema• Criar uma família de objetos relacionados sem conhecer

suas classes concretas

Análise e Projeto OO com UML e Padrões | 38

Page 38: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura

Análise e Projeto OO com UML e Padrões | 39

FabricaAbstrata

criarProdutoUm()criarProdutoDois()

ProdutoUmcliente

ProdutoDois

FabricaConcretaA

criarProdutoUm()criarProdutoDois()

FabricaConcretaB

criarProdutoUm()criarProdutoDois()

ProdutoUmA

ProdutoDoisA

ProdutoUmB

ProdutoDoisB

Page 39: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Discussão1. Qual a diferença entre Factory Method e Abstract

Factory?2. É possível o cliente solicitar a criação de um objeto sem

ter conhecimento algum de sua classe concreta?– Que possíveis formas você enxerga para implementar isto?

Análise e Projeto OO com UML e Padrões | 40

Page 40: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Quando usar?• Factory Method

– Para isolar a classe concreta do produto criado da interface usada pelo cliente• Abstract Factory

– Para criar famílias inteiras de objetos que têm 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

típico deste padrão é na implementação de operações de Undo.• Builder

– Para construir objetos complexos em várias etapas e/ou que possuem representações diferentes

Análise e Projeto OO com UML e Padrões | 41

Page 41: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Exercício – Qualiti Internet Banking• Dado:

– A arquitetura do sistema modelada no exercício anterior

• Refatorar o Projeto para:– Permitir flexibilidade na mudança do mecanismo de persistência (BDR

ou XML)– Uniformizar as diversas interfaces de operadoras de cartão (visa,

master, etc) no subsistema OperadoraCartão

Análise e Projeto OO com UML e Padrões | 42

Dica: utilize os padrõesAdapter e Abstract Factory.

Page 42: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

PADRÕES ASSOCIADOS À DISTRIBUIÇÃO DE RESPONSABILIDADES

Análise e Projeto OO com UML e Padrões | 43

Page 43: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões associados à Distribuição de responsabilidades

• Singleton: centraliza a responsabilidade em uma única instância 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 requisição 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)

Análise e Projeto OO com UML e Padrões | 44

Page 44: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Singleton

• Objetivo segundo o GoF:– “Garantir que uma classe tenha uma única instância, e

prover um ponto de acesso global a ela.”• independente do número de requisições que receber para

criá-lo

• Aplicações– Um único banco de dados– Um único arquivo de log– Um único objeto que representa um vídeo– Uma única fachada (Façade pattern)

Análise e Projeto OO com UML e Padrões | 45

Page 45: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura do Singlenton

Análise e Projeto OO com UML e Padrões | 46

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

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

Objeto com acesso privado Construtor privado

Ponto de acesso estático e global

Lazy inicializatiom idiom

Page 46: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Observer

• Objetivo segundo o GoF:– “Definir uma dependência um-para-muitos entre

objetos de forma que, quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente.”

Análise e Projeto OO com UML e Padrões | 47

Page 47: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Observer

Análise e Projeto OO com UML e Padrões | 48

registra-se

altera

notifica

tempo

Problema:

slide comanimação

Page 48: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura do Observer

Análise e Projeto OO com UML e Padrões | 49

<<interface>Observador

atualizar()

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

SujeitoConcreto- dados+ getDados()+ setDados()

ObservadorConcreto- conc: SujeitoConcreto - dadosObservados+ atualizar()

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

dadosObservados = conc.getDados();

Page 49: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Chain of Responsibility• Objetivo segundo o GoF:

– "Evita acoplar o remetente de uma requisição ao seu destinatário ao dar a mais de um objeto a chance de servir a requisição.”

– “Compõe os objetos em cascata e passa a requisição pela corrente até que um objeto a sirva.”

Análise e Projeto OO com UML e Padrões | 50

Page 50: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Chain of Responsability• Problema– Permitir que vários objetos

possam servir a uma requisição ou repassá-la

– Permitir divisão de responsabilidades de forma transparente

Análise e Projeto OO com UML e Padrões | 51

Filme: O Grande Dave,Estrelado por Eddie Murphy

Page 51: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura do Chain of Responsability

Análise e Projeto OO com UML e Padrões | 52

<<interface>Processador

processarRequisicao()

ProcessadorConcreto1- sucessor: ProcessadorprocessarRequisicao()

ProcessadorConcretoN

processarRequisicao()

ProcessadorConcreto2- sucessor: ProcessadorprocessarRequisicao()

...

cliente

sucessor.processarRequisicao()

Page 52: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Discussão1. Qual a diferença entre:

– Singleton e Façade?– Chain of Responsibility e Adapter?

2. Na sua opnião:– Todos os objetos deveriam ser Singleton?– Singleton estaria indiretamente introduzindo variáveis globais? Isto é

bom ou ruim?

Análise e Projeto OO com UML e Padrões | 53

Page 53: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Quando usar?• Singleton: quando apenas uma instância for permitida

• Observer: quando houver necessidade de notificação automática

• Chain of Responsibility: quando uma requisição puder ou precisar ser tratada por um ou mais entre vários objetos

• Mediator: para controlar a interação entre dois objetos independentes

• Proxy: quando for preciso um intermediário para o objeto real

• Flyweight: quando for necessário reutilizar objetos visando performance (cuidado com o efeito oposto!)

Análise e Projeto OO com UML e Padrões | 54

Page 54: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

PADRÕES QUE LIDAM COM FORMAS DE IMPLEMENTAR OPERAÇÕES E ALGORITMOS

Análise e Projeto OO com UML e Padrões | 55

Page 55: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões que lidam com formas de implementar operações e algoritmos

• Template Method: – implementa um algoritmo em um método adiando a definição de alguns

passos do algoritmo para que subclasses possam defini-los• State:

– distribui uma operação para que cada classe represente um estado diferente; encapsula um estado

• Strategy: – encapsula um algoritmo fazendo com que as implementações sejam

intercambiáveis• Command:

– encapsula uma instrução em um objeto• Interpreter:

– distribui uma operação de tal forma que cada implementação se aplique a um tipo de composição diferente

Análise e Projeto OO com UML e Padrões | 56

Page 56: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Template Method

• Objetivo segundo o GoF:– “Definir o esqueleto de um algoritmo dentro de

uma operação, deixando alguns passos a serem preenchidos pelas subclasses.”

– “Template Method permite que suas subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura.”

Análise e Projeto OO com UML e Padrões | 57

Page 57: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Problema/Solução

Análise e Projeto OO com UML e Padrões | 58

ClasseAbstrata

void concreto(){ ... parteUm(); ... parteDois();}abstract void parteUm();abstract void parteDois();

ClasseConcretaA

parteUm();parteDois();

ClasseConcretaB

parteUm();parteDois();

algoritmo

parteUm

parteDois

Algoritmo resultantes:

lacunas:

Page 58: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

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

Análise e Projeto OO com UML e Padrões | 59

Page 59: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Problema• Cenário Atual:

– :Objeto• OperaçãoIf(estado == desconectado){façaIsto();} else if (estado == conectado){falaAquilo();} else { faça();}

• Desejado:– estado.faça();

Análise e Projeto OO com UML e Padrões | 60

Desconectado

Conectado

Transmitindo

Desejamos usar objetos para representar estados e polimorfismo para tornar a execução de tarefas

dependentes de estado transparentes

Page 60: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura

• Contexto: define uma interface de interesse ao cliente, delegando suas requisições ao estado corrente.

• Estado: define uma interface para encapsular o comportamento de todos os estados.

• EstadoConcreto: implementa o comportamento associado ao estado do contexto.

Análise e Projeto OO com UML e Padrões | 61

EstadoConcretoUm

processar()

EstadoConcretoDois

processar()

Contextoestado: Estadorequisição()

estado.processar();

<interface>Estado

processar()

Page 61: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Exemplo

Análise e Projeto OO com UML e Padrões | 62

TCPEstablished

open()close()acknowledge()

TCPConnection

open()close()acknowledge()

TCPClosed

open()close()acknowledge()

TCPState

open()close()acknowledge()

TCPListen

open()close()acknowledge()

Sempre que a aplicação mudar de estado, o objeto TCPConnection muda o objeto TCPState que está usando

Page 62: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Command

• Objetivo segundo GoF:– “Encapsular uma requisição como um objeto,

permitindo que clientes parametrizem diferentes requisições, filas ou requisições de log, e suportar operações reversíveis.”

Análise e Projeto OO com UML e Padrões | 63

Page 63: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Problema

Análise e Projeto OO com UML e Padrões | 64

Page 64: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura

Análise e Projeto OO com UML e Padrões | 65

Comando

executar()

ComandoConcretoA

executar()

ComandoConcretoB

executar()

Executorcmd: Comandoexecutar()

ReceptorA

açãoA()

ReceptorB

açãoB()

receptor.acao()

cmd.executar ()

Page 65: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Conseqüências

• Desacopla o invocador do receptor• São objetos; podem ser manipulados e

estendidos• Fácil adicionar novos comandos• Comandos compostos podem ser criados

usando o padrão Composite

Análise e Projeto OO com UML e Padrões | 66

Page 66: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Discussão1. Qual a diferença entre State e Command?

Análise e Projeto OO com UML e Padrões | 67

Page 67: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Interpreter

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

Análise e Projeto OO com UML e Padrões | 68

Page 68: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

quando usar?• Template Method

– Para compor um algoritmo feito por métodos abstratos que podem ser completados em subclasses

• State– Para representar o estado de um objeto

• Command– Para representar um comando (ação imperativa do cliente)

• Strategy– Para representar um algoritmo (comportamento)

• Interpreter– Para realizar composição com comandos e desenvolver uma

linguagem de programação usando objetos

Análise e Projeto OO com UML e Padrões | 69

Page 69: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Exercício – Qualiti Internet Banking• Dado:

– A arquitetura do sistema modelada no exercício anterior

• Modelar o Caso de Uso de Agendamento:– Produzir diagramas de Análise– Introduzir caso de uso à arquitetura

Análise e Projeto OO com UML e Padrões | 70

Dica: utilize o padrãoCommand em sua resposta

Page 70: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

PADRÕES QUE PERMITEM ACRESCENTAR COMPORTAMENTOS

Análise e Projeto OO com UML e Padrões | 71

Page 71: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Extensões• Extensão é a adição de uma classe, interface ou método a

uma base de código existente• Formas de extensão

– Herança (criação de novas classes)– Delegação (para herdar de duas classes, pode-se estender uma classe

e usar delegação para "herdar" o comportamento da outra classe)

• Desenvolvimento em Java é sempre uma forma de extensão– Extensão começa onde o reuso termina

Análise e Projeto OO com UML e Padrões | 72

Page 72: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Exemplo de Extensão por Delegação

Análise e Projeto OO com UML e Padrões | 73

Page 73: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Padrões que permitem acrescentar comportamentos

• Padrões 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 coleção de instâncias

de uma classe– Visitor: permite a adição de novas operações a uma classe sem mudar

a classe

Análise e Projeto OO com UML e Padrões | 74

Page 74: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Decorator

• Objetivo segundo GoF:– “Anexar responsabilidades adicionais a um objeto

dinamicamente.” – “Decorators oferecem uma alternativa flexível ao

uso de herança para estender uma funcionalidade.”

Análise e Projeto OO com UML e Padrões | 75

Page 75: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Estrutura

Análise e Projeto OO com UML e Padrões | 76

Decorador

operacao()

ComponenteConcreto

operacao()

DecoradorConcretoAestadoAdicionaloperacao()

DecoradorConcretoB

comportamentoAdicional()operacao()

Componente

operacao()

component.operacao();

super.operacao();comportamentoAdicional();

Page 76: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Exemplo

• Toolkit de interface gráfica– Texto - componente concreto– Texto com bordas - decorator– Texto com bordas e barra de rolagem - decorator

Análise e Projeto OO com UML e Padrões | 77

Page 77: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Conseqüências

• Mais flexibildade que herança estática• Modelo tende a ficar mais simples e uniforme• Entretanto– Apesar de um decorator e o componente serem

do mesmo tipo, não são o mesmo objeto– Proliferação de “pequenos” objetos que

implementam as extensões

Qual a diferença entre o Decorator Adaptador?

Análise e Projeto OO com UML e Padrões | 78

Page 78: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Iterator

• Objetivo de acordo com o GoF:– “Prover uma maneira de acessar os elementos de

um objeto agregado seqüencialmente sem expor sua representação interna.”

Análise e Projeto OO com UML e Padrões | 79

Page 79: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Problema

Análise e Projeto OO com UML e Padrões | 80

Coleção arbitrária de objetos(array, hashmap, lista, conjunto,

pilha, tabela, ...)IteratorTipo genérico

Page 80: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Iterator• Iterators servem para acessar o conteúdo de um agregado (coleções, arrays,

etc) sem expor sua representação interna• Oferece uma interface uniforme para percorrer diferentes estruturas

agregadas• Em Java, Iterators são implementados nas coleções. É obtido através do

método iterator() de Collection, que devolve uma instância 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

Análise e Projeto OO com UML e Padrões | 81

Page 81: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Discussão1. Qual a estrutura do diagrama de classes de forma a permitir

iteração polimórfica?

Análise e Projeto OO com UML e Padrões | 82

Page 82: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

quando usar?

• Decorator– Para acrescentar recursos e comportamento a um

objeto existente, receber sua entrada e poder manipular sua saída.

• Iterator– Para navegar em uma coleção elemento por elemento

• Visitor– Para estender uma aplicação com novas operações

sem que seja necessário mexer na interface existente.

Análise e Projeto OO com UML e Padrões | 83

Page 83: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Exercício – Qualiti Internet Banking• Dado:

– A arquitetura do sistema modelada no exercício anterior

• Modelar o Caso de Uso Configurar Conta:– Produzir diagramas de Análise– Introduzir caso de uso à arquitetura

Análise e Projeto OO com UML e Padrões | 84

Dica: utilize os padrõesComposite, Observer e Decorator.

Page 84: Introdução a Padrões. Contexto Arquitetura do Sistema Análise e Projeto OO com UML e Padrões | 2 GUI / Comunicação NEGÓCIO Interfaces negócio-dados DADOS

Quiz sobre padrões• Para exercitar seu conhecimento:

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

Análise e Projeto OO com UML e Padrões | 85