Padrões de Design
Toacy Cavalcante de Oliveira
Problema
November 5, 2015
2
Análise vs Projeto

Análise
 Modela
o mundo real.
 Usualmente não é “mapeável”para o Projeto
pois tende a ser ineficiente/ineficaz.

Projeto
 Atribuição
de Responsabilidades.
 Boas práticas (+Coesão, -Acoplamento)
November 5, 2015
3
Como compatibilizar os dois
mundos?
Tipicamente, bons projetistas são
formados após um longo período de
experiência.
 São hábeis praticantes do conceitos
básicos de ES.

 Abstração,
November 5, 2015
Flexibilidade e Modularidade
4
Problema

Como capturar este conhecimento de
modo a transmiti-lo a outros
desenvolvedores para que estes também
se tornem experts?

Design Patterns
November 5, 2015
5
Introdução
November 5, 2015
6
Definições

“um padrão descreve um problema que se
repete várias vezes em um determinado
meio, descrevendo o núcleo de sua
solução, de modo que esta solução possa
ser usada milhares e milhares de vezes."
[Christopher Alexander]
November 5, 2015
7
Definições

Os Padrões de Design formam um
conjunto de regras que descrevem como
realizar certas tarefas no âmbito do
desenvolvimento de software [Pree, 1994].
November 5, 2015
8
Definições


Um Padrão de Design visa resolver um
problema recorrente de design que surge em
determinadas situações [Buschmann et al.,
1996].
Os Padrões de Design identificam e definem
abstrações que estão acima do nível de uma
única classe e de suas instâncias, ou de
componentes [Gamma et al., 1994].
November 5, 2015
9
Motivação para DP
Novos problemas são geralmente
similares a problemas já resolvidos
anteriormente.
 As soluções para problemas similares
seguem padrões recorrentes.

November 5, 2015
10
Benefícios




Servem de guia para a solução do problema.
Ajudam a gerenciar a complexidade do software
Estimulam a aplicação e disseminação de boas
práticas da POO.
Definem um vocabulário comum entre os
projetistas, o que ajuda na disseminação de
soluções bem sucedidas.
November 5, 2015
11
Histórico
November 5, 2015
12
De onde vêm?

Christofer Alexander
A
Pattern Language, Oxford University Press 1977
 Timeless way of Building, Oxford University Press
1979

C.A. era arquiteto e identificou uma série de
padrões utilizados na construção de edificações.
November 5, 2015
13
OOPSLA

Em 1987, Ward Cunningham e Kent Beck
usaram algumas das idéias de Alexander
no trabalho sobre GUI intitulado “Using
Pattern Languages for Object-Oriented
Programs” [OOPSLA-87].
November 5, 2015
14
Gang-of-Four

Em 1994, Erich Gamma, Richard Helm,
John Vlissides e Ralph Johnson
publicaram um dos livros mais importantes
de Engenharia de Software da década de
90: “Design Patterns: Elements of
Reusable Object-Oriented Software”
[GoF].
November 5, 2015
15
Livros
Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Addison-Wesley, October 1994
November 5, 2015
16
Descrevendo
Padrões
November 5, 2015
17
4 Elementos Essenciais

Nome do padrão

Problema

Solução

Conseqüências
November 5, 2015
18
Nome
 Serve
de referência para o
padrão.
 Aumenta o vocabulário de
projeto.
 Deve ser único.
November 5, 2015
19
Problema
 Quando
aplicar um padrão.
 Contexto.
 Lista de condições que
justifiquem aplicar o padrão.
November 5, 2015
20
Solução
 Elementos
que compõem o
padrão.
 “Arranjo” geral dos seus
elementos.
 Responsabilidades e
colaborações destes elementos.
November 5, 2015
21
Conseqüência
 Análises
 Vantagens
/ desvantagens
 Flexibilidade, capacidade de
extensão ou portabilidade.
November 5, 2015
22
Exemplo
November 5, 2015
23
Identificação




Nome: Observer
Problema: Notificar a ocorrência de um evento a
uma lista de objetos.
Solução: Observers delegam a responsabilidade
de monitoramento para um objeto central o
Subject.
Consequencias: Permite variar Subject e
Observer de forma independente. Permite
comunicação broadcast.
November 5, 2015
24
Observer - Elementos
November 5, 2015
25
Catálogo
November 5, 2015
26
GoF & POSA

GoF (“the gang of four”) catalogue
 “Design
