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.

Documentos relacionados
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

Orientação a Objetos AULA 09

Análise e Projeto Orientados por Objetos

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

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Mas o que é mesmo Padrão de Projeto?

Nome: Número: Segunda Parte (3 valores) Primeira Parte (7 valores)

Padrões de Projeto de Software Orientado a Objetos

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Padrões de Projeto. Parte 1. Prof. Fellipe Aleixo

Iterator. Professor: Hyggo Almeida

Computação Paralela. Conceitos de Programação Orientada ao Objecto. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

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

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

Atividade 08 - Utilizando Collections - List

Análise e Projeto Orientados por Objetos

Interfaces POO. Prof. Marcio Delamaro

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

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

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

Computação II Orientação a Objetos

Introdução aos Padrões de Projeto. Sylvio Barbon Jr

Análise e Projeto Orientados por Objetos

Computação II Orientação a Objetos

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

Engenharia de Software

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

Módulo III Padrões GOF

Análise e Projeto Orientados por Objetos

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

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

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Programação Orientada a Objetos

5. Generics, Iterators e Comparable em Java

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

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Linguagem de Programação II Implementação

Padrões de Projeto de Software

Programação Orientada pelos Objetos B. Desenvolvimento orientado pelos objectos

Linguagem de Programação II Implementação

Profa. Thienne Johnson

Orientação a Objetos e Java

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

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

Programação com genéricos

Computação II Orientação a Objetos

Interfaces e Classes Abstratas

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

Profa. Thienne Johnson EACH/USP

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

Interfaces. Interfaces: Exemplo. ! São um mecanismo poderoso para ter bons desenhos pois permitem separar contratos das implementações

Tabelas de Dispersão. Tabela de Dispersão

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

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Conceitos de Programação Orientada ao Objecto

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Padrões contexto problema solução

Programação Orientada a Objetos

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

Coleções. Prof. Marcelo Roberto Zorzan

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

Prova 2 PMR3201 1o. semestre 2016 Prof. Thiago Martins

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

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

Encapsulamento de Dados

Sistemas de Objetos DistribuídosPrimeira Aplicação Java ORB p.1/21

Padrões Fábrica. Simple Factory Factory Method

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

A classe ArrayList. IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

Palavras Reservadas da Linguagem Java

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Programação Orientada a Objetos

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

JAVA COLLECTIONS API: LISTAS

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

6 - Padrões de Extensão

Análise de Programação

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

" ##$#$!% # & #$#$ !!!!"!

Computação II Orientação a Objetos

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

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

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

Curso Superior de Banco de Dados

PHP: <?php echo("hello World");?> Printa Hello World na página do navegador, mais fácil do que no Java.

PADRÕES DE PROJETO DE SOFTWARE

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

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Java Básico. Carga Horária: 32 horas. Pré-requisito: Lógica de Programação; JAVA. Conteúdo Programático

Coleções. João Paulo Q. dos Santos

Boas práticas com Orientação a Objetos. Paulo Silveira

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

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

Transcrição:

Design Patterns / Padrões de Projeto Padrões de Projeto (Design Patterns) em Java Um padrão de projeto é uma solução geral para um problema recorrente É uma espécie de gabarito para como resolver um problema Captura boas práticas Serve para criar uma linguagem de comunicação João Paulo A. Almeida (jpalmeida@ieee.org) http://nemo.inf.ufes.br Departamento de Informática Universidade Federal do Espírito Santo (veja o livro de Gamma et. al. (GoF Gang of Four) intitulado Design Patterns ) Aqui alguns úteis aplicados a Java... Separação de Implementação e Interface Já vimos este padrão em ação nas collec8ons de Java: interface List<T> class ArrayList<T> implements List<T> class LinkedList<T> implements List<T> Neste caso permite abstrair as implementações específicas de List (a dependência só existe na criação) Uso: List<String> lista = new LinkedList<String>(); lista.add( Teste ); Separação de Implementação e Interface Às vezes aplicamos o padrão até mesmo para prever alterações futuras, e desacoplar o uso do objeto da implementação Exemplo: interface Product public void getprice(); class ProductImpl implements Product public void getprice() Uso: Product p = new ProductImpl(); p.getprice(); Permite alteração futura da classe que implementa... GoF Paaerns Crea8onal Paaerns Factory Factory with Finder Singleton Factory paaern Outro padrão que esconde ainda mais os detalhes de criação (incluindo qual a classe usada) Não usamos o operador new, mas pedimos a criação para uma classe especial: a fábrica (Factory) Structural Paaerns Decorator Composite Behavioural Paaerns Iterator Observer / Listener 1

