Singleton e Template Method

Slides:



Advertisements
Apresentações semelhantes
Padrão de Projeto Interpreter
Advertisements

Orientação a Objetos: Modificador Final para Métodos e Classes
Singleton.
TerraRadar Aplicativo para tratamento de imagem de Radar Utilizado através de dois tipos de interface : TerraView - (QT) Browser - (PHP)
Padrão de Construção Factory Method
Aula 8 Polimorfismo.
CRIANDO OBJETOS EM JAVA
Concorrência em Java Threads em Java.
Fundamentos da Engenharia de Software
Singleton e Adapter Professor: Nazareno Andrade
Vector To Raster Factory & Strategy Eric Silva Abreu São José dos Campos - 15 de dezembro de 2006.
Uma classe para vectores
Estudo de Caso: um editor de documentos
Adriano S. Castro André Abdalla
LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight.
Implementação Orientada a Objetos – Aula 03
Aula Prática 4 Monitoria IP/CC (~if669).
Trabalho Final de Padrões de Projeto
Construtores e Destrutores
April 05 Prof. Ismael H. F. Santos - 1 Módulo III Padrões GOF: Singleton, Professores Eduardo Bezerra –
1 Design Pattern Double Checked Locking. 2 Design Pattern Apresenta soluções para problemas que ocorrem repetidamente em nosso ambiente computacional.
1 Design Patterns Israel Rios. 2 Origens A idéia de padrões de projeto não teve origem na ciência da computação Christopher Alexander A Pattern Language:
1 - Introdução a Padrões de Projeto
Aprendendo como funciona o NHibernate Elvis Medeiros Programador .NET
Aula 6 – Padrão Factory Method
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Aula 7 – Padrão Abstract Factory
Aula 8 – Padrão Singleton
Padrões de Projeto de Criação Padrões de Projeto Orientados a Objetos Prof a. Danielle Martin Universidade de Mogi das Cruzes.
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
PROGRAMANDO EM JAVA Dilvan Moreira (baseado no livro Big Java)
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Façade Definição: Quando usar? Tipo de padrão? Como? estrutural.
Polimorfismo e suas aplicações em C++.
Vetores e Matrizes em C/C++
Padrões de Projeto Estruturais
(baseado em slides de ex-alunos)
Introdução a Programação
Novas Funcionalidades p/ LOO 2
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Singleton Definição: Quando usar? Tipo de padrão? Como? estrutural.
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Java: Interfaces Alcides Calsavara.
Criação e manipulação de objetos
CREATED BY RAFAEL S. T. VIEIRA
Unidade IV– Relacionamento entre Objetos
Testes e Qualidade de Software
Edson Susumu Asaga JavaBeans Edson Susumu Asaga
Programação Orientada a Objetos
Programação Orientada a Objetos
Técnicas de Programação
MAC Tópicos de POO Secret Partner Pattern / Facet
BANCO DE DADOS I.
Unidade VI – Exceções e Interfaces
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos*
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Padrões de Projeto.
Programação Orientada a Objetos
Programação de Computadores II
Transcrição da apresentação:

Singleton e Template Method

Design Patterns O projeto de software, orientados-a-objetos, é uma tarefa complexa Mais complexa ainda é a criação de software reusável Definir granuralidades Definir hierarquias Definir relacionamentos Ainda assim boas soluções são produzidas: Desenvolvedores experientes Quando uma boa solução é produzida, ela é reusada

Referências Estilos de Programação “Advanced C++ Programming Styles and Idioms”, J. Coplien “Design Patterns”, E. Gamma, R. Helm, J. Vlissides, R. Johnson “A System of Patterns”, R. Buchmann “Pattern Hatching”, J. Vlissides (in “C++ Gems”)

Singleton Intenção Motivação Use um Singleton quando: Garantir que uma classe tenha uma única instância e um único ponto de acesso a essa instância Motivação Sistemas podem precisar de classes com uma única instância Ex. uma único valor de precisão, um único sistema de arquivos Use um Singleton quando: É preciso que exista apenas uma instância de uma classe e essa instância deve ser acessada através de um único ponto bem conhecido Quando essa classe possa ser estendida através de derivação e que os seus clientes possam usar a instância estendida sem modificar seu código

Singleton Resolver o problema de variáveis globais e únicas Inicializar a variável apenas quando necessário Evitar alterações desnecessárias

Singleton - Estrutura Acesso controlado à instância única Evita poluição do espaço de nomes com variáveis globais Permite refinamentos na representação e operações por meio de derivações

Singleton em C++ // Only one object of this class can be created class Singleton { private: void otherOperations(); protected: Singleton(); public: static Singleton& instance(); } Singleton& Singleton::instance() static Singleton _instance; // executes only once return &_instance; // Use if ( Singleton::instance()->value == ...)

Singleton em C++ // Only one object of this class can be created class Singleton { private: static Singleton* _instance; void otherOperations(); protected: Singleton(); public: static Singleton* instance(); static void destroy(); } Singleton* Singleton::_instance = 0; Singleton* Singleton::instance() if (_instance == 0 ) _instance = new Singleton; return _instance; // Use if ( Singleton::instance()->value == ...)

Uso do padrão singleton Definir classes que tem a mesma “assinatura” do singleton class PlacaGrafica { private: PlacaGrafica(); public: static PlacaGrafica& instance(); int nbits(); }; PlacaGrafica& PlacaGrafica::instance() { static PlacaGrafica _instance; return &_instance; } PlacaGrafica::PlacaGrafica() { ...implementar o construtor...}

Uso do padrão Singleton Como evitar a necessidade de copiar a interface do padrão Singleton para todas as classes deste tipo no seu código? Ajustes no padrão são propagados para todos os seus usos? Alternativa: construir um “template”

Template para Singleton template <class T> class TeSingleton { public: static T& instance () static T instance_; return instance_; } virtual ~TeSingleton() {} protected: TeSingleton() {} private: // No copy allowed TeSingleton(const TeSingleton&); TeSingleton& operator=(const TeSingleton&){return *this;} };

Uso do Template Singleton class PlacaGrafica: public TeSingleton<PlacaGrafica> { protected: PlacaGrafica(); public: int nbits(); }; // Using ... if (PlacaGrafica::instance().nbits() == 8 ) } else