Generics. Byron Leite e Bruno Fernandes. Orientação a objetos com Java. 1 Generics

Documentos relacionados
Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Java na Prática. Célio Silva Aula 3

Introdução à Programação de Computadores Parte I

Unidade IV: Ponteiros, Referências e Arrays

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Encapsulamento de Dados

Objetivo do programa: Implementação de um analisador de Logs do Servidor Web com base nos requisitos da unidade curricular de Estatística.

Projeto de sistemas em Java. Algoritmos e Programação I. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario. Classe SimulacaoFuncionario

Introdução à orientação a objetos

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

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

Curso C: Ponteiros e Arrays

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

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Java Coleções. Rodrigo C. de Azevedo

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Módulo 06 Desenho de Classes

Aula 04 Operadores e Entrada de Dados. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Programação Orientada a Objetos em Java

double [] precoa = new double [1000]; // Preço com desconto para compras Avista

Vetores Unimensionais

Rafael Santos. Instituto Nacional de Pesquisas Espaciais rafael.santos. Rafael Santos - rafael.

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Simulado de Linguagem de Programação Java

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

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

Seminário - C# DSO II. Desenvolvimento de Sistemas Orientados a Objetos 2. Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo

Desenvolvimento Web TCC Turma A-1

insfcanceof new public switch transient while byte continue extends for int null

Programação Orientada a Objetos em

Exercícios de Revisão Java Básico

DEFINIÇÃO DE MÉTODOS

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

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

Um Exemplo de Refatoração. Prof. Alberto Costa Neto DComp/UFS

Conversão de Tipos e Arrays

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Exercício de Estrutura de dados. Java Fila

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

Introdução ao. Script. Baltazar Tavares (Psycho Mantys)

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo

Capítulo 5 Reuso de Classes

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

Análise de Programação

Programação Orientada a Objetos. Encapsulamento

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Java 2 Standard Edition Como criar classes e objetos

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

Orientação a Objetos

Aula 10 Polimorfismo. Prof. Jefersson Alex dos Santos. Baseado em:

5 Caso de estudo O cartão fidelidade

Keeper of Knowledge. Capítulo 2 Classes em Java

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

Paradigmas de Programação. Genéricos

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Programação Orientada a Objetos (DPADF 0063)

Utilizem a classe Aula.java da aula passada:

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

TCC Prof.: Leandro A. F. Fernandes Conteúdo: Tipos Genéricos

Técnicas de Programação Avançada TCC Prof.: Anselmo Montenegro

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

Reader e Writer para streams de caracteres (texto).

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Estrutura em Camadas. Estrutura em Camadas. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Atividade JSP com Banco de Dados

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

Guia de Fatores de Qualidade de OO e Java

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

Criar a classe Aula.java com o seguinte código: Compilar e Executar

UNIVERSIDADE FEDERAL DO PARANÁ

Métodos de Pesquisa em Memória Primária

Profa. Thienne Johnson

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Programação por Objectos. Java

Algoritmos e Programação II. Sobrecarga

Orientação a Objetos com Java

Capítulo 4. Packages e interfaces

Universidade Federal de Uberlândia

Revisão OO Básico. Orientação a Objetos em Java

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

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Programação Orientada a Objetos em java. Polimorfismo

Macros e Programação VBA

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Prof. Jhonatan Fernando

Projeto de Software Orientado a Objeto

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

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos

Sobre o Professor Dr. Sylvio Barbon Junior

3 Classes e instanciação de objectos (em Java)

Java Persistence Query Language JPQL

Transcrição:

