Análise e Projeto Orientados por Objetos

Documentos relacionados
Análise e Projeto Orientados por Objetos

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

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 de Software

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça. Introdução. Padrões de projeto

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos

Mas o que é mesmo Padrão de Projeto?

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

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

Programação com Objectos

Padrões de Projeto de Software

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

Orientação a Objetos AULA 09

O USO DOS PADRÕES DE PROJETO GOF NA ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Testes com Design Patterns

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

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Padrões contexto problema solução

API e Coleções Java. Sérgio Luiz Ruivace Cerqueira

b) Adapter, Bridge e Composite. c) Builder, Prototype e Singleton. d) Façade, Command e Decorator. e) Factory Method, Interpreter e Template Method.

Coleções. Prof. Marcelo Roberto Zorzan

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

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

Atividade 08 - Utilizando Collections - List

Coleções em Java. Prof. Gustavo Willam Pereira ENG10082 Programação II. Créditos: Prof. Clayton Vieira Fraga Filho

Programação Orientada a Objetos

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto

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

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Abstract Factory Builder Factory Method Prototype Singleton Adapter Bridge Composite Decorator Facade Flyweight Proxy

LEIC-A / MEIC-A 2007/2008 (1º

Tabelas de Dispersão. Tabela de Dispersão

Uma Introdução aos Padrões de Projeto com Java. Roberto Willrich INE-CTC-UFSC

Lista encadeada class No { Coleções. Enumeration. Lista encadeada (continuação) Enumeration Exemplo usando a classe Lista anterior

Programação Orientada a Objetos

23/10/15. Padrões de Projeto (Design Patterns) em Java. Separação de Implementação e Interface. Separação de Implementação e Interface.

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

PADRÕES DE PROJETO DE SOFTWARE

Notas de Aula 07: vetores de objetos e coleções

Prof. Dr. Dilermando Piva Jr. Fatec Indaiatuba

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

Atributos e Métodos Estáticos

JAVA COLLECTIONS API: LISTAS

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

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Tabelas de Dispersão. Estrutura de Dados e Algoritmos

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Transcrição:

Análise e Projeto Orientados por Objetos Aula 05 Padrões GoF (Singleton e Iterator) Edirlei Soares de Lima <edirlei@iprj.uerj.br>

Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype Singleton Estruturais: Adapter Bridge Composite Decorator Façade Flyweight Proxy Comportamentais: Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor

Singleton Motivação: algumas classes devem ser instanciadas uma única vez: Um spooler de impressão; Um sistema de arquivos; Um Window manager; Um objeto que contém a configuração do programa; Um ponto de acesso ao banco de dados; Obstáculo: a definição de uma variável global deixa a instância (objeto) acessível mas não inibe a instanciação múltipla. Como assegurar que somente uma instância de uma classe seja criada para toda a aplicação?

Singleton Exemplo Exemplo: Vários módulos do sistema utilizam o mesmo banco de dados; A classe ConexãoBD dá acesso ao banco; módulo1 módulo2 módulo3 módulo4 :ConexãoBD :ConexãoBD :ConexãoBD :ConexãoBD BD

Singleton Exemplo 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 :ConexãoBD módulo4 BD???

Singleton Intenção: garantir que uma classe tem apenas uma instância, e prover um ponto de acesso global a ela; Solução: fazer com que a própria classe seja responsável pela manutenção da instância única, de tal forma que: Quando a instância for requisitada pela primeira vez, essa instância deve ser criada; Em requisições subsequentes, a instância criada na primeira vez é retornada. A classe Singleton deve: armazenar a única instância existente; garantir que apenas uma instância será criada; prover acesso a tal instância.

Singleton

Singleton Implementação public class Singleton private static Singleton instance = null; private Singleton ()... public static Singleton getinstance() if (instance == null) instance = new Singleton(); return instance;...

Singleton Implementação public class UsoDoSingleton... Singleton obj;... obj = Singleton.getInstance();...

Iterator Toda coleção possui uma representação interna para o armazenamento e organização de seus elementos. Por outro lado, essa coleção deve permitir que seus elementos sejam acessados sem que sua estrutura interna seja exposta. Pode-se desejar que estes elementos sejam percorridos de várias maneira, sem no entanto ter que modificar a interface da coleção em função do tipo de varredura desejado. de frente para trás, vice-versa, ou mesmo em ordem aleatória. O padrão Iterator permite descrever uma forma de percorrer os elementos de uma coleção sem violar o encapsulamento dessa coleção.

Iterator Exemplo Utilização de diferentes estruturas de dados: Vector, ArrayList, HashSet,... Vector collection; public void MostraDados(Vector col)... ArrayList collection; public void MostraDados(ArrayList col)... HashSet collection; public void MostraDados(HashSet col)... E se for necessário mudar a estrutura de dados?

Iterator Intenção: iterar sobre (percorrer sequencialmente) uma coleção de objetos sem expor sua representação. Obedecendo o princípio do encapsulamento Solução: um objeto intermediário (iterator) é usado entre o cliente e a coleção de objetos. Este objeto conhece a estrutura interna da coleção a ser percorrida, e apresenta uma interface para percorrer tal estrutura. Esta interface é independente dessa estrutura interna. Os clientes que desejam percorrer a coleção utilizam a interface do objeto intermediário, em vez de se comunicarem diretamente com a coleção de objetos.

Iterator Requisitos de um iterador: Um modo de localizar um elemento específico da coleção, tal como o primeiro elemento; Um modo de obter acesso ao elemento atual; Um modo de obter o próximo elemento; Um modo de indicar que não há mais elementos a percorrer. Exemplo em Java: As classes List, Set e Hash são subclasses de Collection, e herdam um método iterator() que retorna um objeto iterador. O objeto Iterator possui métodos hasnext() e next().

Iterator // ICollection.java // interface para obtenção de Iterator para coleções public interface ICollection // obtenção de um Iterator public IIterator getiterator(); // determina existência de um elemento public boolean has(object object); // adição de um elemento public boolean add(object object); // remoção de um elemento public boolean remove(object object); // remoção de todos os elementos public void removeall();

Iterator // IIterator.java public interface IIterator // verifica a existência de um próximo elemento public boolean hasnext(); // retorna o próximo elemento public Object next();

Iterator Uso public static void main(string[] args) ArrayList<String> lista = new ArrayList(); lista.add("a"); lista.add("b"); lista.add("c"); lista.add("d"); lista.add("e"); Iterator iterator = lista.iterator(); while(iterator.hasnext()) String str = (String)iterator.next(); System.out.print(str + " "); System.out.println();

Iterator Uso public static void main(string[] args) ArrayList<String> lista = new ArrayList(); lista.add("a"); lista.add("b"); lista.add("c"); lista.add("d"); lista.add("e"); for(string str:lista) System.out.print(str + " "); System.out.println();

Iterator

Iterator Implementação public class MinhaLista implements Iterable<Integer> private int[] arraylist; private int currentsize; public MinhaLista(int[] newarray) this.arraylist = newarray; this.currentsize = arraylist.length; @Override public Iterator<Integer> iterator() Iterator<Integer> it = new Iterator<Integer>() private int currentindex = 0;...

Iterator Implementação @Override public boolean hasnext() return currentindex < currentsize; @Override public Integer next() int v = arraylist[currentindex]; currentindex+=2; return v; @Override public void remove() throw new UnsupportedOperationException(); ; return it;

Iterator Implementação public static void main(string[] args) int[] numeros = new int[]1,2,3,4,5,6,7; MinhaLista lista = new MinhaLista(numeros); for(int val:lista) System.out.print(val + " "); System.out.println(); Iterator iterator = lista.iterator(); while(iterator.hasnext()) int val = (int)iterator.next(); System.out.print(val + " "); System.out.println();

Iterator Aplicabilidade O uso do padrão Iterator se aplica quando se quer: Acessar o conteúdo de objeto agregados sem expor sua representação interna; Dar suporte a mais de uma maneira de percorrer a estrutura; Prover interface única para percorrer estruturas agregadas diferentes.

Iterator Consequências Mantém separadas a representação interna e a responsabilidade de navegação pelas partes. O iterador conhece a estrutura interna das partes, mas os clientes do iterador não conhecem. Move da coleção de objetos para o objeto iterator a responsabilidade de acesso e varredura da coleção. Há a possibilidade de utilizar mais de um iterador simultaneamente. Dá suporte a múltiplas maneiras de percorrer a coleção e, se necessário, essas varreduras podem ocorrer ao mesmo tempo.