Engenharia de Software 1
11 - Codifica¸c˜
ao:
Padr˜
oes de projeto comportamentais
Alexandre de Andrade Barbosa
alexandre.barbosa@arapiraca.ufal.br
Objetivos
Objetivos
Relembrar o padr˜
ao de projeto Template Method
Apresentar o padr˜
ao de projeto Strategy
Descrever um exemplo ilustrativo da utiliza¸
c˜
ao do Strategy
Apresentar o padr˜
ao de projeto Observer
Padr˜
oes de comportamento
Cat´
alogo de padr˜
oes
Cria¸
c˜
ao
Estrutura
Comportamento
Factory Method
Adapter (classe)
Interpreter
Classe
Template Method
Abstract Factory
Adapter (objeto)
Chain of Responsibility
Objeto
Builder
Bridge
Command
Prototype
Composite
Iterator
Singleton
Decorator
Mediator
Fa¸
cade
Memento
Flyweight
Observer
Proxy
State
Strategy
Visitor
Padr˜
oes de comportamento
Template Method
Template Method
Comportamento / Classe
Padr˜
oes de comportamento
Template Method
Inten¸c˜
ao e objetivo:
“Definir o esqueleto de um algoritmo em uma opera¸
c˜
ao,
postergando alguns passos para subclasses. Permite que
subclasses redefinam certos passos de um algoritmo sem
mudar a estrutura do mesmo.”
Padr˜
oes de comportamento
Strategy
Strategy
Comportamento / Objeto
Padr˜
oes de comportamento
Strategy
Inten¸c˜
ao e objetivo:
“Definir uma fam´ılia de algoritmos, encapsular cada uma
delas e torn´
a-las intercambi´
aveis. Strategy permite que o
algoritmo varie independente dos clientes que o utilizam.”
Sinˆ
onimos: Policy
Padr˜
oes de comportamento
Strategy - Motiva¸
c˜
ao
Um problema pode possuir diferentes abordagens para sua
solu¸c˜
ao
Codificar os algoritmos de maneira fixa e r´ıgida nas classes que os
utilizam n˜
ao ´
e adequado
clientes que precisem do algoritmo se tornam mais complexos;
diferentes algoritmos podem ser mais adequados em situa¸
c˜
oes
diferentes;
a adi¸
c˜
ao de novos algoritmos ´
e complicada se o c´
odigo destes
algoritmos ´
e parte do cliente.
Padr˜
oes de comportamento
Strategy - Motiva¸
c˜
ao
Algoritmos para quebra de linhas em um editor de texto:
SimpleCompositor - quebra uma linha por vez
TeXCompositor - quebra linhas de um par´
agrafo por vez
ArrayCompositor - quebra de linhas para um n´
umero fixo de itens
Padr˜
oes de comportamento
Strategy - Motiva¸
c˜
ao
Padr˜
oes de comportamento
Strategy - Motiva¸
c˜
ao
Analogia ao padr˜ao Strategy
Non-Software Examples of Software Design Patterns by Michael Duell http:
//wwwswt.informatik.uni-rostock.de/deutsch/Lehre/Uebung/Beispiele/PatternExamples/patexamples.htm
Padr˜
oes de comportamento
Strategy - Aplicabilidade
O padr˜
ao Strategy deve ser utilizado quando:
muitas classes relacionadas diferem somente no seu
comportamento
variantes de um algoritmo s˜
ao necess´
arias
uma classe possui muitos comportamentos, e estes aparecem em
suas opera¸
c˜
oes como m´
ultiplos comandos condicionais da
linguagem
Padr˜
oes de comportamento
Strategy - Estrutura
Estrutura do padr˜ao de projeto Strategy
Padr˜
oes de comportamento
Strategy - Participantes
Strategy (Compositor)
define uma interface comum para todos os algoritmos suportados
ConcreteStrategy (SimpleComposito, TeXCompositor,
ArrayCompositor)
implementa o algoritmo usando a interface de Strategy
Context (Composition)
´
e configurado com um objeto ConcreteStrategy;
mant´
em uma referˆ
encia para um objeto Strategy;
pode definir uma interface que permite Strategy acessar seus
dados.
Padr˜
oes de comportamento
Strategy - Colabora¸
c˜
oes
Strategy e Context interagem para implementar o algoritmo
escolhido (Context envia dados para execu¸c˜
ao do algoritmo)
Um Context repassa as solicita¸
c˜
oes de seu cliente para sua
estrat´
egia
Padr˜
oes de comportamento
Strategy - Conseq¨
uˆ
encias
Benef´ıcios:
Fam´ılias de algoritmos - fatorar comportamento comum em
hierarquias de heran¸
ca
Alternativa ao uso de subclasses - o comportamento ´
e a ´
unica
coisa que varia
Possibilidade de escolha de implementa¸
c˜
oes - o cliente determina
qual estrat´
egia ser´
a utilizada
Padr˜
oes de comportamento
Strategy - Consequˆ
encias
Eliminam os grandes condicionais
void Composition::Repair () {
switch (_breakingStrategy) {
case SimpleStrategy:
ComposeWithSimpleCompositor();
break;
case TeXStrategy:
ComposeWithTeXCompositor();
break;
// ...
}
// merge results with existing composition, if necessary
}
void Composition::Repair () {
_compositor->Compose();
// merge results with existing composition, if necessary
}
Padr˜
oes de comportamento
Strategy - Conseq¨
uˆ
encias
Desvantagens:
Os clientes devem conhecer diferentes Strategies - para selecionar
o algoritmo apropriado o cliente deve ter conhecimento deste
Aumento do n´
umero de objetos - como diferentes algoritmos
estar˜
ao implementados em classes distintas, o numero de classes
tende a ser maior que em outra solu¸
c˜
ao
Custo de comunica¸
c˜
ao - os dados s˜
ao fornecidos para todas as
estrat´
egias sem distin¸
c˜
ao, algumas estrat´
egias simples podem n˜
ao
necessitar de todos os dados
Padr˜
oes de comportamento
Strategy - Implementa¸
c˜
ao
Definindo interfaces de Strategy e Context
passagem de parˆ
ametros
passagem do pr´
oprio objeto Context
Tornando os objetos Strategy opcionais
comportamento por falta
comportamento espec´ıfico
Padr˜oes de comportamento
Exerc´ıcios, Resumo e Referˆencias
Template Method Strategy Observer
Padr˜
oes de comportamento
Strategy - Exemplo de c´
odigo
Problema: Os documentos armazenados manipulados pelo
sistema podem ser impressos em formatos distintos (PDF,
HTML, TXT).
Solu¸c˜
ao proposta: Criar uma classe documento com m´
etodos
distintos para cada tipo de impress˜
ao
que ser modificada
O modo de impress˜
ao n˜
ao poderia ser alterado em “runtime”
Outros
Padr˜
oes de comportamento
Strategy - Exemplo de c´
odigo
Problema: Os documentos armazenados manipulados pelo
sistema podem ser impressos em formatos distintos (PDF,
HTML, TXT).
Solu¸c˜
ao proposta: Criar uma classe documento com m´
etodos
distintos para cada tipo de impress˜
ao
Desvantagens da solu¸
c˜
ao proposta:
A cada novo modo de impress˜
ao criado a classe Documento teria
que ser modificada
O modo de impress˜
ao n˜
ao poderia ser alterado em “runtime”
Outros
Padr˜
oes de comportamento
Strategy - Exemplo de c´
odigo
Solu¸c˜
ao com Strategy: Separar a regra de neg´
ocio “Impress˜
ao”
da representa¸
c˜
ao do documento
Vantagens:
Acoplamento fraco
Eliminar comandos condicionais
Caso um novo modo de impress˜
ao seja necess´
ario a classe
documento n˜
ao precisa ser modificada
Padr˜
oes de comportamento
Strategy - Exemplo de c´
odigo
Padr˜
oes de comportamento
Strategy - Padr˜
oes relacionados
Flyweight - Usa compartilhamento para suportar grandes
Padr˜
oes de comportamento
Observer
Observer
Comportamental / Objeto
(Finalidade) / (Escopo)
Padr˜
oes de comportamento
Observer
Inten¸c˜
ao e objetivo:
“Definir uma dependˆ
encia um-para-muitos entre objetos, de
maneira que quando um objeto muda de estado todos os
seus dependentes s˜
ao notificados e atualizados”
Padr˜
oes de comportamento
Observer - Motiva¸
c˜
ao
Quando se divide o sistema em partes menores ´
e necess´
ario
manter a consistˆ
encia entre uma cole¸
c˜
ao de classes cooperantes
N˜
ao ´
e desejado manter consistˆ
encia com forte acoplamento
Padr˜
oes de comportamento
Padr˜
oes de comportamento
Observer - Motiva¸
c˜
ao
Exemplo: Uma aplica¸
c˜
ao com gr´
aficos estat´ısticos
Um objeto de planilha e um objeto gr´
afico de barras podem
ilustrar um conjunto de dados
A planilha e o gr´
afico de barras n˜
ao conhecem um ao outro
Quando a informa¸
c˜
ao ´
e modificada na planilha o gr´
afico de barras
deve ser atualizado automaticamente
O padr˜
ao Observer descreve como estes relacionamentos podem
ser criados com fraco acoplamento entre as classes
Padr˜
oes de comportamento
Observer - Aplicabilidade
O padr˜
ao Observer deve ser utilizado quando:
quando uma abstra¸c˜
ao tem dois aspectos, um dependente do
outro. Os aspectos s˜
ao mantidos em objetos separados, o que
permite variar e reutilizar estes
quando uma mudan¸
ca em um objeto exige mudan¸
cas em outros, e
vocˆ
e n˜
ao sabe quantos objetos necessitam ser mudados
quando um objeto deveria ser capaz de notificar outros objetos
sem fazer hip´
oteses, ou usar informa¸
c˜
oes, de quem s˜
ao estes
objetos (obter fraco acoplamento)
Padr˜
oes de comportamento
Observer - Estrutura
Padr˜
oes de comportamento
Observer - Participantes
Subject
conhece seus observadores
fornece uma interface para gerenciar objetos para adicionar e
remover observers
Observer
define uma interface de atualiza¸
c˜
ao para objetos que deveriam ser
notificados sobre mudan¸
cas em um Subject
ConcreteSubject
armazena estados de interesse para objetos ConcreteObserver
notifica seus observadores quando seu estado muda
ConcreteObserver
mant´
em uma referˆ
encia para um objeto ConcreteSubject
Padr˜
oes de comportamento
Observer - Colabora¸
c˜
oes
O ConcreteSubject notifica seus observadores quando ocorre
mudan¸ca que poderia tornar inconsistente os estados dos objetos
Ap´
os ser notificado um ConcreteObserver deve consultar o
ConcreteSubject para obetr informa¸
c˜
oes, e atualizar seu estado
de acordo com o estado do ConcreteSubject
Padr˜
oes de comportamento
Observer - Conseq¨
uˆ
encias
Benef´ıcios:
Acoplamento abstrato entre subject e observer - subject n˜
ao
conhece as implementa¸
c˜
oes concretas de seus observadores
Suporte para comunica¸
c˜
oes broadcast - a notifica¸
c˜
ao de mudan¸
ca
´
e enviada para todos os observadores que se subscreveram
Desvantagens:
Atualiza¸
c˜
oes inesperadas - atualiza¸
c˜
oes em cascata podem ser
disparadas devido a modifica¸
c˜
oes m´ınimas no subject
Padr˜
oes de comportamento
Observer - Implementa¸
c˜
ao
Observando mais de um subject
´
e necess´
ario estender a interface de update para que o observador
saiba qual subject lhe enviou uma notifica¸
c˜
ao
Referˆ
encias para NULL
a remo¸
c˜
ao de um subject n˜
ao deve produzir referˆ
encias para null
nos seus observadores
o subject pode notificar seus observadores quando for deletado
Padr˜
oes de comportamento
Observer - Exemplo
Sistema para visualizar dados do monitoramento de valores
imobili´
arios
Sistema ´
e dividido em trˆ
es componentes:
Fontes (bolsas de mercado)
StockData que captura as informa¸
c˜
oes das fontes
Interfaces para visualizar os dados
Sempre que StockData modificar seu estado (coletar novas
informa¸
c˜
oes nos mercados) as interfaces devem ser notificadas e
atualizadas
Padr˜
oes de comportamento
Observer - Exemplo
Padr˜
oes de comportamento
Observer - Padr˜
oes relacionados
Mediator - Define um objeto que encapsula como um conjunto
de objetos interage
Exerc´ıcio
Exerc´ıcio
1
Crie um conjunto de classes para simular o controle de acesso a usu´
arios, o controle
de acesso pode ocorrer atrav´
es de: (a) dados textuais (login e senha); (b)
identifica¸
c˜
ao biometrica utilizando a digital; (c) identifica¸
c˜
ao biometrica utilizando a
´ıris do olho.
Todo controle de acesso deve solicitar dados de entrada;
Comparar dados fornecidos com os dados armazenados.
Possibilitar ou negar acesso.
Exerc´ıcio
Exerc´ıcio
1
Altere a aplica¸
c˜
ao do exerc´ıcio anterior de modo que cada forma de controle de
acesso seja uma estrat´
egia diferente
Exerc´ıcio
Exerc´ıcio
1
Crie uma aplica¸
c˜
ao para vota¸
c˜
ao que obtenha dados de entrada e exiba no console e
em JOptionPane o resultado da vota¸
c˜
ao, caso os dados de vota¸
c˜
ao sejam alterados
um novo resultado deve ser impresso
Exerc´ıcio
Exerc´ıcio
1