Orientação a objetos com Java Generics Byron Leite e Bruno Fernandes {byronleite,bjtf@ecomp.poli.br 1 Generics

Agenda Geral Parte 07 Exceções Parte 08 Exceções Parte 09 Classes úteis Generics Arquitetura em camadas Parte 10 Implementação de um UC na arquitetura em camadas 2 Generics

Coleções em Java Motivação Coleções tratam SEMPRE tipos genéricos (Object) É impossível, nas versões anteriores ao Java 1.5, garantir que objetos de tipos diferentes não serão inseridos em uma coleção Quando se lê objetos de uma coleção, o uso do cast é obrigatório, e sob risco de não se estar convertendo o objeto para o tipo certo 3 Generics

Problema Analisando o código abaixo... List lista = new ArrayList(); lista.add("eduardo"); // OK em compilacao lista.add(new Integer(2)); // OK em compilacao lista.add(new Double(2.2)); // OK em compilacao // Agora... // Se, mais na frente, alguem faz isso... String elemento = (String)lista.get(1); // Erro de execucao Se houvesse uma maneira de garantir em tempo de compilação que, na dada lista, só fosse possível se adicionar elementos de um mesmo tipo (suponha String)?? 4 Generics

Problema Ainda analisando o código abaixo... List lista = new ArrayList(); lista.add("eduardo"); // OK em compilacao lista.add(new Integer(2)); // OK em compilacao lista.add(new Double(2.2)); // OK em compilacao // Agora... // Se, mais na frente, alguem faz isso... String elemento = (String)lista.get(1); // Erro de execucao E, se houvesse uma maneira de evitar o cast?? Se o Java soubesse que a dada lista é uma lista de Strings, não haveria alternativa...o tipo da variável que receberia o retorno do método get TERIA que ser String 5 Generics

Solução No Java 5, é possível SUB-TIPAR alguns elementos que trabalham com tipos abstratos List<String> lista = new ArrayList<String>(); lista.add("eduardo"); // OK em compilacao lista.add(new Integer(2)); // Erro de compilacao 1 lista.add(new Double(2.2)); // Erro de compilacao 2 // Agora... // Se, mais na frente, alguem quiser acessar um elemento... String elem0 = lista.get(0); // Sem cast Integer elem1 = lista.get(1); // Erro de compilacao 3 Double elem2 = (Double)lista.get(1); // Erro de compilacao 4 O argumento entre <> é o tipo associado aos elementos que serão manipulados através dos métodos da interface List e que serão armazenados no objeto ArrayList 6 Generics

Solução É como se, colocando o tipo entre <>, o programador dissesse: Java, para esta lista que eu estou instanciando e representando por esta variável, onde antes se trabalhava com Object, passe a trabalhar APENAS com o tipo que eu especificar entre <> Este mecanismo é chamado de Generics Aumenta a garantia de código robusto e sujeito a erros de execução Diminui o uso de casts 7 Generics

Solução Nos erros de compilação 1 e 2 O método add(string s) espera uma String Está se tentando passar um Integer e um Double para uma String É o mesmo que: String s = new Integer(2); Integer não é sub-tipo de String É o mesmo que: String s = new Double(2.2); Double não é sub-tipo de String 8 Generics

Solução Nos erros de compilação 3 e 4... O tipo de retorno do método get é String Regra de compilação do cast: Tipo do cast igual ou sub-tipo do tipo da variável de destino - OK Tipo do cast e tipo da variável ou do retorno de origem na mesma hierarquia Tipo do cast: Integer Tipo do retorno de origem: String, pois o get volta uma String Integer e String não estão na mesma hierarquia 9 Generics

Percorrendo Coleções Analise o seguinte programa escrito da forma tradicional... List listaprod = new ArrayList(); long codigo = 0; do { codigo = KeyboardReader.readLong(); if (codigo > 0) { String nome = KeyboardReader.readString(); double preco = KeyboardReader.readDouble(); Produto p = new Produto(codigo,nome,preco); listaprod.add(p); while (codigo > 0); // Mostra os produtos incluidos na lista for (int i=0;i<listaprod.size();i++) { Produto p = (Produto)listaProd.get(i); System.out.println("Codigo: "+p.getcodigo()); System.out.println("Nome : "+p.getnome()); System.out.println("Preco : "+p.getpreco()); 10 Generics

Percorrendo Coleções Agora, analise o programa escrito com Generics... List<Produto> listaprod = new ArrayList<Produto>(); long codigo = 0; do { codigo = KeyboardReader.readLong(); if (codigo > 0) { String nome = KeyboardReader.readString(); double preco = KeyboardReader.readDouble(); Produto p = new Produto(codigo,nome,preco); listaprod.add(p); while (codigo > 0); // Mostra os produtos incluidos na lista //for (Produto p : listaprod) { for (int i=0;i<listaprod.size();i++) { Produto p = listaprod.get(i); System.out.println("Codigo: "+p.getcodigo()); System.out.println("Nome : "+p.getnome()); System.out.println("Preco : "+p.getpreco()); 11 Generics

Outras Aplicações Generics pode ser usado em outros contextos Garantia de compatibilidade de tipos em métodos que recebem parâmetros correlatos Rotinas genéricas podem indicar que SÓ recebem coleções de uma SUB- HIERARQUIA bounded wild-cards 12 Generics

Generics em Classes e Intefaces Parametrizam a classe ou interface public interface List<T> extends Collection<T> {... T get(int index);... Método genérico: public static <T> T getfirst(list<t> list) { return list.get(0); 13 Generics

Wildcards Permite um tratamento mais genérico dos tipos passados a uma função public void processelements(list<?> elements) { for(object o : elements) { System.out.println(o); /* Podemos atribuir um list de qualquer tipo a nosso método, pois ele tem um tipo desconhecido/genérico */ List<A> lista = new ArrayList<A>(); processelements(lista); 14 Generics

Extends Wildcards public void processelements(list<? extends Fruit> elements) { for(fruit a : elements) { System.out.println(a.getValue()); /* Podemos agorar passar nossas frutas diversas ao método processelements */ List<Apple> listapple = new ArrayList<Apple>(); processelements(listapple); List<Orange> listorange = new ArrayList<Orange>(); processelements(listorange); List<Strawberry> liststrawberry = new ArrayList<Strawberry>(); processelements(liststrawberry); 15 Generics