Profa. Thienne Johnson EACH/USP

Documentos relacionados
Genéricos. Profa. Thienne Johnson EACH/USP

Genéricos by Pearson Education do Brasil

Programação Orientada a Objetos

GENÉRICOS EM JAVA. Java Generics

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Métodos Genéricos. Prof.: Michele Nasu Tomiyama Bucci

Generics - Java. Fernando Santos. Programação Orientada a Objetos

Programação Orientada a Objetos

Programação Orientada a Objetos

Programação com genéricos

Collections Framework

JAVA COLLECTIONS API: LISTAS

Interfaces POO. Prof. Marcio Delamaro

Introdução a classes e objetos by Pearson Education do Brasil

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

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

Tipos, Literais, Operadores

Tipos, Literais, Operadores

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

Programação Estruturada e Orientada a Objetos

LÓGICA DE PROGRAMAÇÃO INTRODUÇÃO AO JAVA. Professor Carlos Muniz

// quando o estado do Sujeito muda

JAVA. Professor: Bruno Toledo

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

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

Programação por Objectos. Java

9 Classes Abstractas e Interfaces

AULA 6 - ARRAYS. Array de 10 elementos

capta a noção elementar de ordemde chegada no processamento de tarefas, além da ordem de chegada é típico atender à prioridade

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

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Orientação a Objetos AULA 09

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

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

5 Arrays. 5.1 Criando um array. 5.2 Inicializando arrays. c:\>java Array Janeiro tem 31 dias.

Conceitos de Interface; classes abstratas; Diagrama de sequencia, Diagrama de atividades, classes aninhadas e Listas dinâmicas

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Vetores Unimensionais

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

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

Lição 4 Fundamentos da programação

Programação Orientada a Objetos para Redes de Computadores

Linguagens de Programação

Palavras Reservadas da Linguagem Java

Programação Orientada a Objetos II

Linguagem de Programação Orientada a Objeto Coleções

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

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

Coleções - continuação. Profa. Thienne Johnson EACH/USP

PCC104 - Projeto e Análise de Algoritmos

TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE II

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011

Paradigmas da Programação PPROG. Tipos Enumerados. Nelson Freire (ISEP DEI-PPROG 2013/14) 1/20

Atividade 08 - Utilizando Collections - List

Linguagem de Programação II Implementação

p Ja usamos, por diversas vezes, a classe String. Vimos o sistema de pacotes do Java e nunca precisamos dar um import nessa classe.

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++.

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

Programação orientada a objetos em Java

Coleções. Profa. Thienne Johnson EACH/USP

Tipos genéricos (cont)

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Programação Orientada a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

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

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

AULA TEÓRICA 7 Tema 7. Colecções (cont.) Vector Ø Criação Ø Manipulação

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

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

PROGRAMAÇÃO JAVA. Parte 3

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Estrutura de Dados Funções e Procedimentos

Linguagem de programação Java

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

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

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

Programação Orientada a Objetos

Programação por Objectos. Java

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

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

Strings e Arrays POO

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Paradigmas da Programação PPROG GENÉRICOS. (Livro Big Java, Late Objects Capítulo 18) Nelson Freire (ISEP DEI-PPROG 2014/15) 1/23

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

Coleções. Prof. Marcelo Roberto Zorzan

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Programação Orientada a Objetos

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

Revisão. Classe e objeto Construtores Polimorfismo Sobrecarga Pacote padrão

Variáveis primitivas e Controle de fluxo

Transcrição:

Profa. Thienne Johnson EACH/USP

Declarando classes usando generics Métodos que usam um parâmetro de tipo como tipo de retorno

Declaração da classe BasicGeneric: class BasicGeneric<A> Contém o parâmetro de tipo: <A> Indica que a classe declarada é uma classe Generics Classe não trabalha com nenhuma referência a um tipo específico Declaração do atributo: private A data; O atributo data é de um tipo Generic e depende do tipo de dado com que o objeto BasicGeneric for desenvolvido para trabalhar

Deve ser especificado o tipo de referência com qual se vai trabalhar BasicGeneric<String> basicgeneric = new BasicGeneric<String>(data1); BasicGeneric<Integer> basicgeneric =new BasicGeneric<Integer>(data1);

Declaração do método getdata: public A getdata() { return data; }

presa ao tipo String: BasicGeneric<String> basicgeneric = new BasicGeneric<String>(data1); String data2 = basicgeneric.getdata(); presa ao tipo Integer: BasicGeneric<Integer> basicgeneric = new BasicGeneric<Integer>(data1); Integer data2 = basicgeneric.getdata();

Limitando as instanciações de tipo de uma classe: Utilize a palavra-chave extends no parâmetro de tipo class ClassName <ParameterName extends ParentClass>

Tipos Generics do Java são restritos a tipos de referência (objetos) e não funcionarão com tipos primitivos BasicGeneric<int> basicgeneric = new BasicGeneric<int>(data1); Solução: Encapsular tipos primitivos antes de usá-los Utilizar tipos encapsuladores (wrapper types) como argumentos para um tipo Generics

O método generico maximum determina e retorna o maior de 3 argumentos do mesmo tipo. O operador relacional > não pode ser usado com tipos de referência, mas é possível comparar 2 objetos da mesma classe se a classe implementar a interface génerica interface Comparable<T> (pacote java.lang). Todos as classes empacotadoras implementam esta interface.