Patterns: Elements of Reusable
Object Oriented Software,” Gamma, Helm,
Johnson,Vlissides, Addison-Wesley, 1995

POSA catalogue
 Pattern-Oriented
Software
Architecture,Buschmann, et al.; Wiley, 1996
November 5, 2015
27
Estrutura do Catálogo

Classifica padrões de acordo com seu
propósito,
 De
Criação
 Estrutural
 Comportamental

e escopo.
 Objeto
 Classe
November 5, 2015
28
Quanto ao escopo

Classes
 Padrões
tratam do relacionamento entre
classes e subclasses;

Objetos
 Padrões
tratam relacionamentos entre
objetos e por isso podem ser alterados em
tempo de execução.
November 5, 2015
29
De Criação

Diz respeito ao processo ou ciclo de
criação de um objeto.
 Escopo
classe: delega a criação de um objeto
para alguma de suas subclasses.
 Escopo
objeto: delega a criação de um objeto
para outro objeto
November 5, 2015
30
Estrutural

Diz respeito a composição de objetos e
classes;
 Escopo
classe: Utilizam herança para compor
objetos
 Escopo
Objeto: Descreve formas de compor
objetos.
November 5, 2015
31
Comportamental

Caracteriza o modo como classes e
objetos interagem e compartilham
responsabilidades.
 Escopo
Classe: Utiliza herança para
descrever algoritmos e controle de fluxo.
 Escopo Objeto: Descreve como um grupo de
objetos cooperam de modo a executar uma
tarefa.
November 5, 2015
32
Visão Geral
Escopo
Class
Object
November 5, 2015
Criação
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Propósito
Estrutural
Adapter (classe)
Adapter (object)
Bridge
Composite
Decorator
Façade
Flyweight
Proxy
Comportamental
Interpreter
Template Method
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
33
Estrutura Interna

Além das 4 características essenciais, o
Catálogo do GoF define outras
características para descrever padrões.
November 5, 2015
34
Estrutura Interna 1/3

Nome do Padrão e Classificação


Propósito



O quê o Padrão faz?
Que tipo de problema ou característica particular de projeto ele trata?
Também Conhecido Como:


Passa a fazer parte do vocabulário dos projetistas.
Conjunto de outros nomes (apelidos) conhecidos para o Padrão, se existir
algum.
Motivação

Um cenário que ilustra o problema de projeto e como as estruturas de classes e
objetos no Padrão o resolvem.
November 5, 2015
35
Estrutura Interna 2/3

Aplicação




Estrutura


Uma representação gráfica das classes no padrão
Participantes


Quais são as situações onde este padrão pode ser aplicado?
Quais são os exemplos de projetos que ele pode tratar?
Como você pode reconhecer estas situações?
As classes e/ou objetos que participam no padrão de projeto, e suas
responsabilidades
Colaborações

Como os participantes interagem para cumprir suas responsabilidades
November 5, 2015
36
Estrutura Interna 3/3

Conseqüências



Implementação


Fragmentos de código que ilustram como o padrão deve ser implementado
Usos Conhecidos


Dicas e técnicas que o projetista deve saber, e possíveis armadilhas para as quais ele deve
estar preparado.
Exemplo de Código


Como o padrão alcança seus objetivos?
Quais são os resultados do uso do padrão?
Exemplos de utilização do padrão em sistemas já implementados.
Padrões Relacionados

Lista de alguns padrões fortemente relacionados ao padrão em questão e as suas
principais diferenças.
November 5, 2015
37
Observer
November 5, 2015
38
O padrão Observer

Classificação
 Comportamental

de Objetos
Propósito
 Provê
sincronização, coordenação e consistência
entre objetos relacionados.

Também Conhecido Como:
 Dependents,
November 5, 2015
Publish-Subscribe
39
Motivação

Necessidade de manter consistência entre objetos relacionados.

Não existe interesse em tornar as classes fortemente acopladas.

Ex. Planilha e gráfico de barras.


Não tem conhecimento um do outro
Trabalham em conjunto apresentando uma mesma informação

O padrão observer oferece um mecanismo para resolver esse problema

Subject Possui um conjunto de observers.

Notifica seus observers quando sofre uma mudança de estado
November 5, 2015
40
Aplicabilidade

Quando uma mudança em um objeto
exige mudanças em outros, e não são
conhecidos quantos devem ser mudados.

Quando um objeto deve ser capaz de
notificar outros objetos sem que estes
sejam fortemente acoplados.
November 5, 2015
41
Estrutura
November 5, 2015
42
Participantes

