Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de...

23
Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Transcript of Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de...

Page 1: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

Padrões de Projeto

Prof. Alexandre Vidal

DEINF-UFMA Fevereiro de 2007

Page 2: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– intenção:

● fornecer uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.

– aka: kit

Page 3: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– motivação:

● construção de interfaces de usuário que suportem diferentes estilos de interação, permitindo diferentes apresentações e comportamentos para os widgets de cada estilo;

● as dependências entre as classes concretas de widgets também precisam ser garantidas e implementadas.

Page 4: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– aplicabilidade:

● um sistema não deve depender de como seus produtos são criados, compostos e representados;

● um sistema deve ser configurado como um produto de uma família de muitos produtos;

● garantir que uma família de objetos-produto seja usada em conjunto, se foi projetada com esse fim;

● uma biblioteca de classes é fornecida, mas não se quer revelar suas implementações, apenas suas interfaces.

Page 5: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– Estrutura

Page 6: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– Participantes

● AbstractFactory: declara interface para operações que criam objetos-produto abstratos;

● ConcreteFactory: implementa operações que criam objetos-produto concretos;

● AbstractProduct: declara interface para um tipo de objeto-produto;

● ConcreteProduct: ● define um objeto-produto a ser criado pela fábrica

concreta correspondente;● implementa a interface de AbstractProduct.

Page 7: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– Colaborações

● normalmente uma única instância de uma classe ConcreteFactory é criada em tempo de execução;

● AbstractFactory adia a criação dos objetos produto para a classe ConcreteFactory.

Page 8: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– Conseqüências

✔ isola as classes concretas (não aparecem no código do cliente);

✔ facilita a troca de família de produtos;✔ promove a harmonia entre produtos;✔ é difícil suportar novos tipos de produtos (exige

mudar a classe AbstractFactory e todas as suas subclasses.

Page 9: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– Implementação (técnicas)

● fábricas como Singletons;● criação de produtos:

– FactoryMethod;– Prototype.

Page 10: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Abstract Factory (padrão de criação)– exemplo de código

MazeGame game;

BombedMazedFactory factory;

game.createMaze(factory);

Page 11: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Iterator (padrão comportamental)– usos conhecidos

● ver página 103 no GoF (traduzido);– Padrões Relacionados

● Factory Method;● Prototype;● Singleton.

Page 12: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– 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.

Page 13: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– motivação:

● um leitor de um documento em RTF deveria ser capaz de converter o documento para diferentes formatos. Contudo, o número de formatos possíveis é aberto.

Page 14: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– aplicabilidade:

● 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.

Page 15: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– Estrutura

Page 16: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– 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.

Page 17: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– Participantes

● Director: – constrói um objeto usando a interface do Builder;

● Product: – represnta 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.

Page 18: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– 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.

Page 19: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– 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

construção;

Page 20: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– Implementação (aspectos)

● interface de montagem e construção;● porque não classes abstratas para produtos?

Page 21: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– exemplo de código (java)

public abstract class MultiChoice() {

public MultiChoice(Vector choiceList) {choices = choiceList;

}private Vector choices;public MultiChoiceabstract public Panel getUI();abstract public String getSelected();

}

Page 22: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– exemplo de código (java)

public class ChoiceFactory() {

MultiChoice ui;public MultiChoice getChoiceUI(Vector choices) {

if (choices.size() <= 3ui = new CheckBoxChoice(choices);

elseui = new ListBoxChoice(choices);

return ui;}

}

Page 23: Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Fevereiro de 2007

Tóp icos Avançados em L inguagem de P rogramação

● Builder (padrão de criação)– usos conhecidos

● ver página 111 no GoF (traduzido);– Padrões Relacionados

● Abstract bFactory Method;● Composite.