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

Documentos relacionados
INF011 Padrões de Projeto. 04 Builder

Padrões de Projeto. Factory Method

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:

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. Padrões de Projeto. Prof. Alexandre Vidal. DEINF-UFMA Janeiro de 2007

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

M e d iator. Padrões de Projeto. Mediator. Prof. Alexandre Vidal DEINF-UFMA. M e di a t or

Padrões de Projeto. Intenção: Observer. Motivação: Motivação:

Notação de Classes e Objetos

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

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

Palavras Reservadas da Linguagem Java

Introdução à Programação. Encapsulamento e Herança

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

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Padrões Fábrica. Simple Factory Factory Method

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

Análise e Projeto Orientados por Objetos

Padrões de Projeto de Software

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Linguagens de Programação Aula 12

Classe Abstrata e Interface

Análise e Projeto Orientados por Objetos

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

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

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

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Padrões de Projeto. Abstract Factory

Análise e Projeto Orientados por Objetos

Linguagem Algorítmica OO. Linguagem Algorítmica

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Computação II Orientação a Objetos

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

Java para Desktop. Programação Orientada à Objetos 2 JSE

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

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

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos)

Padrões de Projeto. 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. Prof. Alexandre Vidal

INF011 Padrões de Projeto. 02 Creational Patterns

POO e C++: Herança e Polimorfismo

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

Classes e Objetos. Sintaxe de classe em Java

Computação II Orientação a Objetos

Padrões de Projeto de Software

Padrão de projeto de software

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

Idiomas de Programação

Interfaces e Classes Abstratas

PROGRAMAÇÃO ORIENTADA A

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

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

PMR Computação para Automação. PMR Computação para Mecatrônica. Exercício Programa 2 - Versão Package BancoDeDados

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Mas o que é mesmo Padrão de Projeto?

Linguagem de Programação III

Profa. Thienne Johnson

Visitor. Um problema a resolver. Temos uma hierarquia de classes, provavelmente um Composite Exemplo: Numa rede elétrica, temos a seguinte hierarquia:

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

Java 2 Standard Edition Classes internas

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Programação com Objectos. 2º Teste 2015/2016 1º Semestre

Interfaces e Classes Internas

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

LINGUAGEM DE PROGRAMAÇÃO

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

Computação II Orientação a Objetos

Programação com Objectos 1º Teste Tipo 1º Semestre (90 minutos)

Padrões de Projeto. Factory Method

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

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

Linguagem de Programação IV Introdução

Errata 2 Engenharia de Software Fundamentos, Métodos e Padrões 3ª. edição

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

Linguagem de Programação II Implementação

Padrões de Projeto de Software

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Aula 08 Encapsulamento. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

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

4 Conceito de Herança

Encapsulamento. Separa a interface de um objeto dos detalhes de seu funcionamento interno. Caixa preta 2/27

Programação Orientada a Objetos

Polimorfismo em Java TM. por Jorge H C Fernandes CESAR-DI-UFPE Recife, 1999

Padrões de Projeto de Software Orientado a Objetos

Programação Orientada a Objetos em Java

INF011 Padrões de Projeto. 10 Bridge

INF011 Padrões de Projeto. 05 Factory Method

C com introdução a OO

INF011 Padrões de Projeto. 03 Abstract Factory

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Transcrição:

Tópicos Avançados em Linguagem de Programação Padrões de Projeto Pattern Prof. Alexandre Vidal DEINF-UFMA Classificação: Propósito: Criacional / Escopo: Objetos Padrão de Construção (intenção/metsker) 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. Ciência da Computação Motivação: Motivação: um leitor para documentos RTF (Rich Text Format) deve poder converter o documento para diferentes formatos o número de formatos possíveis é aberto portanto, é preciso facilitar a adição de uma nova conversão sem modificar o leitor uma solução é configurar o RTFreader com um conversor, para converter e representar o texto em um novo formato subclasses do conversor são especializadas em diferentes conversões e formatos no padrão : o conversor é chamado builder o leitor é chamado director o leitor é configurado com o builder o padrão separa o algoritmo para interpretação do formato textual (no leitor)... do algoritmo que converte o formato lido em outro formato, e que cria, compõe e representa esse novo formato (no builder)

Motivação: Aplicabilidade ( quando usar o padrão ) : 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 Estrutura Estrutura

Participantes : especifica uma interface abstrata para criação de partes de um objeto-produto Concrete: implementa a interface do para construir e montar partes do produto define e mantém a representação que cria fornece interface para recuperação do produto Participantes Director: constrói um objeto usando a interface do Product: representa 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 Colaborações Conseqüências o cliente cria o objeto Director e o configura com o objeto desejado Director notifica o construtor sempre que uma parte do produto deve ser construída o cliente recupera o produto do construtor 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

Implementação (aspectos) interface de montagem e construção: um modelo que apenas agrega os novos construtos ao produto é, em geral, suficiente, mas às vezes é necessário acessar partes já agregadas ao produto porque não classes abstratas para produtos? em geral, os produtos têm representações tão diferentes, que não há vantagens em ter uma superclasse comum Implementação (aspectos) Métodos vazios como default em. em C++, métodos build intencionalmente não são declarados virtuais puros antes, são definidos como métodos vazios os clientes sobrescrevem apenas as operações que lhes interessam Exemplo de Código class Maze { public: virtual void BuildMaze() { } virtual void BuildRoom(int room) { } virtual void BuildDoor(int roomfrom, int roomto) { } virtual Maze* GetMaze() { return 0; } protected: Maze(); } podemos alterar a função CreateMaze para receber o builder como um parâmetro: Maze* MazeGame::CreateMaze (Maze& builder) { builder.buildmaze(); builder.buildroom(1); builder.buildroom(2); builder.builddoor(1, 2); return builder.getmaze(); }

podemos reusar Maze para construir diferentes tipos de labirintos. A operação CreateComplexMaze é um exemplo: Maze* MazeGame::CreateComplexMaze (Maze& builder) { builder.buildroom(1); //... builder.buildroom(1001); return builder.getmaze(); } class StandardMaze : public Maze { public: StandardMaze(); virtual void BuildMaze(); virtual void BuildRoom(int); virtual void BuildDoor(int, int); virtual Maze* GetMaze(); private: Direction CommonWall(Room*, Room*); Maze* _currentmaze; }; void StandardMaze::BuildRoom (int n) { if (!_currentmaze->roomno(n)) { Room* room = new Room(n); _currentmaze->addroom(room); room->setside(north, new Wall); room->setside(south, new Wall); room->setside(east, new Wall); room->setside(west, new Wall); } void StandardMaze::BuildDoor (int n1, int n2) { Room* r1 = _currentmaze->roomno(n1); Room* r2 = _currentmaze->roomno(n2); Door* d = new Door(r1, r2); r1->setside(commonwall(r1,r2), d); r2->setside(commonwall(r2,r1), d); } }

Clientes podem agora usar CreateMaze junto com StandardMaze para criar um labirinto: Maze* maze; MazeGame game; StandardMaze builder; game.createmaze(builder); maze = builder.getmaze(); Usos conhecidos ver página 111 no GoF (traduzido); Padrões Relacionados Abstract Factory ênfase na construção de família de produtos (simples ou complexos), enquanto constrói um objeto complexo passo a passo; O produto é devolvido imediatamente, enquanto devolve o produto como um passo final. Composite é freqüentemente construído pelo.