Escolar Documentos
Profissional Documentos
Cultura Documentos
Design Patterns
PROF. DR. DANIEL VECCHIATO
Bibliografia
Filme de ação
Filme de romance
Padrão de
O que é Padrão de
Projeto? Altura do interruptor
A ideia é reutilizar
projetos e arquiteturas Técnicas testadas e
aprov adas!
bem sucedidas
O que é “Cada padrão descreve um problema no
nosso ambiente e o cerne da sua solução, de
padrão de tal forma que você possa usar essa solução
mais de um milhão de vezes, sem nunca fazê-
projeto? lo da mesma maneira” Christopher Alexander
Padrões de Criação (5):
Abstract Factory
Singleton ...
Factory Method
Coesão
Acoplamento
• POO é Granularidade
difícil Manutenibilidade
Orçamento
Tempo
Equipe
Nome do •Facilita comunicação
Padrão
Essenciais
dos Padrões Solução
•Descreve, de forma abstrata, os
elementos que compõem o padrão de
projeto, seus relacionamentos, suas
de Projeto
responsabilidades e colaborações.
Prototype Singleton
Log;
Variáveis de ambiente.
Consequências
1 2 3 4
Acesso Espaço de Permite um Permite um
controlado à nomes reduzido refinamento de número variável
instância única; operações e da de instâncias
representação
Abstract Factory
PROF. DR. DANIEL VECCHIATO
Fornecer uma interface para criação de
famílias de objetos relacionados ou
Intenção dependentes sem especificar suas classes
concretas.
um sistema deve ser independente de
como seus produtos são criados, compostos
ou representados
um sistema deve ser configurado como um
produto de uma família de múltiplos
produtos
Aplicabilidade uma família de objetos-produto for
projetada para ser usada em conjunto, e
você necessita garantir esta restrição
você quer fornecer uma biblioteca de
classes de produtos e quer revelar somente
suas interfaces, não suas implementações
Consequências
1 2 3 4
Ele isola as Ele torna fácil Ela promove É difícil de
classes a troca de a harmonia suportar
concretas famílias de entre novos tipos
produtos produtos de produtos
Factory Method
PROF. DR. DANIEL VECCHIATO
Definir uma interface para criar um objeto, mas
deixar as subclasses decidirem que classe
instanciar.
Intenção O Factory Method permite adiar a
instanciação para subclasses.
Aplicabilidade
uma classe não pode antecipar a classe de objetos que deve criar
uma classe quer que suas subclasses especifiquem os objetos que
criam
classes delegam responsabilidade para uma dentre várias
subclasses auxiliares, e você quer localizar o conhecimento de qual
subclasse auxiliar que é a delegada.
Consequências
1 2 3
Elimina a necessidade de Criar objetos dentro de uma Conecta hierarquias de
anexar classes específicas classe com um método classe paralelas¹
das aplicações no código. fábrica é sempre mais
flexível do que criar um
objeto diretamente.
¹ Hierarquias de classe paralelas ocorrem quando uma classe delega alguma das suas responsabilidades para uma classe
separada. (ex: Figura e Manipulação)
Padrões de Projeto
Estruturais
PROF. DR. DANIEL VECCHIATO
Preocupam com a forma como classes e
objetos são compostos para formar estruturas
maiores
•Separa uma abstração •Fornece uma interface •Usa compartilhamento •Fornece um objeto
da sua unificada para um para suportar grandes representante
implementação, de conjunto de interfaces quantidades de (surrogate), ou um
modo que as duas em um subsistema. objetos, de marcador de
possam variar Define uma interface granularidade fina, de outro objeto, para
independentemente. de nível mais alto que maneira eficiente. controlar o acesso ao
torna o subsistema mesmo.
mais fácil de usar.
Adapter
PROF. DR. DANIEL VECCHIATO
Converter a interface de uma classe em outra
interface, esperada pelos clientes. O Adapter
Intenção permite que classes com interfaces
incompatíveis trabalhem em conjunto, o que,
de outra forma, seria impossível
Motivação
1 2
É possível introduzir novos tipos de A complexidade geral do código aumenta
adaptadores no programa sem quebrar o porque você precisa introduzir um conjunto
código cliente existente, desde que eles de novas interfaces e classes. Algumas
trabalhem com os adaptadores através da vezes é mais simples mudar a classe serviço
interface cliente. para que ela se adeque com o resto do seu
código
Composite
PROF. DR. DANIEL VECCHIATO
Intenção
1 2 3
Define hierarquias de classe que Torna o cliente simples. Os client es Pode tornar o projeto excessivamente
consistem de objetos primitivos podem tratar estruturas compostas e genérico. A desvantagem de facilitar
e objetos compostos. Os objetos objetos individuais de maneira o acréscimo de novos componentes é
primitivos podem compor objetos mais uniforme. que isso torna mais difícil restringir
complexos, os quais, por sua vez, os componentes de uma
também podem compor outros composição.
objetos, e assim por
diante, recursivamente.
Decorator
PROF. DR. DANIEL VECCHIATO
Dinamicamente, agregar responsabilidades
1 2
Maior flexibilidade do que herança Evita classes sobrecarregadas de
estática: Responsabilidades podem ser características na parte superior da
acrescentadas e removidas em tempo hierarquia
de execução simplesmente associando-
as e dissociando-as de uma objeto
Padrões
Comportamentais
PROF. DR. DANIEL VECCHIATO
se preocupam com algoritmos e a
atribuição de responsabilidades entre
objetos
•Dada uma linguagem, •Evita o acoplamento •Encapsula uma •Fornece uma maneira
define uma do remetente de uma solicitação como um de acessar
representação para solicitação ao seu objeto, desta forma sequencialmente os
sua gramática destinatário, dando a permitindo que você elementos de uma
juntamente com um mais de um objeto a parametrize clientes agregação de objetos
interpretador que usa chance de tratar a com diferentes sem expor sua
a representação para solicitação. Encadeia solicitações, enfileire representação
interpretar sentenças os objetos receptores ou registre (log) subjacente.
nessa linguagem. e passa a solicitação solicitações e suporte
ao longo da cadeia operações que
até que um objeto a podem ser desfeitas.
trate.
Padrões de Compartamentais
•Define um objeto que •Sem violar o •Permite que um objeto •Representa uma
encapsula a forma encapsulamento, altere seu operação a ser
como um conjunto de captura e externaliza comportamento executada sobre os
objetos interage. um estado interno de quando seu estado elementos da estrutura
Promove o um objeto, de modo interno muda. O de um objeto. Permite
acoplamento fraco ao que o mesmo possa objeto parecerá ter que você defina uma
evitar que os objetos posteriormente ser mudado de classe. nova operação sem
se refiram restaurado para este mudar as classes dos
explicitamente uns aos estado. elementos sobre os
outros, permitindo que quais opera.
você varie suas
interações
independentemente.
Observer
PROF. DR. DANIEL VECCHIATO
Definir uma dependência um-para-muitos
entre objetos, de maneira que quando
1 2 3
É possível introduzir novas Podem ser estabelecidas Assinantes são notificados
classes assinantes sem ter relações entre objetos em ordem aleatória.
que mudar o código da durante a execução.
publicadora (e vice versa se
existe uma interface
publicadora).
Strategy
PROF. DR. DANIEL VECCHIATO
Definir uma família de algoritmos, encapsular
cada uma delas e torná-las intercambiáveis.
1 2 3
Se você só tem um par de algoritmos Os Clientes devem estar cientes das Muitas linguagens de programação
e eles raramente mudam, não há diferenças entre as estratégias para permitem implementação de
motivo para deixar o programa mais serem capazes de selecionar a diferentes versões de um algoritmo
complicado com novas classes e adequada. em funções anônimas. Essas funções
interfaces que vêm junto com o podem ser usadas como se estivesse
padrão. usando objetos estratégia, mas sem
inchar seu código com classes e
interfaces adicionais.
Template Method
PROF. DR. DANIEL VECCHIATO
Definir o esqueleto de um algoritmo em uma
operação, postergando alguns passos para as
1 2
Técnica fundamental para a Clientes podem sobrescrever apenas
reutilização de código certas partes de um algoritmo grande,
tornando-os menos afetados por
mudanças que acontece por outras
partes do algoritmo.