Subject



ConcreteSubject



guarda o estado de interesse para ConcreteObserver
envia uma notificação para seu Observer quando seu estado muda.
Observer


conhece seu Observer. Qualquer número de objetos Observer podem observar um Subject
provê uma interface para acoplar e desacoplar objetos Observer.
define uma interface de atualização para objetos que devem ser notificados sobre mudanças em um
Subject.
ConcreteObserver



Mantém uma referência para um objeto ConcreteSubject
Guarda o estado que deve ficar consistente com o de Subject
Implementa o Observer atualizando a interface para manter seu estado consistente com o de
Subject.
November 5, 2015
43
Colaborações

O ConcreteSubject notifica seus
observadores sempre que ocorrer uma
mudança.

Após ter sido notificado, um
ConcreteObserver pode consultar o
subject.
November 5, 2015
44
Conseqüências

Acoplamento fraco entre o Subject e o
Observer

Suporte para comunicações em broadcast

Atualizações inesperadas
November 5, 2015
45
Implementação

Observando mais de um subject
 Subject
ativador é passado como parâmetro
no método update()

Quem dispara a atualização?
 Subject
 Cliente
November 5, 2015
46
Exemplo de código
November 5, 2015
47
Exemplo de código
November 5, 2015
48
Exemplo de código
November 5, 2015
49
Usos conhecidos

Serviço de Eventos e Serviço de
Notificação (CORBA)
November 5, 2015
50
Padrões relacionados

Mediator
 Encapsula
a semântica de atualizações complexas, o
ChangeManager atua como um mediador entre
subjects e observers

Singleton
o
ChangeManager pode usar o padrão singleton para
torná-lo único e globalmente acessível.
November 5, 2015
51
Catálogo
November 5, 2015
52
Catálogo

Abstract Factory:


Adapter:


Separa uma abstração de sua implementação, de modo que ambas possam variar
independentemente.
Builder:


Converte a interface de uma classe em outra, esperada pelo cliente. O Adapter permite que classes
que antes não poderiam trabalhar juntas, por incompatibilidade de interfaces, possam agora fazê-lo.
Bridge:


Provê uma interface para criação de famílias de objetos relacionados ou interdependentes. Remove
a dependência entre o cliente, que usa os objetos, e a classe dos objetos produzidos.
Provê uma interface genérica para a construção incremental de agregações. Um Builder esconde os
detalhes de como os componentes são criados, representados e compostos.
Chain of Responsibility:

Encadeia os objetos receptores e transporta a mensagem através da corrente até que um dos
objetos a responda. Assim, separa (provê loose coupling) objetos transmissores dos receptores,
dando a chance de mais de um objeto poder tratar a mensagem.
November 5, 2015
53
Catálogo de Padrões de Projeto

Command:


Composite:


Anexa responsabilidades adicionais a um objeto dinâmicamente. Provê uma alternativa
flexível para extensão de funcionalidade, sem ter que usar Herança.
Facade:


Compõe objetos em árvores de agregação (relacionamento parte-todo). O Composite
permite que objetos agregados sejam tratados como um único objeto.
Decorator:


Encapsula uma mensagem como um objeto, de modo que se possa parametrizar
clientes com diferentes mensagens. Separa, então, o criador da mensagem do executor
da mesma.
Provê uma interface unificada para um conjunto de interfaces em um subsistema. O
Facade define uma interface alto nível para facilitar o uso deste subsistema.
Factory Method:

Define uma interface para criação de um objeto, permitindo que as suas subclasses
decidam qual classe instanciar. O Factory Method deixa a responsabilidade de
instanciação para as subclasses.
November 5, 2015
54
Catálogo

Flyweight:


Interpreter:


Provê um modo de acesso a elementos de um agregado de objetos, sequencialmente,
sem exposição de estruturas internas.
Mediator:


Usado para definição de linguagem. Define representações para gramáticas e
abstrações para análise sintática.
Iterator:


Usa o compartilamento para dar suporte eficiente a um grande número de objetos com
alto nível de granularidade.
Desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto
que encapsula as interações dentre desse grupo.
Memento:

Captura e externaliza o estado interno de um objeto (captura um "snapshot"). O
Memento não viola o encapsulamento.
November 5, 2015
55
Catálogo

Observer:


Prototype:


Provê Design para um controlador de acesso a um objeto.
Singleton:


Especifica os tipos de objetos a serem criados num sistema, usando uma
instância protótipo. Cria novos objetos copiando este protótipo.
Proxy:


