Академический Документы
Профессиональный Документы
Культура Документы
Software
Algoritmos e Programao II
Fbio M. Pereira
Roteiro
Introduo:
O que so padres de projeto?
Motivao
Conceitos bsicos:
Atributos
Problemas
Seleo
Uso
Tipos
Exemplos
Introduo
Dificuldades:
Falta de experincia
Dificuldade de combinao de todos os
elementos
Padres de projeto de SW
Outras vantagens
Aumento da comunicao entre times e
aprendizagem individual
Aumento da capacidade de modificao e de
manuteno de cdigo
Aumento do entendimento de princpios de
projeto bsicos em orientao a objetos
(encapsulamento, herana e polimorfismo)
Adoo de estratgias melhores mesmo
quando padres no esto presentes
Aprendizado de melhores alternativas para
problemas complexos, principalmente
aqueles com grandes hierarquias
Programas de aplicaes
Bibliotecas de classes (toolkits)
Conjuntos de classes (frameworks)
Atributos
Nome
Referncia que descreve de forma bastante sucinta o
padro
Problema
Motivao, inteno e objetivos, aplicabilidade
Apresenta o contexto do padro e quando ele pode
ser usado
Soluo
Estrutura, participantes, exemplo de cdigo
Descreve a soluo e os elementos que a compem
Padres estruturais
Tratam da forma como classes e objetos esto organizados
para a formao de estruturas maiores
Adaptor, Decorator, Proxy, Bridge, Facade, Composite, Flyweight
Padres comportamentais
Preocupam-se com algoritmos e a atribuio de
responsabilidades entre objetos
Chain of Responsibility, Mediator, Strategy, Command, Memento,
Template Method, Interpreter, Observer,Visitor, Iterator, State
Padres de objetos
Em geral dinmicos, definidos em tempo de
execuo
Padres de Projeto de
Criao
- Abstract
Factory
Builder
- Factory Method
- Prototype
- Singleton
-
Abstract Factory
Abstract Factory
Builder
Separa a construo (geralmente passo a passo)
de um objeto complexo da sua representao, de
modo que o mesmo processo de construo
possa criar diferentes representaes
Permite que um objeto cliente construa um
objeto complexo especificando apenas o seu tipo
e o seu contedo
Exemplos:
MessageBuilder is an abstract
builder class. It defines
methods that correspond to
the various header fields and
body types that MIME
supports. It declares abstract
methods that correspond to
required header fields and the
most common body types. It
declares these methods
abstract because all concrete
subclasses of MessageBuilder
should define these methods.
However, some of the
optional header fields such as
organization and fancier body
types such as Image/Jpeg
may not be supported in all
message formats, so the
MessageBuilder class
provides do-nothing
implementations of these
methods.
The MessageBuilder class also defines a class method called getInstance. A MIMEParser object passes
the get Instance method the destination address of the message it is parsing. From the message's
destination address, the getInstance method determines the message format needed for the new message.
It returns an instance of the subclass of Message-Builder appropriate for the format of the new
message to the MIMEParser object.
The MAPIBuilder and PROFSBuilder classes are concrete builder classes for building Messaging
Application Programming Interface (MAPI) and PROFS (a registered trademark of the IBM
corporation) messages, respectively.
The builder classes create product objects that implement the OutboundMsgIF interface. This interface
defines a method called send that is intended to send the e-mail message wherever it is supposed to go.
1.1.6MessageManager
1.A
1.1.2
The MIMEParser
object
object
receives
passes
calls
an e-mail
the
destination
MessageBuilder
message.
emailobject's
address to the
MessageBuilder
getOutboundMsg
object's
method
toto
method.
complete
1.1 The MessageManager
object
calls
the MIMEParser
and
fetch
new class's
message.
parse method.
1.1.3
Thethe
MIMEParser
object
passes
It will
the
originating
anemail
OutboundMessageIF
address
to the
1.2
Thereturn
MessageManager
object
calls
object
MessageBuilder
the
OutboundMsg
that encapsulates
object's
object's
the
from
send
new
method.
message
method.
inMIMEParser
thesends
needed
theformat.
message
off
1.1.4
TheThis
object passes
the
and
email
completes
the message
simple
content
processing.
1.1.1
Themessage's
MIMEParser
object
callsto
the MessageBuilder object's
class's getInstance
plainText
method, passing it the destination
method.
email The
address.
By analyzing
thepasses
1.1.5
MIMEParser
object
address,
the
emailthe
message's
method attached
selects a jpeg
concrete
subclass
image
to of
thethe
MessageBuilder
MessageBuilder
object's
class
and createsmethod.
jpegImage
an instance of it.
Factory Method
Define uma interface para criar um
objeto, mas deixa as subclasses decidirem
qual classe ser instanciada
Permite a uma classe postergar a
instanciao de subclasses
Bastante utilizado em toolkits e
frameworks para a instanciao de
objetos
Factory Method
FactoryIF. This
ProductIF.
The objects
is an applicationcreated using this
pattern mustinterface.
independent
implement
Objects
an interface
that create
in this
role.
ProductIF
objects on behalf of
CreationRequester
must implement
ConcreteProduct1,objects
ConcreteProduct2,
this
Interfaces
thisare
sort declare
and interface.
so on. Classes
in thisofrole
ainstantiated
method that
bycan
a Factory
be called
object.
by a Classes in
this role must implement
CreationRequester
object the
to create
ProductIF
concrete
interface.objects. The arguments this
product
method
takes are discussed
CreationRequester.
A classunder
in thisthe
role is
an application-independent
Implementation
section for class
this pattern.
that needs
to create application-specific
Interfaces
filling this role willclasses.
typically
It does
have
indirectly
throughthe
an instance
of a class
asoname
that includes
word Factory,
such
that
as
DocumentFactoryIF
implements the FactoryIF
or ImageFactoryIF.
interface.
Factory. This is an application-specific class
that implements the appropriate FactoryIF
interface and has a method to create
ConcreteProduct objects. Classes filling this
role will typically have a name, such as
DocumentFactory or ImageFactory, that
contains the word Factory.
Factory Method
Sem
Factory Method
Prototype
Especifica os tipos de objetos a serem criados
usando uma instncia como prottipo e cria
novos objetos copiando este prottipo
Permite que um objeto crie objetos customizados
sem conhecer a sua classe exata ou os detalhes
de como eles sero criados
Exemplo:
Criao de objetos de desenho CAD a partir de
prottipos previamente criados
O padro Singleton
Objetivo
Queremos apenas uma instncia de um objeto, mas no existe um objeto global que
controla a instanciao deste objeto
Queremos tambm garantir que todas as entidades esto usando a mesma instncia
deste objeto
Problema
Vrios objeto clientes diferentes precisam referenciar a mesma coisa, e queremos
garantir que no exista mais que uma dela
Soluo
Garantir uma nica instncia
Consequncias
Clientes no precisam se preocupar se uma instncia do Singleton existe pois o
controle feito internamente
Implementao
Adicione um membro esttico privado da classe que referencia o objeto desejado
(inicialmente = null)
Adicione um mtodo esttico pblico que instancia esta classe se este membro null
(e atribui o valor do membro) e retorna o valor do membro
Adicione o estado do construtor para privado ou protegido de maneira que ningum
poder instanciar a classe diretamente e sobrepor o mecanismo do construtor
esttico
Return instance
+ static getInstance()
+ SingletonOperation()
+ getSingletonData()
Padres de Projeto
Estruturais
- Adapter
Bridge
- Composite
- Decorator
- Faade
- Flyweight
- Proxy
-
Adapter
Converte a interface de uma classe em
outra interface esperada pelos clientes
Permite que certas classes trabalhem em
conjunto, pois de outra forma seria
impossvel por causa de suas interfaces
incompatveis
Exemplo:
Adapter
E queira adicionar...
Bridge
Composite
Composite
Decorator
Atribui responsabilidades adicionais a um
objeto dinamicamente
Fornece uma alternativa flexvel
utilizao de subclasses para a extenso
de funcionalidades
Permite a criao de uma cadeia de
objetos que iniciam com o objeto
decorator, o objeto responsvel pela nova
funcionalidade e termina com o objeto
original
Decorator
Exemplo
O padro Facade
Objetivo
Desejamos simplificar como usar um sistema existente,
precisamos definir a nossa prpria interface
Problema
Precisamos utilizar apenas uma parte de um sistema complexo
ou precisamos interagir com o sistema de uma maneira em
particular
Soluo
A Facade apresenta uma nova interface para o cliente de um
sistema existente
Consequncias
A Facade simplifica o uso do subsistema requerido
Como ela no completa, certas funcionalidades podem no
estar disponveis para o cliente
Implementao
Define uma nova classe (ou classes) que possui a interface
necessria
Esta nova classe utiliza o sistema existente
O padro Facade
Facade
Classes do subsistema
Cliente B
Model
Element
Cliente A
Database Facade
Element
Model
Database
Flyweight e Proxy
Flyweight
Usa compartilhamento para suportar grandes
quantidades de objetos, de granularidade fina, de
maneira eficiente
Empregado em sistemas com grande nmero de
objetos
Proxy
Fornece um objeto representante ou um
marcador de outro objeto para controlar o
acesso ao mesmo
Empregado em algumas implementaes de
CORBA
Padres de Projeto
Comportamentais
Chain of Responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
-
Chain of Responsibility
Evita o acoplamento entre o remetente
de uma solicitao e o destinatrio da
solicitao, dando a mais de um objeto a
chance de tratar a solicitao
Encadeia os objetos receptores e passa a
solicitao ao longo da cadeia at que um
objeto a trate
Utilizado no tratamento de eventos de
usurios
Chain of Responsibility
Command
Interpreter
Dada uma linguagem, define uma
representao para sua gramtica
juntamente com um interpretador que
usa a representao para interpretar
sentenas nesta linguagem
Utilizado para interpretar uma linguagem
com uma rvore sinttica abstrata, como
em compiladores de linguagens orientadas
a objetos
Iterator
Fornece uma maneira de acessar
sequencialmente os elementos de um
objeto agregado sem expor sua
representao subjacente
Utilizado, por exemplo, na C++ Standard
Template Library
Iterator
Mediator
Define um objeto que encapsula a
interao entre um conjunto de objetos
Promove o acoplamento fraco ao evitar
que os objetos se refiram explicitamente
uns aos outros, permitindo a variao das
interaes independentemente
Utilizado na arquitetura de aplicaes
Smalltalk
Memento
Sem violar a encapsulao, captura e
externaliza um estado interno de um
objeto, de modo que o mesmo possa
posteriormente ser restaurado para este
estado
Utilizado para armazenar um instantneo
do estado do objeto sem romper sua
encapsulao
O padro Observer
Objetivo
Define uma dependncia um-para-muitos entre objetos de
maneira que quando um objeto muda de estado, todas as suas
dependncias so notificadas e atualizadas automaticamente
Problema
Precisamos notificar uma lista varivel de objetos quando um
evento ocorre
Soluo
Observers delegam a responsabilidade pelo monitoramento de
um evento a um objeto central (Subject)
Consequncias
Subjects podem avisar Observers sobre evento que eles no
precisam conhecer
Implementao
Objetos que precisam ser notificados (Observers) devem ser
associados ao objeto que est observando (Subject) pela
ocorrncia do evento ou que dispara o evento
Quando o evento ocorre, o Subject avisa ao Observer
Classe
Responsabilidade
Customer
WelcomeLetter
AddrVerification
State
Strategy
Template Method
Visitor
Representa uma operao a ser
executada sobre os elementos de uma
estrutura de objetos
Permite a definio de uma nova
operao sem mudar as classes dos
elementos sobre os quais opera
Utilizado para executar uma srie de
operaes sobre objetos que possuem
interfaces diferentes, sem poluir a
interface dos mesmos
Referncias
Padres de Projeto de
Software
Algoritmos e Programao II
Fbio M. Pereira