Notação de Classes e Objetos

Documentos relacionados
INF011 Padrões de Projeto. 03 Abstract Factory

Padrões de Projeto. Parte 1. Prof. Fellipe Aleixo

Padrões de Projeto de Software Orientado a Objetos

Padrões de Projeto de Software

Abstract Factory. Prover uma interface para criar uma família de objetos relacionados ou dependentes sem especificar suas classes concretas

Padrões de Projeto. Abstract Factory

INF011 Padrões de Projeto. 05 Factory Method

Factory Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory.

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Abstract Factory. Edeyson Andrade Gomes

Padrões Fábrica. Simple Factory Factory Method

Programação Orientada a Objetos. Padrões de Criação

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

Creational Patterns Factory method

Padrões de Projeto. Factory Method

INF011 Padrões de Projeto. 04 Builder

Padrões GoF Strategy, Observer, Singleton, Abstract Factory e outros...

Singleton. Como a maioria dos programadores organizaria o código para acessar informação de configuração? Eis um exemplo:

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Conceitos de Programação Orientada ao Objecto

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Computação Paralela. Conceitos de Programação Orientada ao Objecto. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI CCO002 Engenharia de Software

Programação Orientada a Objetos. Padrões Estruturais

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Padrões de Projeto. Factory Method

Padrões de Design Orientado a Objetos Design Patterns. Jorge H. C. Fernandes DI-UFPE, Junho de 1999

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

Classes e Objetos. Sintaxe de classe em Java

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Especialização em web com interfaces ricas. Padrões de Projeto - II

As classes Formatador e ElementosAFormatar

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Abstract Factory Pattern

Análise e Projeto Orientados por Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Orientada a Objetos Relacionamentos entre classes

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Computação II Orientação a Objetos

9 Classes Abstractas e Interfaces

" ##$#$!% # & #$#$ !!!!"!

Introdução aos Padrões de Projeto. Sylvio Barbon Jr

Profa. Thienne Johnson

POO29004 Programação Orientada a Objetos

Padrões de Projeto de Software Orientado a Objetos

UNIFEI Disciplina Professor

Palavras Reservadas da Linguagem Java

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

4 Conceito de Herança

Java 2 Standard Edition Classes internas

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

INF011 Padrões de Projeto. 10 Bridge

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

BCC Engenharia de Software Professor Rodrigo Andrade

Computação II Orientação a Objetos

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

Análise e Projeto Orientados por Objetos

POO29004 Programação Orientada a Objetos

Mas o que é mesmo Padrão de Projeto?


Visões Arquiteturais. Visões Arquiteturais

Padrões de Projeto de Software

Linguagem de Programação III

Padrões de Projeto de Software

Programação Orientada a Objetos JAVA - NETBEANS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Interfaces e Classes Abstratas

PROJETO ARQUITETURAL PARTE II: PADRÕES DE PROJETO. Projeto de Programas PPR0001

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

Padrões Comportamentais

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Etapas principais do desenvolvimento de software Padrões arquiteturais Padrões de projeto

Computação II Orientação a Objetos

Padrões de Projeto de Software

Relacionamentos entre objetos

COMPORTAMENTOS - Observações

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

Interfaces e Classes Internas

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Estilo: BlackBoard. BlackBoard = repositório de dados compartilhados

DS: notação. Falta-nos apenas dar exemplos de DSS que contenham a criação de objectos temporários e sua posterior destruição.

PROGRAMAÇÃO ORIENTADA A

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Linguagens de Programação

Programação Orientada a Objetos SANTOS, Rafael

Padrões de Projeto. B r i dge. B r i d ge. T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Classificação: Intenção:

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Objetivos. Explorar os conceitos fundamentais acerca do uso herança na linguagem Java

Herança Tiago Eugenio de Melo

POO Fundamentos Parte III. Professor Vicente Paulo de Camargo

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagens de Programação

Transcrição:

Padrões Criacionais

Notação

Notação de Classes e Objetos referencia objeto ClasseAbstrata agrega um ClasseConcreta operaçãoabstrata() cria muitos SubclasseConcreta1 operação() variáveldeinstância SubclasseConcreta2 pseudo código umobjeto referênciaaobjeto outroobjeto variáveldeinstância