Factory pattern Nomes mais comuns ProductFactory +createproduct() ProductFactoryImpl +createproduct() Factory: interface interface Product // qualquer definição do objeto bla bla bla class ProductImpl implements Product // qualquer definição do objeto bla bla bla interface ProductFactory Product createproduct(); Factory: implementação class ProductFactoryImpl implements ProductFactory public Product createproduct() // cria um objeto, decidindo qual a implementação return (Product) new ProductImpl(); Factory: outra implementação interface ProductFactory Product createproduct(int productcode); class ProductFactoryImpl implements ProductFactory public Product createproduct(int productcode) // cria um objeto, decidindo qual a implementação if (productcode==1) return (Product) new Product1Impl(); else if (productcode==2) return (Product) new Product2Impl(); Dinâmica do Factory Pattern client factory create() object1 object1 hello helloreturn hello helloreturn create object2 object2 Exemplo em uso public class Conta public class Banco private Set<Conta> contas=new Set<Conta>(); Conta criaconta() Conta c = new Conta(); contas.add(c); return c; 2

Factory c/ Finder interface Product bla bla bla Factory/Finder Pattern Dynamics : Client : Factory : Product findbykey ( ImageXYZ ); Primary Key interface ProductFactory Product createproduct(keytype key); Product findbykey(keytype key); operation Object // exercício: que exceções seriam relevantes? // sugerir implementação Singleton object Acesso a objeto global Ao invés de usar métodos e atributos está8cos, que seria uma outra forma de fazer isto Singleton public class SingleObject //create an object of SingleObject private sta8c SingleObject instance = new SingleObject(); //make the constructor private so that this class cannot be instan8ated private SingleObject() //Get the only object available public sta8c SingleObject getinstance() return instance; public void showmessage() System.out.println("Hello World!"); // métodos aqui Singleton a par8r de Java 1.6 package mypackage; public enum MyEnumSingleton INSTANCE; // métodos aqui Composite Paaern Normalmente usado para uma árvore de containment Um elemento de um mesmo 8po contém elementos do mesmo 8po Exemplo: class Pasta List<Pasta> subpastas=new LinkedList<Pasta>(); List<Arquivo> arquivos=new LinkedList<Arquivo>(); // a implementação permi8ria laços apesar de não ser a ideia 3

Composite Paaern Composite Paaern Composite Paaern (degenerado) class Funcionario String nome; double salario; List<Funcionario> subordinados= new LinkedList<Funcionario>(); Decorator Também conhecido como Wrapper Permite extender funcionalidade de uma classe existente de uma forma diferente da herança Na verdade permite em tempo de execução extender um objeto existente Já vimos uso no caso dos Readers: BufferedReader é um Decorator de FileReader, adicionando métodos BufferedReader in = new BufferedReader(new FileReader("foo.in")); Passamos a usar o BufferedReader, que encapsula o FileReader, adicionando mark e reset Iterator (java.u8l.iterator) interface Iterator<E> // Returns true if the itera8on has more elements boolean hasnext(); // Returns the next element in the itera8on // pode jogar NoSuchElementExcep8on E next(); Incorporado nas coleções de Java, mas também em Scanner (na verdade Scanner implements Iterator<String>) Scanner é um Iterator<String> java.u8l.scanner s = new java.u*l.scanner("teste;;teste2"); s.usedelimiter(";"); System.out.println("["+s.next()+"]"); System.out.println("["+s.next()+"]"); System.out.println("["+s.next()+"]"); 4

foreach usa Iterator for (Pessoa p : listapessoas ) System.out.println(p.getNome()); Observer ou Listener Possível para qualquer classe que implemente Iterable<T> public interface Iterable<T> Iterator<T> iterator(); Listener / Observer interface Listener public void no8fy(); public Observer implements Listener public void no8fy() System.out.println( Conta criada ); Listener / Observer interface Listener public void no8fy(); public Observer implements Listener public void no8fy() System.out.println( Conta criada ); Exemplo em uso public class Banco private Set<Conta> contas=new Set<Conta>(); private Set<Listener> listeners=new Set<Listener>(); public addlistener(listener listener) listeners.add(listener); public removelistener(listener listener) listener.remove(listener); public Conta criaconta() Conta c = new Conta(); contas.add(c); for (Listener listener : listeners) listener.no8fy(); return c; 5

Exemplo em uso (Listener) public sta8c void main() Banco b = new Banco(); Observer o = new Observer(); b.addlistener(o); b.criaconta(); 6