Singleton e Adapter Professor: Nazareno Andrade

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
PHPOO Erick Souza. Conceitos de Orientação a Objetos Objeto é um conceito ou item(concreto ou abstrato). Software orientado a objetos Uma classe é uma.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTERFACES Prof. Thiago Pereira Rique
Projeto de Sistemas de Software
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
Java: Pacotes e Modificadores de Visibilidade
Orientação a Objetos: Encapsulamento e Classificação
Iniciação ao Java – Márcio F. Campos
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes.
Singleton.
Template Method Intenção: definir o esqueleto de um algoritmo em uma operação, postergando (delegando) a definição de alguns passos desse algoritmo para.
Padrões GoF – Factory Method
Introdução ao paradigma de programação: Orientado a Objetos
Introdução a diagrama de classes e UML
Linguagem de Programação II
Herança e Polimorfismo
Classes e objetos P. O. O. Prof. Grace.
CURSO DE ESPECIALIZAÇÃO PARTE 4: PADRÕES FACTORY E DAO
Curso de extensão em Desenvolvimento Web
Frameworks - Introdução
Strategy e Template Method
Programação Orientada a Objetos com Java
Professor: Hyggo Almeida
Aula prática 13 Orientação a Objetos – C++ Parte 1
Nazareno Andrade (baseado no material de Hyggo Almeida)
Visão crítica sobre padrões: Over Engineering
Padrões de projeto detalhados Factory Method, Abstract Factory
Linguagens Orientadas a Objeto
GEJAVA IV SCJA – Certificação Sun java associado exame cx
Tópicos avançados em internet A
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação I Aula 2 (Métodos)
Herança em Java.
Tipos Abstratos de Dados
Orientação a Objetos Parte I
Programação Orientada à Objetos
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Membro Static.
Acoplamento e Coesão Modelagem e Programação Orientada a Objetos
Curso de Aprendizado Industrial Desenvolvedor WEB
Configuração do Ambiente de programação
PROGRAMAÇÃO ORIENTADA A OBJETOS
Aula Prática 4 Monitoria IP/CC (~if669).
Decorator POO - Avançado.
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Classes Abstratas e Interfaces GX – Aula05 1.
April 05 Prof. Ismael H. F. Santos - 1 Módulo III Padrões GOF: Singleton, Professores Eduardo Bezerra –
Padrões de Projeto Abstract Factory.
Padrões de Projeto.
Bruno Inojosa MCP .NET Framework
Factory.
Programação Distribuída em Java Aula Na aula passada vimos: I/O Sockets.
Abstract Factory Pattern Algumas aplicações precisam criar objetos de classes que podem mudar ex: elementos de um sistema GUI. –Diferentes padrões precisam.
Design Patterns A adoção dos padrões terá um efeito profundo e duradouro sobre a forma de escrevermos programas Ward Cunningham e Ralph Johnson.
Jobson Ronan Padrões GoF Jobson Ronan
Introdução a Orientação a Objetos
Módulo II Capítulo 1: Orientação a Objetos
Padrões de Projetos Professora Lucélia. Conceitos É uma solução conhecida para um problema comum São técnicas que nos dão uma boa solução para determinados.
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Aula 6 – Padrão Factory Method
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
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.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

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

O que vimos na última aula? Factory Method Abstract Factory Singleton

O que veremos hoje? Singleton (padrão de criaçã) Adapter (padrão estrutural) Singleton

Problema-exemplo 1 Representar a configuração do sistema Timeout para mensagens Diretório para arquivos temporários ... Queremos que só haja uma instância da configuração Queremos um ponto único de acesso a essa configuração

Outro exemplo A classe ConexãoBD dá acesso ao banco Considere a seguinte arquitetura de sistema Vários módulos do sistema utilizam o mesmo BD Você gerencia as operações sobre o BD A classe ConexãoBD dá acesso ao banco módulo2 módulo3 módulo1 módulo4 :ConexãoBD :ConexãoBD :ConexãoBD :ConexãoBD BD Singleton

