Buscar

Aula 02 - Padroes de Projeto

Prévia do material em texto

Programação Orientada a Objetos
Lei de Lavoisier - Lei de Conservação das Massas (Antoine Lavoisier, 1760): “Na 
natureza nada se cria, nada se perde, tudo se transforma”
- Livro sobre solução de problemas comuns de computação: “Design Patterns: 
Elements of Reusable Object-Oriented Software” (Padrões de Projeto: Soluções 
Reutilizáveis de Software Orientado a Objetos), 1995
- Esse livro ficou conhecido como GoF – Gang of Four (Gangue dos Quatro): Erich 
Gamma, Richard Helm, Ralph Johnson e John Vlissides
- Os padrões de projeto propostos pelo GoF são uma evolução a partir de ideias de 
padrões de desenvolvimento propostas por Christopher Alexander em publicações a 
partir de 1977.
Padrões
de Criação
Padrões
Estruturais
Padrões
Comportamentais
Família de padrões de projetos propostos por GoF
Padrões de Criação:
▪ Abstract Factory”, este padrão, que poderia ser traduzido livremente como “fábrica abstrata”, permite a criação de diversos 
objetos relacionados utilizando uma “interface”, sem que a “classe concreta” seja especificada. Uma interface, em computação,
é uma definição de comunicação entre duas entidades. Possibilita a reutilização de componentes sem que sua implementação 
seja conhecida. 
▪ “Builder”, utilizado para criar objetos complexos, isto é, mais de um objeto relacionado. A diferença entre ele e o “Abstract 
Factory” é que esse constrói de uma única vez, enquanto o “Builder” faz isso passo a passo. 
▪ “Factory Method”, método que retorna um objeto que pode ser instanciado nas classes derivadas, ao invés de isto acontecer na 
classe base. 
▪ “Prototype” é um objeto com a principal característica de poder clonar a si mesmo. Isto significa que ele é um “Abstract Factory” 
para um número reduzido de classes. 
▪ “Singleton”, que é uma classe cujo objetivo é garantir que haja apenas uma única instância de uma classe. O “Singleton” é 
bastante utilizado em aplicações em que, se houver mais de uma instância de um mesmo objeto, pode haver problemas de 
performance ou replicação. Para que isso aconteça, o construtor de um “Singleton” precisa ser privado e deve haver um método 
público estático para criação do objeto, caso ainda não exista, ou para retorno do objeto existente. 
class BancoDeDados
{
private:
static BancoDeDados *instancia;
BancoDeDados() {}
public:
static BancoDeDados & getInstancia()
{
if (!instancia)
instancia = new BancoDeDados();
return *instancia;
}
void Connect() {}
};
Padrão Singleton
APLICAÇÃO
BANCO DE 
DADOS
Padrões Estruturais:
▪ Adapter” do inglês, adaptador. Permite que classes com interfaces diferentes possam interagir. Ele faz uma adaptação, criando 
uma interface única, a partir das interfaces diferentes de outras classes. 
▪ “Bridge”, do inglês, ponte. Esse padrão permite que diferentes interfaces sofram variações independentemente de suas 
implementações concretas. Neste padrão, a hierarquia, isto é, a cadeia de heranças, que define as interfaces é separada da 
hierarquia que contém a implementação. 
▪ “Composite”, do inglês, composto, define que um objeto que é composto de várias classes de mesma hierarquia.
▪ Decorator, ou também de Wrapper, classe não possui determinado comportamento em sua definição, só aparece depois do 
objeto estar instanciado, durante a execução 
▪ “Façade”, que é uma interface simplificada para funcionalidades de uma API, uma Interface Avançada de Programação. A 
proposta deste padrão é melhorar a compreensão para o uso de uma determinada funcionalidade, ou às vezes, melhorar uma 
interface que originalmente foi mal definida.
▪ “Flyweight”, tem como objetivo de otimizar recursos computacionais
▪ “Proxy, controlador de acesso a outros objetos. Ele é praticamente uma interface para outra interface, porém com esse controle 
de acesso. 
Composite
Janela
+ desenhar()
CaixaDeTexto
+ desenhar()
Icone
+ desenhar()
Elemento Gráfico
+ desenhar()
possui
Padrões Comportamentais:
▪ “Chain of Responsibility”, do inglês: cadeia de responsabilidade. Este padrão estabelece a chamada sucessiva de vários 
objetos em cadeia, a fim de se resolver um problema. Durante o percurso da cadeia, cada objeto vai resolvendo a sua 
parte, ou seja, cuidando da sua responsabilidade.
▪ “Command”, cuja principal característica é permitir o enfileiramento das execuções, e armazenar o estado dessas 
execuções, para que, por qualquer necessidade, elas possam ser desfeitas. 
▪ “Interpreter”, que especifica um processo recursivo para que pequenas gramáticas da linguagem de programação 
possam ser agrupadas de forma, até que se tenha um único ponto de entrada para a chamada na hierarquia de classes, 
em uma linguagem formal simples. 
▪ “Iterator”, tem como objetivo encapsular uma iteração.
▪ “Mediator”, que propõe uma interação simplificada entre as classes, reduzindo a dependência entre os objetos que 
estão se comunicando. Durante a execução de um programa, pode ser desejável que ele retorne a um determinado 
estado anterior. 
Padrões Comportamentais:
▪ “Memento”, cujo objetivo é armazenar o estado de um objeto para permitir o possível retorno a esse estado anterior.
▪ “Observer”. Uma das relações comuns entre classes é a agregação, onde um objeto é criado a partir de um conjunto de 
outros objetos que, se destruídos, levam à destruição do objeto possuidor. Aí entra a figura do “Observer”, para garantir 
que, quando um objeto mudar seu estado, seus dependentes (no caso, o objeto possuidor), sejam notificados dessa 
mudança. 
▪ “State”, define quando um objeto pode assumir um determinado estado ou mudar de estado 
▪ Strategy”, que sugere a implementação de diferentes algoritmos independente dos objetos que o utilizem.
▪ “Template Method”, um padrão onde parte da definição do algoritmo é feita com uso de métodos abstratos. Neste 
padrão, as subclasses devem se responsabilizar pela implementação concreta dos métodos, de acordo com a 
necessidade. 
▪ “Visitor”, que provê a habilidade de incorporação de novas funcionalidades à estrutura de um objeto, sem que essas 
funcionalidades precisem ser modificadas.

Continue navegando