Diagrama de Interação de Objetos umobjeto outroobjeto TEMPO operação ativa sobre o objeto outroobjeto = new Objeto() (instanciação) outroobjeto.método() this.método()

Padrões Criacionais AbstractFactory - Fábrica Abstrata Builder - Construtor FactoryMethod - Método Fabricante Prototype - Protótipo Singleton - Solitário

Padrões Criacionais Em vez de codificar um conjunto fixo de comportamentos em várias classes e poucos objetos, codificar um pequeno conjunto de comportamentos fundamentais e compô-los em um grande número de formas complexas Adquirem mais importância à medida em que o sistema passa a depender mais da composição de objetos do que de herança Agregação em detrimento de especialização

Padrões Criacionais (1/2) AbstractFactory - Fábrica Abstrata (Object) Provê uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. Builder - Construtor (Object) Separa construção da representação de um objeto complexo, de modo que o mesmo processo de construção possa criar diferentes representações. FactoryMethod - Método Fabricante (Class) Define uma interface para criação um objeto, mas deixa subclasses decidir quais classes instanciar. Permitindo a uma classe delegar instanciação a subclasses.

Padrões Criacionais (2/2) Prototype - Protótipo (Object) Especifica que tipos de objetos criar usando uma instância prototípica, e cria novos objetos através da cópia deste protótipo. Singleton - Solitário (Object) Garante que uma classe possui apenas uma única instância, e provê um ponto global de acesso a ela.

Padrão AbstractFactory

Padrão AbstractFactory Meta Provê uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. Motivação Muitas vezes um programa necessita criar famílias inteiras de objetos que se relacionam apenas entre si As diferentes famílias de objetos apresenta mesma estrutura comum, mas não se relaciona com as outras famílias Exemplo: Suporte a múltiplos look and feel do pacote java.awt

AbstractFactory Estrutura do Padrão client AbstractFactory createproducta() createproductb() abstractproducta producta2 producta1 ConcreteFactory1 createproducta() createproductb() ConcreteFactory2 createproducta() createproductb() abstractproductb productb2 productb1

AbstractFactory Participantes AbstractFactory Declara uma interface para operações que criam objetos (produtos) abstratos ConcreteFactory Implementa a operações para criar objetos (produtos) concretos AbstractProduct Declarea uma interface para um tipo de objeto (produto) ConcreteProduct Define um objeto (produto) para ser criado pela ConcreteFactory correspondente Client Usa apenas interfaces declaradas pela AbstractFactory e AbstractProduct

AbstractFactory Aplicabilidade Use o Padrão AbstractFactory quando: Um sistema deve ser independente de como seus produtos são criados, compostos e representados Um sistema deve ser configurado com uma entre múltiplas famílias de produtos Uma família de produtos foi projetada para trabalhar em conjunto e você necessita garantir o comprimento destas restrições Você quer fornecer uma biblioteca de produtos (biblioteca ou framework), mas quer revelar apenas as interfaces dos produtos, mas não suas implementações

AbstractFactory Colaborações Normalmente uma única instância de uma fábrica concreta é criada em run-time Esta fábrica concreta cria objetos (produtos) com uma implementação particular Para criar produtos diferentes, clientes devem usar fábricas concretas diferentes A AbstractFactory transfere a criação de objetos para as suas subclasses (ConcreteFactory)

AbstractFactory Conseqüências Isola Fábricas Concretas Facilita a Substituição de Famílias de Produtos Promove Consistência Entre Produtos Suporte a Novos Tipos de Produtos é Difícil

AbstractFactory Exercícios Elabore um programa para exercitar a criação do padrão AbstractFactory O cliente é um Motorista. Ele solicita à fábrica a criação de um automóvel que tem um motor e pneus. O Cliente entra no automóvel, liga o motor, e eventualmente fura um pneu A Fábrica Abstrata cria Automóveis com Pneus e Motores As Fábricas Concretas são VW e Ford, que criam automóveis Gol e Ka, respectivamente. Os Pneus da VW são Goodyear, enquanto os Pneus da Ford são Firestone O Motor VW é AP, enquanto que a Ford usa CHT Quando o Motorista entra no GOL ele faz um barulho BRUM!, Ka faz um barulho TREM!. O Motor AP faz um barulho AP Ligado, O Motor CHT faz um barulho CHT ligado Pneu Goodyear quando fura faz um barulho Chash!, Pneu Firestone quando fura faz um barulho TCHEEE!.

