Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Evoluo de Software
Grandes sistemas de software nunca so concludos; eles simplesmente continuam evoluindo [Lehman] Motivos e conseqncias (algumas Leis de Lehman)
Algumas aes:
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
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
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
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 |
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
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
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
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
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:
Visto anteriormente
Fachada
Objetivo segundo o GoF:
Padro Faade
Cliente precisa saber muitos detalhes do subsistema para utiliz-lo! Crie uma fachada!
Relembrando o
Adapter
Objetivo segundo o GoF:
Soluo
Adaptador metodoEsperado()
void metodoEsperado() { metodoUtil(); }
ClasseExistente
metodoUtil()
Object Adapter
<<interface>>
Cliente
Alvo operacao()
implementa
ClasseExistente
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.
Qual o escopo de um adaptador em termos das responsabilidades implementadas? Adaptadores bidirecionais Onde podemos usar adaptadores no QIB?
Composite
Objetivo segundo o GoF:
representar hierarquias todo-parte. Composite permite que clientes tratem objetos individuais e composies de objetos de maneira uniforme.
Soluo
Tratar grupos e indivduos diferentes atravs de uma nica interface
Cliente Componente
Todos so componentes
Individuo
Grupo
Estrutura do Composite
:Composicao
:Composicao :Folha :Folha :Folha :Folha
:Folha
Cliente
Componente operacao()
1..*
Folha operacao()
Adapter Bridge
Composite
Construtores
Alguns problemas em depender de construtores
Cliente pode no ter todos os dados necessrios para instanciar um objeto Cliente fica acoplado a uma implementao concreta (precisa saber a classe concreta para usar new com o construtor) Objeto complexo pode necessitar da criao de objetos menores previamente, com certo controle difcil de implementar com construtores No h como limitar o nmero de instncias criadas
construo de objetos
Factory Method
Objetivo segundo o GoF:
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()
cliente
Criador criarProduto()
Produto
CriadorConcreto criarProduto()
ProdutoConcreto
Abstract Factory
Objetivo segundo o GoF:
Problema
Criar uma famlia de objetos relacionados sem conhecer suas classes concretas
Estrutura
cliente FabricaAbstrata criarProdutoUm() criarProdutoDois() ProdutoUm ProdutoDois
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?
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
Memento
Builder
Distribuio de responsabilidades
Singleton: centraliza a responsabilidade em uma nica
instncia de uma classe
Padres associados a
Singlenton
Objetivo segundo o GoF:
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
public static synchronized Singlenton getInstancia() { if (instancia == null) { instancia = new Singlenton(); } return instancia; }
Observer
Objetivo segundo o GoF:
Observer
Problema:
registra-se altera
notifica
tempo
Estrutura do Observer
for(int i =0; i < obs.lenght; i++){ obs[i].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.
Chain of Responsability
Problema
possam servir a uma requisio ou repass-la Permitir diviso de responsabilidades de forma transparente
...
ProcessadorConcretoN processarRequisicao()
Discusso
1.
2.
Na sua opnio:
Quando usar?
Singleton: quando apenas uma instncia for permitida Observer: quando houver necessidade de notificao
automtica
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:
Command: Interpreter:
Template Method
Objetivo segundo o GoF:
Problema/Soluo
ClasseAbstrata void concreto(){ ... parteUm(); ... parteDois(); } abstract void parteUm(); abstract void parteDois(); algoritmo lacunas: parteUm
parteDois
Algoritmo resultantes:
State
Objetivo segundo o GoF:
comportamento quanto o seu estado interno mudar. O objeto ir aparentar mudar de classe.
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
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()
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:
permitindo que clientes parametrizem diferentes requisies, filas ou requisies de log, e suportar operaes reversveis.
Problema
Estrutura
Executor cmd: Comando executar()
cmd.executar ()
Comando executar()
ComandoConcretoA executar()
ComandoConcretoB executar()
receptor.acao()
ReceptorA aoA()
ReceptorB aoB()
Conseqncias
Desacopla o invocador do receptor So objetos; podem ser manipulados e estendidos Fcil adicionar novos comandos Comandos compostos podem ser criados usando o padro Composite
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.
Interpreter
Objetivo segundo GoF:
Ver www.cin.ufpe.br/~in1007/linguagens
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
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)
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.
Decorator
Objetivo segundo GoF:
Estrutura
Componente operacao()
ComponenteConcreto operacao()
Decorador operacao()
component.operacao();
Exemplo
Toolkit de interface grfica
- Texto - componente concreto - Texto com bordas - decorator - Texto com bordas e barra de rolagem - decorator
Conseqncias
Mais flexibildade que herana esttica Modelo tende a ficar mais simples e uniforme Entretanto
Iterator
Objetivo de acordo com o GoF:
Problema
Tipo genrico
Iterator
Coleo arbitrria de objetos (array, hashmap, lista, conjunto, pilha, tabela, ...)
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
quando usar?
Decorator
Iterator
Visitor