• Nenhum resultado encontrado

Tópicos Avançados em Linguagem de Programação. Builder. Builder. Builder. Classificação: Padrões de Projeto. Builder Pattern.

N/A
N/A
Protected

Academic year: 2021

Share "Tópicos Avançados em Linguagem de Programação. Builder. Builder. Builder. Classificação: Padrões de Projeto. Builder Pattern."

Copied!
6
0
0

Texto

(1)

04/04/08 1

Tópicos Avançados em

Linguagem de Programação

Padrões de Projeto

Builder Pattern

Prof. Alexandre Vidal

DEINF-UFMA

Ciência da Computação

04/04/08 2

Builder



Classificação:

Propósito: Criacional / Escopo: Objetos

Padrão de Construção (intenção/Metsker)



Intenção:

separar a criação de um objeto complexo de sua

representação de modo que o mesmo processo de

construção possa criar diferentes representações.

04/04/08 3

Builder



Motivação:

−um leitor para documentos RTF (Rich Text Format) deve

poder converter o documento para diferentes formatos

−o número de formatos possíveis é aberto −portanto, é preciso facilitar a adição de uma nova

conversão sem modificar o leitor

−uma solução é configurar o RTFreader com um conversor,

para converter e representar o texto em um novo formato

−subclasses do conversor são especializadas em diferentes

conversões e formatos

04/04/08 4

Builder



Motivação:

−no padrão Builder:

o conversor é chamado builder

o leitor é chamado director

−o leitor é configurado com o builder

−o padrão separa o algoritmo para interpretação do

formato textual (no leitor)...

−do algoritmo que converte o formato lido em outro

formato, e que cria, compõe e representa esse novo formato (no builder)

(2)

04/04/08 5

Builder



Motivação:

04/04/08 6

Builder



Aplicabilidade ( quando usar o padrão ) :

quando o algoritmo para criação de um objeto

complexo deve ser independente das partes que o

compõem e de como elas são montadas

o processo de construção deve permitir diferentes

representações para o objeto construído

04/04/08 7

Builder



Estrutura

04/04/08 8

Builder



Estrutura

(3)

04/04/08 9

Builder



Participantes

Builder:

especifica uma interface abstrata para criação de partes de um objeto-produto

ConcreteBuilder:

implementa a interface do Builder para construir e montar partes do produto

define e mantém a representação que cria

fornece interface para recuperação do produto

04/04/08 10

Builder



Participantes

Director:

constrói um objeto usando a interface do Builder

Product:

representa o objeto complexo em construção

inclui classes que que definem as partes constituintes, inclusive as interfaces para a montagem das partes no resultado final

04/04/08 11

Builder



Colaborações

o cliente cria o objeto Director e o configura com o

objeto Builder desejado

Director notifica o construtor sempre que uma

parte do produto deve ser construída

o cliente recupera o produto do construtor

04/04/08 12

Builder



Conseqüências



permite variar a representação interna de um

produto



isola o código para construção e representação



oferece controle mais fino sobre o processo de

(4)

04/04/08 13

Builder



Implementação (aspectos)

interface de montagem e construção:

um modelo que apenas agrega os novos construtos ao produto é, em geral, suficiente, mas às vezes é necessário acessar partes já agregadas ao produto −

porque não classes abstratas para produtos?

em geral, os produtos têm representações tão diferentes, que não há vantagens em ter uma superclasse comum

04/04/08 14

Builder



Implementação (aspectos)

Métodos vazios como default em Builder.

em C++, métodos build intencionalmente não são declarados virtuais puros

antes, são definidos como métodos vazios

os clientes sobrescrevem apenas as operações que lhes interessam 04/04/08 15

Builder

 Exemplo de Código class MazeBuilder { public:

virtual void BuildMaze() { } virtual void BuildRoom(int room) { }

virtual void BuildDoor(int roomFrom, int roomTo) { } virtual Maze* GetMaze() { return 0; }

protected: MazeBuilder(); }

