Baixe o app para aproveitar ainda mais
Prévia do material em texto
AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com PADRÕES DE CRIAÇÃO CREATIONAL PATTERNS AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com Padrões de criação • Abstraem o processo de instanciação • Tornam um sistema independente da forma como os objetos são criados, compostos e representados. AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com Padrões Criacionais (5) 1. Abstract Factory 2. Builder 3. Factory Method 4. Prototype 5. Singleton AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 1. Abstract Factory (Fábrica Abstrata) • Objetivo: prover uma interface para criação de famílias de objetos relacionados sem especificar sua classe concreta. • Motivação: Considere uma aplicação com interface gráfica que é implementada para plataformas diferentes (Motif para UNIX e outros ambientes para Windows e MacOS). ... AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 1. Abstract Factory - Motivação • As classes que implementam os elementos gráficos não podem ser definidas estaticamente no código. Precisamos de uma implementação diferente para cada ambiente. Até em um mesmo ambiente, gostaríamos de dar a opção ao usuário de implementar diferentes aparências (look-and- feels). • Podemos solucionar este problema definindo uma classe abstrata para cada elemento gráfico e utilizando diferentes implementações para cada aparência ou para cada ambiente. • Ao invés de criarmos as classes concretas com o operador new, utilizamos uma Fábrica Abstrata para criar os objetos em tempo de execução. • O código cliente não sabe qual classe concreta utilizamos. AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 1. Abstract Factory Use uma fábrica abstrata quando: • O sistema precisa ser independente de como os produtos são criados, compostos e representados. • O sistema deve ser configurado com uma de múltiplas famílias de produtos. • Produtos de uma família devem ser sempre utilizados em conjunto e isto precisa ser garantido. • Deseja-se disponibilizar uma biblioteca de classes de produtos, mas revelar somente as suas interfaces, não suas implementações. Aplicabilidade: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 1. Abstract Factory - Estrutura Client AbstractFactory CreatProductA() CreatProductB() AbstractProductA ProductA1 ProductA2 ConcreteFactory2 CreatProductA() CreatProductB() ConcreteFactory1 CreatProductA() CreatProductB() AbstractProductB ProductB1 ProductB2 AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder • Objetivo: • Separar a construção de um objeto complexo de sua representação para que o mesmo processo de construção possa criar representações diferentes. • Mover a lógica de construção de uma classe para um objeto externo, a fim de reduzir a complexidade da mesma e permitir a construção gradual de objetos- alvo a partir dessa classe. • Motivação: • Suponha que se deseje converter documentos RTF para outros formatos (texto, HTML, ...) • Seria necessário verificar quais partes um documento pode ter e definir uma especialização para cada uma das partes AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder Estrutura: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder Motivação: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 2. Builder Aplicabilidade: • Builder permite que uma classe se preocupe com apenas uma parte da construção de um objeto. É útil em algoritmos de construção complexos. • Use-o quando o algoritmo para criar um objeto complexo precisar ser independente das partes que compõem o objeto e da forma como o objeto é construído. • Builder também suporta substituição dos construtores, permitindo que a mesma interface seja usada para construir representações diferentes dos mesmos dados. • Use quando o processo de construção precisar suportar representações diferentes do objeto que está sendo construído. AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 3. Factory Method • Objetivo: • Definir uma interface de criação de objetos mas deixar as subclasses decidirem qual objeto criar • Motivação: • Na construção de frameworks, não é possível, a priori, determinar qual elemento deve ser criado • A solução é permitir que o instanciador do framework faça a criação de uma instância específica AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 3. Factory Method Estrutura AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 3. Factory Method • Aplicabilidade: • Sugestões para o uso desse padrão (GAMMA, HELM, et al., 2000): 1. Quando uma classe não pode antecipar ou conhecer a classe dos objetos que deve criar; 2. Quando uma classe quer suas subclasses para especificar os objetos que cria; 3. Quando classes delegam responsabilidade à alguma das várias subclasses ajudantes, e deseja- se localizar qual é a subclasse ajudante acessada. AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 3. Factory Method • Exemplo: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 4. Prototype AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 4. Prototype • Objetivo: • Especificar tipos de objetos a serem criados usando protótipos e aplicando clonagem nesses protótipos • Motivação: • Existem situações onde é desejável utilizar um objeto modelo complexo para a criação de outros objetos • Supondo o caso de uma ferramenta de desenho, pode ser útil criar estruturas complexas e fazer uso delas como base para outros desenhos mais complexos AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 4. Prototype • Estrutura: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 4. Prototype Aplicabilidade: • O padrão Prototype pode ser utilizado em sistemas que precisam ser independentes da forma como os seus componentes são criados, compostos e representados. O padrão Prototype pode ser útil em sistemas com as seguintes características: • Sistemas que utilizam classes definidas em tempo de execução; • Sistemas que utilizam o padrão Abstract Factory para criação de objetos. Neste caso, a hierarquia de classes pode se tornar muito complexa e o padrão Prototype pode ser uma alternativa mais simples, por realizar a mesma tarefa com um número reduzido de classes; AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 4. Prototype Exemplo: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com5. Singleton • Objetivo: • Assegurar que uma determinada classe tem somente uma única instância e fornecer um ponto global de acesso a ela • Motivação: Garantir que exista um determinado número X de objetos de uma classe • Independentemente do número de requisições que receber para criá-lo Exemplos de aplicação • Único banco de dados • Único acesso ao arquivo de log • Única fachada (padrão Façade) AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 5. Singleton • Propósito • Assegurar o controle da quantidade de instâncias da classe • Ponto de acesso global a ela • Aplicabilidade • Exatamente uma instância da classe • Acessível pelos clientes de ponto de acesso bem conhecido • Instância única deve ser extensível através de subclasses • Clientes capazes de usar instância estendida sem alterar seu código AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 5. Singleton • Estrutura • Participantes • Singleton • Define operação Instance que permite que clientes acessem instância única • Instance é operação de classe • Pode ser responsável pela criação de sua única instância AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 5. Singleton • Consequências • Acesso controlado a instância única • Espaço de nomes reduzido • Refinamento de operações e representação • Não há número variado de instâncias • Mais flexível do que operações de classes AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 5. Singleton Exemplo: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 5. Singleton Exemplo: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com 5. Singleton Exemplo: AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com Exercícios – Padrões Criacionais 1. Implemente uma aplicação que constrói Figuras: (Use uma abstract Factory para controlar a criação de todos os objetos) • Pontos (x, y) • Circulos (Ponto, raio) • Retangulos (Ponto, Ponto) 2. Uma aplicação precisa construir objetos Pessoa e Empresa. Para isto, precisa ler dados de um banco para cada produto. 1. Para construir uma Pessoa é preciso obter nome e identidade. Apenas se os dois forem lidos a pessoa pode ser criada. 2. Para construir uma empresa é preciso ler o nome e identidade do responsável e depois construir a pessoa do responsável. 3. Utilize a fachada Figura, onde os construtores são guardados, e um método estático que seleciona o construtor desejado com uma chave. Figura!!! AULA 4 PADRÕES DE PROJETO DE SOFTWARE JORGE ZAVALETA - zavaleta.jorge@gmail.com Exercícios – Padrões Criacionais 4. Elabore um programa para exercitar a criação do padrão Prototype: • O Cliente é um revendedor de automóveis VW. • O (Abstract) Prototype é um modelo de automóvel GOL. • Os ConcretePrototype são modelos de Automóveis GOL. • Modelo Luxo. • Gol com Motor AP de 250HP e Pneus 13/185. • Modelo Standard. • Gol com Motor AP de 180HP e Pneus 13/185 • Crie uma aplicação de venda de automóveis que “vende” Gol através da clonagem dos modelos Luxo e Standard 5. Usando o padrão singleton implemente uma conexão a um banco de dados.
Compartilhar