Objetos Comparable<T> tem um método compareto. O método retorna 0 se os objetos são iguais, um inteiro negativo se object1 é menor do que object2 ou um inteiro positivo se object1 é maior do que object2. Um benefício de implementar a interface Comparable<T> é que objetos Comparable<T>podem ser usados com os métodos de ordenar e procurar objetos da classe Collections (package java.util). (C) 2010 Pearson Education, Inc. All rights reserved.

(C) 2010 Pearson Education, Inc. All rights reserved.

(C) 2010 Pearson Education, Inc. All rights reserved.

A seção de parâmetro de tipo especifica que T extende Comparable<T> Somente objetos das classes que implementam a interface Comparable<T> podem usar este método. Comparable é conhecido como o limite superior do parâmetro de tipo. Por padrão, Object é o limite superior. (C) 2010 Pearson Education, Inc. All rights reserved.

Quando o compilador traduz o método maximum em Java bytecodes, ele faz erasure para trocar os parâmetros de tipo com tipos reais. Todos os parâmetros de tipo são trocados pelo limite superior do parâmetro de tipo. Quando o compliador substitui a informação do parâmetro de tipo pelo tipo limite superior na declaração de método, ele insere também as operações de cast na frente de cada método chamado para realizar erasure.

(C) 2010 Pearson Education, Inc. All rights reserved.

public class OverloadedMethods { // method printarray to print Integer array public static void printarray( Integer[] inputarray ) { // display array elements for ( Integer element : inputarray ) System.out.printf( "%s ", element ); System.out.println(); } // end method printarray // method printarray to print Double array public static void printarray( Double[] inputarray ) { // display array elements for ( Double element : inputarray ) System.out.printf( "%s ", element ); System.out.println(); } // end method printarray // method printarray to print Character array public static void printarray( Character[] inputarray ) { // display array elements for ( Character element : inputarray ) System.out.printf( "%s ", element ); System.out.println(); } // end method printarray public static void main( String args[] ) { // create arrays of Integer, Double and Character Integer[] integerarray = { 1, 2, 3, 4, 5, 6 }; Double[] doublearray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; Character[] characterarray = { 'H', 'E', 'L', 'L', 'O' }; System.out.println( "Array integerarray contains:" ); printarray( integerarray ); // pass an Integer array System.out.println( "\narray doublearray contains:" ); printarray( doublearray ); // pass a Double array

// Fig. 18.3: GenericMethodTest.java // Using generic methods to print array of different types. public class GenericsMethodTest { // generic method printarray public static < E > void printarray( E[] inputarray ) { // display array elements for ( E element : inputarray ) System.out.printf( "%s ", element ); System.out.println(); } // end method printarray public static void main( String args[] ) { // create arrays of Integer, Double and Character Integer[] integerarray = { 1, 2, 3, 4, 5, 6 }; Double[] doublearray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; Character[] characterarray = { 'H', 'E', 'L', 'L', 'O' }; System.out.println( "Array integerarray contains:" ); printarray( integerarray ); // pass an Integer array System.out.println( "\narray doublearray contains:" ); printarray( doublearray ); // pass a Double array System.out.println( "\narray characterarray contains:" ); printarray( characterarray ); // pass a Character array } // end main } // end class GenericMethodTest

// Fig. 18.5: MaximumTest.java // Generic method maximum returns the largest of three objects. public class MaximumTest { // determines the largest of three Comparable objects public static < T extends Comparable< T > > T maximum( T x, T y, T z ) { T max = x; // assume x is initially the largest if ( y.compareto( max ) > 0 ) max = y; // y is the largest so far if ( z.compareto( max ) > 0 ) max = z; // z is the largest return max; // returns the largest object } // end method maximum public static void main( String args[] ) { System.out.printf( "Maximum of %d, %d and %d is %d\n\n", 3, 4, 5, maximum( 3, 4, 5 ) ); System.out.printf( "Maximum of %.1f, %.1f and %.1f is %.1f\n\n", 6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) ); System.out.printf( "Maximum of %s, %s and %s is %s\n", "pear", "apple", "orange", maximum( "pear", "apple", "orange" ) ); } // end main } // end class MaximumTest

Considere as seguintes classes: public class AnimalHouse<E> { private E animal; public void setanimal(e x) { animal = x; } public E getanimal() { return animal; } } public class Animal{} public class Cat extends Animal {} public class Dog extends Animal {} Para os seguintes trechos de código, identifique se o código acima falha para compilar, compila com warning, gera um erro de runtime, ou nenhum dos anteriores (compila e executa sem problema) a. AnimalHouse<Animal> house = new AnimalHouse<Cat>(); b. AnimalHouse<Dog> house = new AnimalHouse<Animal>(); c. AnimalHouse<?> house = new AnimalHouse<Cat>(); house.setanimal(new Cat()); d. AnimalHouse house = new AnimalHouse(); house.setanimal(new Dog());

Para o seguinte código, escreva outra versão usando Genericos import java.util.list; import java.util.arraylist; public class Library { private List resources = new ArrayList(); public void addmedia(media x) { resources.add(x); } public Media retrievelast() { int size = resources.size(); if (size > 0) { return (Media)resources.get(size - 1);} return null; } } interface Media {} interface Book extends Media {} interface Video extends Media {} interface Newspaper extends Media {}