E se você quiser garantir que haja apenas uma conexão para todos os módulos? Como garantir que haja apenas uma instância de ConexãoBD? módulo2 módulo3 módulo1 módulo4 :ConexãoBD ??? BD Singleton

Solução toda estática Simples não é??!! Cria-se uma classe estática Métodos estáticos para acesso ao banco Atributos estáticos com informações de conexão Algoritmos de conexão encapsulados em métodos estáticos... E por aí vai... E a Orientação a objetos??? Onde é que fica??? Mudou a forma de conectar ao banco... mudaram as informações de configuração... Onde está a herança?!? Pois é amigo... não tem!!! Singleton

Singleton Eis a solução... Padrão Singleton Intenção garantir que uma classe tenha somente uma instância, fornecendo um ponto global de acesso para a mesma Aplicabilidade deve haver apenas uma instância de uma classe e essa instância deve dar acesso aos clientes através de um ponto bem conhecido quando a única instância tiver de ser extensível através de subclasses, possibilitando aos clientes usarem uma instância estendida sem alterar o seu código Singleton

Singleton Como construir um Singleton??? Código Java (passo a passo) 1. Precisamos garantir que só haja uma instância, ou seja, temos que impedir que se faça new ConexaoBD(), mais de uma vez... Solução: protegemos o construtor! public class ConexaoBD{ /* Construtor da classe */ protected ConexaoBD(){ //código do construtor... } Singleton

Singleton 2. Precisamos agora fornecer um método de acesso à instância única criada... este método deve ser estático... public class ConexaoBD{ private static ConexaoBD instanciaUnica = null; /* Construtor da classe */ protected ConexaoBD(){...} /* Retorna a instância única */ public synchronized static ConexaoBD getInstance(){ if (instanciaUnica == null){ instanciaUnica = new ConexaoBD(); } return instanciaUnica; Singleton

Singleton Conseqüências acesso controlado à instância única evita a “poluição” do código com inúmeras variáveis globais mais flexível do que métodos de classe possibilita a herança Singleton

Singleton Vamos implementar o padrão Singleton Criar uma classe cliente para acessar o Singleton Verificar se realmente apenas uma instância foi criada... Recuperar a instância Alterar um valor de atributo Recuperar novamente a instância Verificar se o valor foi alterado Tentar criar uma instância, em outra classe, utilizando o operador new E se o construtor fosse privado? Singleton

Método getInstance() vs. inicialização estática Implementação: Método getInstance() vs. inicialização estática Problemas semelhantes a variáveis globais Diferença de construtor privado vs. protected Opção: classe abstrata com getInstance() que escolhe subclasse a ser instanciada (ex: java.awt.Toolkit) Bom exemplo: java.lang.Runtime (tem addShutdownHook(), getNumberOfProcessors, ...) Fachadas geralmente são Singletons Singleton

Problema-exemplo 2: Temos uma classe que formata séries de números para mostrar na interface Queremos filtrar objetos de classes nossas e legadas/de terceiros Como adaptar classes que possuem implementação que queremos à interface que precisamos?

Problema exemplo 3: Uma interface gráfica baseada em eventos espera ActionListeners. Não queremos que nossas classes da lógica implementem essa interface

Adapter Conseqüências O cliente e a classe adaptada se mantêm independentes um do outro Você “limpa” classes que são de propósito geral (diminui o número de interfaces implementadas) Dificulta o entendimento (introduz um nível de indireção) Adapter e Façade

Adapter Aplicabilidade É necessário usar uma classe que invoca um método através de uma interface, mas você quer usá-lo com uma classe que não implementa tal interface Você não tem o código fonte da classe A classe é de propósito geral e você não quer fazê-la implementar a interface Adapter e Façade

O que vimos hoje? Singleton Adapter Singleton

Dúvidas? ? Singleton