Escolar Documentos
Profissional Documentos
Cultura Documentos
TÉCNICAS DE
PROGRAMAÇÃO
Unidade 05
A Camada de Negócios – Padrões de Projeto
Leitura recomendada:
• Padrões de Arquitetura de Aplicações Corporativas; Martin
Fowler; pgs 46 a 51 e 120 a 133
• Padrões e Projeto Orientado a Objetos; Goodrich; pgs 177 a
214 e 383 a 408
Técnicas de Programação Faculdade de Informática/PUCRS 2
PADRÕES DE PROJETO
Técnicas de Programação Faculdade de Informática/PUCRS 3
Padrão Singleton
• Alternativa 1:
• Usar uma classe “static” tal como a classe “Math”
• Vantagens: acessível de qualquer ponto do programa.
• Desvantagem: não controla a quantidade de instâncias. Instância
única “hard-coded”.
• Complica se houver a necessidade de criar mais uma instância no
futuro.
Técnicas de Programação Faculdade de Informática/PUCRS 5
Padrão Singleton
• Alternativa 2:
• Manter o construtor privado.
• Criar um atributo privado estático para manter a instância.
• Criar um método estático para ter acesso “global” a instância.
• Vantagem:
• permite trabalhar com mais de uma instância se for o caso, mas
controlando a quantidade.
Técnicas de Programação Faculdade de Informática/PUCRS 6
Exemplo (variação 1)
class Spooler{
static Spooler instance;
private Spooler() {
//... Conteúdo do construtor ...
}
private Spooler() {
//... Conteúdo do construtor ...
}
private ValidadorContribuinte() {
}
}
Técnicas de Programação Faculdade de Informática/PUCRS 10
Padrão Fachada
• Fornece uma interface única para um conjunto de
interfaces de um subsistema. A fachada (facade) define
uma interface de mais alto nivel que torna o subsistema
mais fácil de usar.
Técnicas de Programação Faculdade de Informática/PUCRS 11
...
}
Técnicas de Programação Faculdade de Informática/PUCRS 15
Padrão Strategy
• Define uma familia de algoritmos, encapsula cada um e
permite que os mesmos sejam intercambiaveis. O padrão
Strategy permite que o algoritmo varie independente dos
clientes que o usam.
Técnicas de Programação Faculdade de Informática/PUCRS 16
this.contrPrev = contrPrev;
this.cpf = cpf;
this.idade = idade;
this.nome = nome;
this.nroDep = nroDep;
this.totRend = totRend;
this.impostoDevido = new CalculoIrpfSimplificado(); // Assume como default
}
...
Padrão Factory
• Define uma interface para a criação de um objeto, mas
deixa as subclasses definirem a classe a ser instanciada.
O padrão faz com que a classe deixe o instanciamento
para as subclasses.
Padrão Factory
• Observações:
• A Factory decide que tipo de instância retornar baseada em
alguma lógica de decisão.
• O tipo retornado não importa, porque todos implementam a mesma
interface.
• O algoritmo de decisão pode ser extremamente complexo, mas
normalmente é extremamente simples.
Técnicas de Programação Faculdade de Informática/PUCRS 25
Padrão Factory
• Quando usar o padrão Factory
• A classe não consegue antecipar o tipo de objeto que deve ser
criado.
• A classe usa suas subclasses para especificar que tipo de objeto
criar.
• Se for o caso de localizar a lógica de criação das instâncias.
• É mais flexível que um construtor, pois permite criar objetos de
subclasses e não apenas de uma classe fixa.
Técnicas de Programação Faculdade de Informática/PUCRS 26
Padrão Factory
• O padrão Factory pode ter variações:
• A classe base é abstrata e o padrão deve retornar uma classe
completa.
• A classe base contém os métodos default e só existem classes
derivadas para alguns casos (nos demais retorna a própria classe
base).
• O parâmetro passado para o Factory define explicitamente o tipo
de instância a ser criada.
Técnicas de Programação Faculdade de Informática/PUCRS 27
Outros padrões
• Outros padrões interessantes:
• Iterator
• Adapter
• Decorator
• Composite
• Serão apresentados na sequencia
Técnicas de Programação Faculdade de Informática/PUCRS 31
Padrão Iterator
• Provê uma forma de acessar os elementos de um objeto
agregado sequencialmente sem expor a sua
implementação interna.
Técnicas de Programação Faculdade de Informática/PUCRS 32
Padrão Adapter
• Converte a interface de uma classe na interface esperada
por uma classe cliente. O padrão Adapter permite que
certas classes trabalhem juntas o que não seria possível
de outra forma devido a incompatibilidade das interfaces
Técnicas de Programação Faculdade de Informática/PUCRS 35
Padrão Decorator
• Acrescenta responsabilidades adicionais em um objeto
dinamicamente. O padrão decorator fornece uma
alternativa flexível ao uso da herança para estender
funcionalidades.
Técnicas de Programação Faculdade de Informática/PUCRS 43
Padrão Composite
• Mostra como combinar vários objetos em um objeto que
tem o mesmo comportamento que suas partes
Técnicas de Programação Faculdade de Informática/PUCRS 52