04/04/08 16

Builder

 podemos alterar a função CreateMaze para receber o builder como um parâmetro:

Maze* MazeGame::CreateMaze (MazeBuilder& builder) { builder.BuildMaze();

builder.BuildRoom(1); builder.BuildRoom(2); builder.BuildDoor(1, 2); return builder.GetMaze(); }

(5)

04/04/08 17

Builder

 podemos reusar MazeBuilder para construir diferentes tipos de labirintos. A operação CreateComplexMaze é um exemplo: Maze* MazeGame::CreateComplexMaze (MazeBuilder&

builder) { builder.BuildRoom(1); // ... builder.BuildRoom(1001); return builder.GetMaze(); } 04/04/08 18

Builder

class StandardMazeBuilder : public MazeBuilder { public:

StandardMazeBuilder(); virtual void BuildMaze(); virtual void BuildRoom(int); virtual void BuildDoor(int, int); virtual Maze* GetMaze(); private:

Direction CommonWall(Room*, Room*); Maze* _currentMaze; };

04/04/08 19

Builder

void StandardMazeBuilder::BuildRoom (int n) { if (!_currentMaze->RoomNo(n)) { Room* room = new Room(n); _currentMaze->AddRoom(room); room->SetSide(North, new Wall); room->SetSide(South, new Wall); room->SetSide(East, new Wall); room->SetSide(West, new Wall); } }

04/04/08 20

Builder

void StandardMazeBuilder::BuildDoor (int n1, int n2) {

Room* r1 = _currentMaze->RoomNo(n1); Room* r2 = _currentMaze->RoomNo(n2); Door* d = new Door(r1, r2);

r1->SetSide(CommonWall(r1,r2), d); r2->SetSide(CommonWall(r2,r1), d); }

(6)

04/04/08 21

Builder

Clientes podem agora usar CreateMaze junto com StandardMazeBuilder para criar um labirinto: Maze* maze; MazeGame game; StandardMazeBuilder builder; game.CreateMaze(builder); maze = builder.GetMaze(); 04/04/08 22

Builder

 Usos conhecidos

−ver página 111 no GoF (traduzido);

 Padrões Relacionados

−Abstract Factory

ênfase na construção de família de produtos (simples ou

complexos), enquanto Builder constrói um objeto complexo passo a passo;

O produto é devolvido imediatamente, enquanto Builder

devolve o produto como um passo final.

−Composite

Referências

Documentos relacionados

dominaç ção do capital estrangeiro, enfraquecendo o ão do capital estrangeiro, enfraquecendo o nacionalismo econômico criado por Vargas... nacionalismo econômico criado

gunda variante mais produtiva; (b) diante de [i], [¥] concorre com o cancelamento ou com [l], condicionado, sobretudo pela presença da nasal palatal no vocábulo, não se

– No trabalho sempre se lida com variabilidades não antecipadas ou não consideradas pela segurança formal. – Diagnosticar o estado do sistema e resolver isso exige

Por outro lado, trabalhos como os de Antonio Sérgio Guimarães têm atacado duramente essa versão, investindo na demonstração da existência de racismo entre os

Cabe-nos, portanto, indicar, respeitando a singularidade de cada caso, que a relevância do entendimento da função do segredo no tratamento psíquico dessas mulheres

Buscando retratar o processo e seu signiicado como focos princi- pais, os procedimentos técnicos utilizados foram: leitura de biblio- graia que fundamenta o tema da pesquisa

Sobre o leite materno, julgue as afirmativas abaixo. I - Quando o leite materno passa da condição de colostro para leite maduro, ocorre uma redução da quantidade

GRUPOS ENVOLVIDOS 1ºPERIODO Promover uma cidadania responsável; Melhorar continuamente o clima relacional e as relações interpessoais entre os diversos intervenientes