Escolar Documentos
Profissional Documentos
Cultura Documentos
Bibliografia
LARMAN, Graig. Utilizando UML e Padroes:Uma introduo a anlise e ao projeto orientados a objetos. Porto Alegre: Bookman, 2a Edio, 2004. captulo 23 Gamma; Helm; Johnson; Vlissides. Padres de Projeto: Solues Reutilizveis de Software Orientado a Objetos. Bookman, 2000
2
Nomenclatura
O termo pattern tem vrias tradues:
padro mas padro tambm a traduo de standard molde bem mais apropriado, mas no usado na literatura
Padres de projeto
O livro Design Patterns (1995) aplicou os conceitos introduzidos por Alexander na Arquitetura civil ao projeto de software
mais especificamente, projeto orientado a objetos
DANGER!
Padres de projeto tornam o cdigo mais flexvel
nem sempre isso uma boa coisa evite tornar flexvel o que no precisa ser flexvel hoje.
Trs categorias
Padres de criao
maneiras comuns de se instanciar objetos
Padres estruturais
maneiras comuns de se organizar classes e interfaces
Padres comportamentais
maneiras comuns nas quais objetos interagem
Padres de criao
Factory Method Abstract Factory Builder Prototype Singleton
Padres de criao
Abstraem o processo de instanciao Ajudam a tornar o sistema independente de como objetos so criados Encapsulam conhecimento sobre quais classes concretas o sistema usa Esconde como instncias dessas classes so criadas
Factory Method
Inteno
Definir uma interface para criar um objeto, mas deixar que as subclasses decidam qual classe deve ser instanciada. Permitir que uma classe delegue a instanciao s suas subclasses.
Motivao
Suponha que voc esteja construindo uma aplicao para uma locadora de vdeo que tambm vende fitas. Como acrescentar uma nova fita locadora?
Store AddTape( ) RentalTape SaleTape
10
Tape
Product
product = FactoryMethod( )
ConcreteProduct
ConcreteCreator FactoryMethod( )
return new ConcreteProduct
11
Tape
tape = CreateTape( )
RentalTape
RentalStore CreateTape( )
return new RentalTape
12
13
Singleton
Inteno
Garantir que uma classe tenha apenas uma instncia
Motivao
Muitas classes devem ter apenas uma instncia escalonadores, window managers, objetos top-level (como a locadora de vdeo) e assim por diante. Deve ser possvel garantir essa restrio.
Singleton static Instance( ) SingletonOperation( ) GetSingletonData( ) static uniqueInstance singletonData
return uniqueInstance
15
Singleton - Exemplo
Store static Instance( ) AddTape( ) GetAddress( ) static uniqueInstance Address
return uniqueInstance
class Store { public: static Store* Instance( ); protected: Store(); private: static Store* uniqueInstance; }
16
Singleton - Exemplo
Store static Instance( ) AddTape( ) GetAddress( ) static uniqueInstance Address
return uniqueInstance
Store* Store::uniqueInstance = 0; Store* Store::Instance( ) { if (uniqueInstance == 0) { uniqueInstance = new Store; } return uniqueInstance; }
17
Singleton - Aplicabilidade
Use o padro Singleton para
garantir que h no mximo uma instncia de uma classe permitir que clientes tenham fcil acesso a essa instncia permitir que a instncia nica seja extensvel atravs de subclasses.
18
Singleton Consequncias
Acesso controlado nica instncia Espao de nomes reduzido
melhor do que variveis globais que guardam instncias nicas
Pode ter subclasses Permite um nmero varivel de instncias Mais flexvel do que operaes de classe
ou seja, mtodos static operaes de classe no podem ser usadas polimorficamente
19
Padres estruturais
Adapter Bridge Composite Decorator Faade Flyweight Proxy
20
Padres estruturais
Lidam com o modo como classes e objetos so compostos para formar estruturas maiores Descrevem formas de se compor objetos para obter funcionalidade nova
21
Adapter
Inteno
Converter a interface de uma classe em outra interface que os clientes esperam. Permitir que classes trabalhem juntas quando no poderiam normalmente devido a interfaces incompatveis.
Motivao
Suponha que voc draw( ) queira reutilizar uma getBoundingBox( ) classe como parte da Polygon sua hierarquia, mas ela no tem a interface que display( ) voc precisa. getBoundaries( ) Circle Rectangle
22
Shape
23
Adapter - Estrutura
Client Target Request( ) Adaptee SpecificRequest( )
Adapter Request( )
adaptee
adaptee->SpecificRequest( )
24
Adapter - Exemplo
Client Shape draw( ) Polygon Display( )
25
Adapter - Aplicabilidade
Use o padro adapter para
usar uma classe existente que no tem uma interface que corresponde s suas necessidades
26
Adapter - Consequncias
Adapters (classes)
faz a adaptao usando uma classe adaptadora concreta
no funciona se precisarmos adaptar uma classe e suas subclasses
permite que o adaptador altere o comportamento do adaptado introduz apenas um objeto no requer o uso de pointers (C++)
27
Adapter - Consequncias
Adapter
permite que um nico Adapter funcione com muitos adaptados
o adaptado e todas suas subclasses pode acrescentar funcionalidade a todos os adaptados de uma vez
28
Composite
Inteno
Compor objetos em estruturas de rvore para representar hierarquias parte-todo. Composite permite aos clientes tratarem objetos individuas e compostos de maneira uniforme.
Motivao
Suponha que voc tenha um editor grfico que permita que voc agrupe figuras para compor figuras mais complexas que podem ser manipuladas como figuras primitivas.
29
Composite - Estrutura
Client Component Operation( ) Add(Component) Remove(Component) GetChild(int)
children
Leaf Operation( )
30
10
Composite - Exemplo
Client Graphic Draw( ) Add(Graphic) Remove(Graphic) GetChild(int)
graphics
Circle Draw( )
31
Composite - Aplicabilidade
Use o padro Composite para
representar hierarquias parte-todo recursivamente permitir aos clientes que ignorem a diferena entre composies de objetos e objetos individuais
32
Composite - Consequncias
Define hierarquias de classes que consistem de objetos primitivos e objetos compostos
sempre que um cliente esperar um objeto primitivo, pode receber um composto
Simplifica os clientes
os cliente no sabem se esto lidando com objetos simples ou compostos.
Facilita a adio de novos tipos de componentes Pode tornar o projeto geral demais
difcil restringir os componentes de um composite.
33
11
Faade
Inteno
Prov uma interface nica para um conjunto de interfaces em um subsistema. Uma faade define uma interface de alto nvel que torna o subsistema mais fcil de usar.
Motivao
Suponha que voc tenha um termostato que regula um ar condicionado baseado em vrios sensores e controladores. desired temp?
Desired Temp Actual Temp Occupancy actual temp? Thermostat
anyone in room?
34
Faade - Estrutura
Client
Faade
35
Faade - Exemplo
Thermostat
36
12
Faade - Aplicabilidade
Use o padro Faade para
fornecer uma interface simples para um subsistema complexo desacoplar um subsistema dos clientes e de outros subsistemas definir um ponto de entrada para cada nvel em uma arquitetura de camadas
37
Faade - Consequncias
Isola clientes de componentes do subsistema
reduz o nmero de objetos com os quais o cliente precisa se comunicar torna o subsistema mais simples de se usar
Padres comportamentais
Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
39
13
Padres comportamentais
Lidam com algoritmos e a distribuio de responsabilidades entre objetos Descrevem os padres de comunicao entre objetos relacionados
40
Strategy
Inteno
Definir uma famlia de algoritmos, encapsular cada um, e torn-los intercambiveis. Esse padro deixa o algoritmo variar de forma independente dos clientes que o utilizam.
Motivao
Em um buffer sncrono, h muitas formas de se lidar com as situaes em que o buffer est vazio ou cheio: pode-se ignorar pedidos, ou bloque-los at que possam ser satisfeitos, ou esperar algum tempo antes de desistir.
Como voc permite que o algoritmo seja escolhido em tempo de execuo?
41
Strategy - Estrutura
Context ContextInterface( )
strategy
Strategy AlgorithmInterface( )
ConcreteStrategyA AlgorithmInterface( )
ConcreteStrategyB AlgorithmInterface( )
42
14
Strategy - Exemplo
BoundedBuffer Read( ) Write( )
empty_buffer
BufferStrategy
full_buffer
Handle( )
43
Strategy - Aplicabilidade
Use o padro Strategy para
configurar uma classe com um de muitos comportamentos possveis ter diversos algoritmos do mesmo tipo esconder estruturas de dados complexas e especficas a determinados algoritmos evitar o uso de comandos condicionais dentro de classes para selecionar um entre vrios comportamentos possveis
44
Strategy - Consequncias
Famlias de algoritmos relacionados
Algoritmos so agrupados em sua prpria hierarquia de classes
Elimina comandos condicionais Permite escolha de implementaes Clientes devem estar cientes das estratgias Overhead de comunicao Maior nmero de objetos
45
15
Observer
Inteno
Definir uma dependncia um-para-muitos entre objetos de forma que quando um objeto muda de estado, todos seus dependentes so notificados e atualizados automaticamente.
Motivao
Suponha que voc tem duas formas de aumentar o volume no seu mp3 player usando uma escala deslizante, ou digitando uma percentagem do volume mximo. Como voc garante que uma atualizada se a outra for usada?
46
Observer - Estrutura
Subject Attach(Observer) Detach(Observer) Notify( )
observers
Observer Update( )
subject
observerState = subject->getState( )
47
Observer - Exemplo
Subject Attach(Observer) Detach(Observer) Notify( )
observers
Observer Update( )
subject
16
Observer - Aplicabilidade
Use o padro Observer para
manter dois ou mais aspectos interdependentes de uma abstrao, ao mesmo tempo permitindo que sejam reutilizados independentemente. mudar um objeto causando mudanas em outros objetos, sendo que no se sabe a priori quantos objetos precisam ser mudados. fazer um objeto notificar outros objetos de que seu estado mudou, sem assumir nada sobre os outros objetos.
49
Observer - Consequncias
Acoplamento abstrato entre o sujeito e o observador
O sujeito sabe que tem uma lista de observadores, mas no sabe quem so os observadores.
Atualizaes inesperadas
pode ser difcil descobrir exatamente o que mudou no sujeito
50
17