Padrões de Projeto. Singleton



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

Java 2 Standard Edition Como criar classes e objetos

Programação de Computadores - I. Profª Beatriz Profº Israel

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Reuso com Herança a e Composiçã

Orientação a Objetos

Guia de Fatores de Qualidade de OO e Java

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

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

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Prototype, um Design Patterns de Criação

UML Aspectos de projetos em Diagramas de classes

POO Programação Orientada a Objetos. Classes em Java

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Módulo 07 Características Avançadas de Classes

(Aula 17) Threads em Java

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Herança. Alberto Costa Neto DComp - UFS

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Técnicas de Programação II

DEFINIÇÃO DE MÉTODOS

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Programação Orientada a Objetos em Java

Tópicos em Engenharia de Computação

Orientação a Objetos

Factory Method. Edeyson Andrade Gomes

Programação por Objectos. Java

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

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

DESENVOLVIMENTO DE SOFTWARE. Introdução ao Visual Studio VB.Net. Programação Estruturada. Prof. Celso Candido ADS / REDES / ENGENHARIA

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Introdução a Java. Hélder Nunes

Polimorfismo. Prof. Leonardo Barreto Campos 1

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Linguagem de Programação III

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Programação Orientada a Objetos em java. Polimorfismo

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Neste capítulo discutiremos o que é uma DLL, seus aspectos e tipos e ainda, porquê é tão importante para as aplicações Windows

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Implementação de Classe e Auto-Relacionamento em Java

Orientação a Objetos com Java

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Java para Desenvolvimento Web

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

Sistemas Distribuídos Métodos de Invocação Remota II. Prof. MSc. Hugo Souza

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

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

Desenvolvendo plugins WordPress usando Orientação a Objetos

DAS5102 Fundamentos da Estrutura da Informação

Fixture-Factory. Criando objetos para seus testes. Como criar objetos através de templates para serem utilizados como massa de dados em seus testes.

Sistemas Distribuídos

Programação por Objectos. Java

1.6. Tratamento de Exceções

Introdução a POO. Introdução a Linguagem C++ e POO

2 Orientação a objetos na prática

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Programação com Acesso a BD. Programação com OO Acesso em Java

Java. Marcio de Carvalho Victorino

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

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

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Programação aplicada de computadores Andréa Maria Pedrosa Valli

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

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Plugins TerraView. Última revisão: 12/12/32006 Versão TerraLib: 3.1.4

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Java para Desenvolvimento Web

Curso de Aprendizado Industrial Desenvolvedor WEB

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Profa. Thienne Johnson

Implementando uma Classe e Criando Objetos a partir dela

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Documentação EPL - Clientes

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

JSP - ORIENTADO A OBJETOS

Ajuda On-line - Sistema de Portaria. Versão 4.8.J

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

ProgramaTchê programatche.net Programação OO com PHP

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

5 Mecanismo de seleção de componentes

Objetivos: Entender o funcionamento dos programas Java via linha de comando

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

BC0505 Processamento da Informação

Programação de Computadores - I. Profª Beatriz Profº Israel

JavaScript 2.0X X

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Transcrição:

Padrões de Projeto Padrões de Criação Singleton Singleton Assegura que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela 2 Livro Texto: Design Pattern - Elements 1

Motivação É importante a algumas classes ter exatamente uma instância Ex.: várias impressoras, mas apenas um spool de impressão. Um único sistema de arquivos, um único gerenciador de janelas etc Como garantir a única instância e o acesso fácil a ela? Variável global? é possível instanciar múltiplos objetos... 3 Livro Texto: Design Pattern - Elements Motivação A melhor solução é fazer a própria classe responsável por manter rastreável sua única instância. Assegurar que nenhuma outra instância seja criada (interceptando requisições de criação de novos objetos) Prover uma forma de acesso a esta instância Esta solução é o padrão Singleton 4 Livro Texto: Design Pattern - Elements 2

Aplicação Use Singleton quando: Deve haver exatamente uma instância de uma classe e ela deve ser acessível a clientes a partir de um ponto de acesso bem conhecido A instância única deve ser extensível via especialização e os clientes devem ser aptos a usar uma instância estendida sem modificar seu código 5 Livro Texto: Design Pattern - Elements Estrutura 6 Livro Texto: Design Pattern - Elements 3