Padrão Builder

Padrão Builder Intenção Separar construção da implementação de um objeto complexo, de modo que o mesmo processo de construção possa criar várias representações diferentes Motivação Um programa muitas vezes necessita ler um formato de documento (fonte) e convertê-lo em vários outros formatos diferentes (objeto). Se os formatos (objeto) não são definidos a priori, é possível configurar o programa com um conversor (builder) que pode ser especializado em diferentes formatos e operações de conversão

Padrão Builder Estrutura e Participantes Director builder AbstractBuilder builders construct() buildpart*() for all objects in structure { builder.buildpart*(); } ConcreteBuilder buildpart*() getresult() ConcreteBuilder buildpart*() getresult() ConcreteBuilder buildpart*() getresult() Product Product Product

Padrão Builder Colaborações aclient adirector abuilder abuilder = new ConcreteBuilder() adirector = new Director(aBuilder) adirector.construct() umbuilder.buildparta() umbuilder.buildpartb() umbuilder.buildpartc() abuilder.getresult()

Padrão Builder Aplicabilidade e Conseqüências Use o Padrão Builder Quando O algoritmo para criar um objeto complexo deve ser independente das partes que constróem o objeto e de como elas são montadas O processo de construção necessita fornecer representações diferentes para o objeto que é construído Conseqüências do Padrão Builder Permite variar a representação interna de um produto Isola os códigos de construção e representação Permite controle fino sobre o processo de construção

Padrão Builder Exercícios Elabore um programa para exercitar a criação do padrão Builder O AbstractBuilder é um Metalúrgico. Os ConcreteBuilder são de dois tipos MetalúrgicoBrasileiro e MetalúrgicoAlemão MetalúrgicoBrasileiro constrói um carro Gol com motor de aço e pneus de borracha natural. MetalúrgicoAlemão usa constrói um carro BMW com motor de alumínio e pneus de silicone. O Director é a fábrica, que receber um Builder qualquer (Mecânico) e deixa para o mecânico a tarefa de construir as partes do carro. A fábrica conecta as partes produzidas pelo mecânico.

Padrão FactoryMethod (VirtualConstructor)

Padrão FactoryMethod Intenção Definir uma interface para criação de um objeto, mas deixar que subclasses decidam as classes dos objetos a instanciar Motivação Frameworks para criação de aplicações que trabalham sobre documentos necessitam serem refinados para definir exatamente qual a aplicação a ser criada, e qual o tipo de documento sobre a qual ela vai trabalhar

Padrão FactoryMethod Estrutura e Participantes Product Creator factorymethod() operation()... Product = factorymethod();... ConcreteProduct ConcreteCreator factorymethod() return new ConcreteProduct();

Padrão FactoryMethod Aplicabilidade e Conseqüências Use o Padrão FactoryMethod quando: Uma classe não pode antecipar qual a classe do objeto que ela deve criar. Uma classe quer que suas subclasses definam o objeto que elas criam Classes delegam responsabilidades para uma entre muitas subclasses auxiliares, e você quer limitar o conhecimento de qual subclasse auxiliar recebeu a delegação. Conseqüências Eliminam a necessidade de ligar classes específicas ao código Clientes necessitam criar subclasses sempre que precisam criar produtos Fornecem ganchos para subclasses Conectam hierarquias de classes paralelas

Padrão FactoryMethod Exercícios Elabore um framework ProtoOficinaDeMontagemDeMotores e dois programas (que implementam o framework) para exercitar a criação do padrão FactoryMethod O AbstractProduct é um Motor. Os ConcreteProduct são MotorDeAço e MotorDeAlumínio Motor de alumínio só pode ser de 3 ou 6 cilindros Motor de aço pode ser de 4 ou 8 cilindros Selecionar o # de cilindros através de um diálogo. O Creator é o Metalúrgico MetalúrgicoAlemão cria motores de alumínio. MetalúrgicoBrasileiro cria motores de aço. Após ter os dois programas criados, crie um terceiro, que usa um MotorElétrico e um MetalúrgicoJapones.