Provê sincronização, coordenação e consistência entre objetos relacionados.
Assegura que uma classe tenha apenas uma instância e provê um ponto
global de acesso a ela.
State:

Deixa um objeto mudar seu comportamento quando seu estado interno muda,
mudando, efetivamente, a classe do objeto.
November 5, 2015
56
Catálogo

Strategy:


Template Method:


Define uma família de algoritmos, encapsula cada um deles, e torna a escolha
de qual usar flexível. O Strategy desacopla os algoritmos dos clientes que os
usa.
Define o esqueleto de um algoritmo em uma operação. O Template Method
permite que subclasses componham o algoritmo e tenham a possibilidade de
redefinir certos passos a serem tomados no processo, sem contudo alterar sua
inetrface.
Visitor:

Representa uma operação a ser realizada sobre elementos da estrutura de um
objeto. O Visitor permite que se crie um nova operação sem que se mude a
classe dos elementos sobre as quais ela opera.
November 5, 2015
57
Utilização
November 5, 2015
58
Como utilizar Padrões?

Existem algumas perguntas que auxiliam
o emprego de Design Patterns.

A resposta não é exata mas da uma boa
direção!
November 5, 2015
59
Variação

Existe variação de uma regra de negócio
ou implementação?
 Strategy
 Bridge
 Proxy
 Decorator
 Visitor
November 5, 2015
60
Ex. Strategy

Existe alguma variação na regra?
 Define
uma família de algoritmos, encapsula
cada um deles, e torna a escolha de qual
usar flexível. O Strategy desacopla os
algoritmos dos clientes que os usa.

Ex. Feature Alternativas são candidatas para o
Strategy.
November 5, 2015
61
Interfaces

Existe uma preocupação com interfaces
e/ou tratamento de “objetos”
incompatíveis?
 Adapter
 Composite
 Facade
November 5, 2015
62
Ex. Facade

Existe a necessidade de simplificar, “OOificar” uma classe ou um subsistema?
 Provê
uma interface unificada para um
conjunto de interfaces em um subsistema. O
Facade define uma interface alto nível para
facilitar o uso deste subsistema.
November 5, 2015
63
Desacoplamanto

Existe a necessidade de desacoplar ?
 Observer
 Chain
of Responsibility
 Iterator
 Mediator
 State
November 5, 2015
64
Ex. State

Existem objetos om muitos estados,
implicando e um difícil gerenciamento
destes (muito código) ?
 Deixa
um objeto mudar seu comportamento
quando seu estado interno muda, mudando,
efetivamente, a classe do objeto.
November 5, 2015
65
Criação

Existe a necessidade de criar coisas?
 Abstract
Factory
 Builder
 Factory
November 5, 2015
Method
66
Ex. Factory Method

As subclasses necessitam saber/descobrir
o que instanciar?
 Define
uma interface para criação de um
objeto, permitindo que as suas subclasses
decidam qual classe instanciar. O Factory
Method deixa a responsabilidade de
instanciação para as subclasses.
November 5, 2015
67
Mais sobre
Padrões
November 5, 2015
68
+Padrões

Analysis patterns –

Soluções típicas para problemas de análise recorrente.
 Analysis Patterns, Fowler; Addison-Wesley, 1996
 Applying UML and Patterns, Larman, Prentice-Hall, 1998

Architectural patterns


Veja POSA
Idioms




Smalltalk Best Practice Patterns, Beck; Prentice Hall, 1997
Concurrent Programming in Java, Lea; Addison-Wesley, 1997
Advanced C++, Coplien, Addison-Wesley, 1992
Effective C++: 50 Specific Ways to Improve Your Programs and Design
(2nd Edition), Scott Meyers, Addison-Wesley, (September 1997)
 More Effective C++: 35 New Ways to Improve
November 5, 2015
69
Anti-Patterns

Soluções de projeto que não respeitam as
regras de bons procedimentos em ES.
 Abstração,

Flexibilidade e Modularidade
http://www.antipatterns.com
November 5, 2015
70
From http://www.antipatterns.com/briefing/sld006.htm
Anti-Patterns
November 5, 2015
71
Referências Adicionais
Apostila do Prof. Ivan (no site)
 Design Patterns Explained: A New
Perspective on Object-Oriented Design,
Alan Shalloway, James R. Trott,
 http://www.netobjectives.com/dpexplained/
download/dpmatrix.pdf

November 5, 2015
72
Download

Modelagem com UML