Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de...
Transcript of Padrões de Projetovidal/Topicos2006_2/aula05.pdf · Tópicos Avançados em Linguagem de...
Tóp icos Avançados em L inguagem de P rogramaçã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
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.
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.
Tóp icos Avançados em L inguagem de P rogramação
● Abstract Factory (padrão de criação)– Estrutura
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.
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.
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.
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.
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);
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.
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.
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.
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.
Tóp icos Avançados em L inguagem de P rogramação
● Builder (padrão de criação)– Estrutura
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.
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.
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.
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;
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?
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();
}
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;}
}
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.