padrões-07 - padrões criacionais

12
Padrões de Projeto Padrões Criacionais

Upload: nicola-zagari

Post on 18-Dec-2014

1.699 views

Category:

Technology


9 download

DESCRIPTION

Padrões de Projeto. Padrões Criacionais.

TRANSCRIPT

Page 1: Padrões-07 - Padrões Criacionais

Padrões de Projeto

Padrões Criacionais

Page 2: Padrões-07 - Padrões Criacionais

2 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Padrões Criacionais

•  Abstraem o processo de instanciação – Sistema independente de como seus objetos

são criados, compostos e representados – Um padrão criacional:

• De classe: usa herança para variar a classe que é instanciada

• De objeto: delega instanciação a outro objeto

•  Sistemas hoje dependem mais de composição de objetos do que de herança de classes

Page 3: Padrões-07 - Padrões Criacionais

3 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Padrões Criacionais

• Características comuns do padrões criacionais: – Todos eles encapsulam o conhecimento

sobre quais classes concretas o sistema usa – Escondem como as instâncias destas classes

são criadas e postas juntas •  Alguns são complementares, outros são

“competidores”

Page 4: Padrões-07 - Padrões Criacionais

4 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Exemplo: um jogo de labirinto

• Um labirinto (Maze) é um conjunto de cômodos (Room)

• Um cômodo conhece seus “vizinhos” •  “Vizinhos” podem ser outro cômodo, uma

parede (Wall) ou uma porta (Door) para outro cômodo

• Cada cômodo tem 4 lados: enum Direction (North, South, East, West);

Page 5: Padrões-07 - Padrões Criacionais

5 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Diagrama de Classes do Jogo de Labirinto

Page 6: Padrões-07 - Padrões Criacionais

6 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Classe MapSite

Page 7: Padrões-07 - Padrões Criacionais

7 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Classe Room

Page 8: Padrões-07 - Padrões Criacionais

8 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Classes Wall e Door

Page 9: Padrões-07 - Padrões Criacionais

9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Classe Maze

Page 10: Padrões-07 - Padrões Criacionais

10 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Classe MazeGame

Page 11: Padrões-07 - Padrões Criacionais

11 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Considerações

• O problema com este código não está no tamanho e sim em sua inflexibilidade

• Mudar o labirinto implica em reescrever o código (reimplementar) ou mudar partes (o que está sujeito a erros, além de não promover reuso) – Padrões criacionais tornam mais fácil mudar

as classes que definem os componentes do labirinto

Page 12: Padrões-07 - Padrões Criacionais

12 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari

Reuso do layout do Labirinto

•  Suponha um novo labirinto com: – DoorNeedingSpell – EnchantedRoom

•  Seria necessário recodificar as partes que instanciam estas classes

•  Padrões criacionais provêem diferentes formas de se remover estas referências explícitas a classes concretas:

– Chamando funções virtuais (Factory) – Passando objetos com parâmetros (Abstract Factory) – Usando herança para mudar partes (Builder) – Usando parametrização (Protótipo)