Padrão Prototype

Padrão Prototype Intenção Especificar os tipos de objetos a criar usando uma instância prototípica, e criar novos objetos através da clonagem deste protótipo Motivação Você deseja parametrizar o funcionamento de uma parte da aplicação (ToolBar, por exemplo) mas não quer usar herança, pois a quantidade de subclasses diferentes seria muito grande

Padrão Prototype Participantes e Colaboradores Cliente operation() Prototype clone()... p = prototype.clone();... ConcretePrototype1 clone() ConcretePrototype2 clone()

Padrão Prototype Aplicabilidade Use o Padrão Prototype Quando: Um sistema deve ser independente de como seus produtos são criados, compostos e representados, e Quando as classes a instanciar são especificadas em runtime, por exemplo, através de carga dinâmica, ou; para evitar construir uma hierarquia de fábricas que é paralela à hierarquia de produtos, ou; Quando instâncias de uma classe podem ter apenas poucas combinações de estados. Fica então mais conveniente clonar objetos em vez de construir novos objetos

Padrão Prototype Conseqüências Reduz o número de classes que os clientes conhecem Permitem Que o cliente trabalhe com classes específicas de uma aplicação, sem necessidade de recompilação Adicionar e remover produtos em run-time Aspecificar novos objetos através da variação de valores Especificar novos objetos através de variação na estrutura Reduzir o número de subclasses Configuração dinâmica de aplicações Cada subclasse deve implementar o método clone()

Padrão Prototype Exercícios Elabore um programas 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/ Crie uma aplicação de venda de automóveis que vende Gol através da clonagem dos modelos Luxo e Standard

Padrão Singleton

Padrão Singleton Intenção Garantir que uma classe contenha apenas uma instância e prover um ponto de acesso global a esta instância. Motivação Praticamente todo sistema possui uma classe que deve ter apenas uma única instância. Uma alternativa comumente usada em Java é tratar a classe como esta instância Em muitas situações o padrão Singleton é mais indicado

Padrão Singleton Estrutura e Participantes Singleton static instance() singletonoperation() getsingletondata()... return uniqueinstance;... Static uniqueinstance; singletondata;

Padrão Singleton Aplicabilidade e Conseqüências Use o padrão Singleton quando: Deve existir exatamente uma instância de uma classe, e ela deve ser acessível a partir de um ponto bem conhecido Quando esta única instância precisa ser extensível através de herança, e clientes devem estar aptos a usa uma classe estendida sem modificar seu código. Conseqüências Acesso controlado a uma única instância Espaco de nomes reduzido Permite o refinamento de operações e representação Permite variar o número de instâncias Mais flexível que operações de classes

Padrão Singleton Exercícios

Discussão sobre Padrões Criacionais AbstractFactory Builder FactoryMethod Prototype Singleton

Padrões Criacionais Em vez de codificar um conjunto fixo de comportamentos em várias classes e poucos objetos, codificar um pequeno conjunto de comportamentos fundamentais e compô-los em um grande número de formas complexas Adquirem mais importância à medida em que o sistema passa a depender mais da composição de objetos do que de herança Agregação em detrimento de especialização

Padrões Criacionais De Classe Baseados no uso de herança FactoryMethod De Objeto Baseados no uso de delegação AbstractFactory, Builder, Prototype, Singleton

Temas Recorrentes em Padrões Criacionais Encapsulam conhecimento acerca de qual classe concreta o sistema utiliza Todo o resto do sistema conhece os objetos apenas por suas interfaces abstratas Escondem como instâncias destas classes são criadas e agregadas

Padrões Criacionais Permite flexibilidade sobre o quê é criado quem o cria como ele é criado quando é criado As configurações podem ser definidas de modo estático (tempo de compilação) ou dinâmico (runtime)

Fim