Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação...

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

Transcript of Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação...

Page 1: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

Padrões de Projeto

Prof. Alexandre Vidal

DEINF-UFMA Janeiro de 2007

Page 2: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● padrões de criação● ajudam a tornar um sistema independente de

como seus objetos são criados, compostos e representados;

● padrões estruturais● se preocupam com a forma como classes e

objetos são compostos para formar estruturas maiores;

● padrões comportamentais● tratam de algoritmos e da atribuição de

responsabilidade entre objetos.

Page 3: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Padrões de criação (5)– Factory Method;– Abstract Factory;– Builder;– Singleton;– Prototype.

Page 4: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Padrões estruturais (7)– Decorator;– Composite;– Proxy;– Adapter;– Bridge;– Flyweight;– Facade.

Page 5: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Padrões comportamentais (11)● Strategy;● Iterator;● Template Method;● Mediator;● Observer;● Chain of Responsability;● Memento;● Command;● State;● Visitor;● Interpreter.

Page 6: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– intenção:

● define uma interface para criar um objeto,mas deixa as subclasses decidirem que classes instanciar.

– aka: virtual constructor– motivação: frameworks

Page 7: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– aplicabilidade:

● uma classe não pode antecipar a classe de objetos que deve criar;

● uma classe quer que suas subclasses especifiquem os objetos que criam;

● localizar o conhecimento a respeito de subclasses às quais são delegadas responsabilidades específicas.

Page 8: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– Estrutura

Page 9: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– Participantes

● Product: define a interface dos objetos criados pelo método fábrica;

● ConcreteProduct: implementa a interface definida em Product;

● Creator: declara o método fábrica (que retorna um objeto do tipo Product;

● ConcreteCreator: redefine o método fábrica para retornar uma instância da classe ConcreteProduct.

Page 10: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– Conseqüências

● o código lida somente com a interface de Product;

● só é vantagem quando Creator precisa ter subclasses de qualquer maneira;

● conecta hierarquia de classes paralelas que ocorrem quando uma classe delega algumas de suas responsabilidades para uma classe separada (ver página 114, GoF traduzido).

Page 11: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– Colaborações

● Creator depende de suas subclasses para definir o método fábrica que retorne uma instância do ConcretProduct apropriado;

Page 12: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– Implementação (opções)

● Creator é uma classe abstrata e não fornece implementação para o método fábrica;

● Creator é uma classe concreta e fornece implementação por omissão (default) para o método fábrica;

● métodos fábrica parametrizados;● templates para evitar o uso de subclasses.

Page 13: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– exemplo de código

● exemplos em sala;● tarefa do aluno

– identificar uma situação em um sistema a sua escolha para empregar o Factory Method;

– implementar e testar.– mostrar o código em sala.

Page 14: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Factory Method– usos conhecidos

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

● Abstract Factory● Template Method;● Prototype.

– Como o Factory Method promove fraco acoplamento de código ?

Page 15: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– intenção:

● define uma família de algoritmos, encapsula cada algoritmo e os torna intercambiáveis, permitindo que o algoritmo varie independente dos clientes que o utilizam.

– aka: Policy

Page 16: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– motivação:

● clientes que necessitam de diferentes algoritmos se tornam mais complexos se os incluirem em seu código;

● diferentes algoritmos são adequados em diferentes situações na resolução de um mesmo problema;

Page 17: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– aplicabilidade:

● muitas classes relacionadas diferem somente no seu comportamento;

● você necessita de variantes de um algoritmo;● um algoritmo usa dados sobre os quais o cliente

não precisa ter conhecimento;● comandos condicionais relacionados para

escolher entre muitos comportamentos de uma classe podem ser movidos para sua própria classe Strategy

Page 18: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– Estrutura

Page 19: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– Participantes

● Strategy: define uma interface comum para todos os algoritmos suportados;

● ConcreteStrategy: implementa o algoritmo usando a interface de Strategy;

● Context: – é configurado com um objeto ConcreteStrategy;– mantém uma referência para um objeto Strategy;– pode definir uma interface que permite a Strategy

acessar seus dados.

Page 20: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– Colaborações

● Strategy e Context interagem para implementar o algoritmo escolhido;

● os clientes usualmente criam e passam um objeto ConcreteStrategy para o contexto e passam a interagir diretamente com o contexto;

Page 21: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– Conseqüências

● famílias de algoritmos relacionados;● uma alternativa ao uso de subclasses;● estratégias eliminam comandos condicionais da

linguagem de programação;● possibilidade de escolha de implementações;● os clientes devem conhecer diferentes

estratégias;● custo de comunicação entre Strategy e Context;● aumento do número de objetos.

Page 22: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– Implementação (aspectos)

● definindo as interfaces de Strategy e Context;● estratégias e parâmetros template;● tornando os objetos Strategy opcionais.

Page 23: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– exemplo de código

● exemplos em sala;● tarefa do aluno

– identificar uma situação em um sistema a sua escolha para empregar o padrão Strategy;

– implementar e testar. (não precisa criar diferentes algoritmos);

– mostrar o código em sala.

Page 24: Padrões de Projeto - deinf.ufma.brvidal/Topicos2006_2/aula02.pdf · Linguagem de Programação Factory Method – aplicabilidade: uma classe não pode antecipar a classe de objetos

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

● Strategy– usos conhecidos

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

● Flyweight.