Participante Singleton Define uma operação Instance que permite aos clientes acessarem sua instância única. Instance é uma operação da classe (isto é, uma função membro estática em C++) Pode ser responsável por criar sua própria instância única 7 Livro Texto: Design Pattern - Elements Colaborações Clientes acessam a instância de um Singleton apenas através da operação Instance do Singleton 8 Livro Texto: Design Pattern - Elements 4

Conseqüências 1. Acesso controlado à instância única 2. Espaço de nomes reduzido 3. Permite um número variável de instâncias 4. Mais flexível que operações de classe 9 Livro Texto: Design Pattern - Elements Assegurar uma instância única: esconder a operação que cria a instância atrás de uma operação de classe que garanta que somente uma instância seja criada 10 Livro Texto: Design Pattern - Elements 5

Note que o construtor é protegido. Um cliente que tente inicializar Singleton diretamente receberá um erro em tempo de compilação Note também que Instance usa lazy initialization 11 Livro Texto: Design Pattern - Elements Veja que não basta apenas definir o singleton como uma variável global ou objeto estático, porque: Não é possível garantir que somente uma instância de um objeto estático seja declarada Pode-se não ter toda a informação necessária para a instanciação de todo singleton no instante da inicialização estática (C++ não define a ordem na qual os construtores para objetos globais são chamados, isto significa que não pode haver nenhuma dependência entre singletons, caso contrário, erros serão inevitáveis) Além, é claro, da desvantagem de objetos globais/estáticos (todos os singletons seriam criados, independente deles serem usados ou não) 12 Livro Texto: Design Pattern - Elements 6

Exemplo: Objeto único para conexão com Banco de Dados Modelo UML Singleton Código java public class FileLogger implements Logger { private static FileLogger logger; Construtor é privativo e não pode ser acionado de fora da classe //Prevent clients from using the constructor private FileLogger() { } public static FileLogger getfilelogger() { if (logger == null) { logger = new FileLogger(); } return logger; } public synchronized void log(string msg) { FileUtil futil = new FileUtil(); futil.writetofile("log.txt",msg, true, true); } } FileLooger, que é método de classe (static) e não de instância: a) cria a instância, aciona o construtor (se logger não existe) b) Retorna a instância criada, se objeto logger já existir log() deve ser syncronized pois sendo uma única instância devese evitar race conditions, uma vez que este objeto será o único a tratar as requisições que podem partir de vários clientes 7

Especializando classes Singleton A técnica mais simples é determinar qual singleton se quer usar de dentro da operação Instance (p.ex., via variável de ambiente) Outra forma de se escolher a subclasse de Singleton é colocar Instance dentro das subclasses (linka-se um objeto que contém uma implementação diferente, portanto, escondendo-se isto da implementação do cliente) Uma terceira forma é usar um registro de singletons 15 Livro Texto: Design Pattern - Elements Exemplo do Labirinto No exemplo da MazeFactory, precisa-se apenas de uma única instância da fábrica de labirinto. Exemplo 1: considera-se que nunca haverá subclasses de MazeFactory Exemplo 2: há subclasses de MazeFactory 16 Livro Texto: Design Pattern - Elements 8

Exemplo 1 17 Livro Texto: Design Pattern - Elements Exemplo 1 18 Livro Texto: Design Pattern - Elements 9

Exemplo 2 19 Livro Texto: Design Pattern - Elements Exemplo 2 Note que Instance deve ser modificada sempre que se define uma nova subclasse de MazeFactory Uma possível solução é o registro de singletons Outra solução é fazer linkagem dinâmica. 20 Livro Texto: Design Pattern - Elements 10

- Registro Ao invés de Instance definir um conjunto de possíveis classes Singleton, as classes Singleton registram suas instâncias pelo nome em um registro bem conhecido O registro mapeia entre nomes e singletons Quando Instance precisa de um singleton, ele consulta o registro pelo nome O registro procura pelo singleton correspondente (se existe) e o retorna Esta técnica libera Instance de ter que conhecer todas as possíveis classes de Singleton 21 Livro Texto: Design Pattern - Elements 22 Livro Texto: Design Pattern - Elements 11

23 Livro Texto: Design Pattern - Elements Onde as classes Singleton se registram? Em seu construtor? Problema: o construtor só é chamado se a classe já tiver sido chamada... 24 Livro Texto: Design Pattern - Elements 12

Solução: definir uma instância estática Neste caso, a classe não é mais responsável por criar o singleton, mas apenas torná-lo acessível no sistema. A desvantagem é que as instâncias de todas as possíveis subclasses Singleton devem ser criadas ou não serão registradas 25 Livro Texto: Design Pattern - Elements 13