Tipos genéricos (cont)

Documentos relacionados
Tipos genéricos (cont)

Streams II. Overview. The notion of stream Java I/O stream hierarchy Files, and file access using streams Serialization

Java Collections Framework III

Bruce Eckel, Thinking in Patterns with Java, cf. José Valente de Oliveira 13-1

TrabalhadorEstudante te(123, Ana, Faro, feminino, 100.0, 22); Estudante e=te; //ok Estudante *pe = &te; //ok Estudante &se = te; //ok

Errors and exceptions

Herança e passagem de parâmetro AULA 09

Interfaces POO. Prof. Marcio Delamaro

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

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Java Collections Framework II

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

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

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Bruce Eckel, Thinking in Java, 4th edition, PrenticeHall, New Jersey, cf. José Valente de Oliveira 16-1

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

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

Herança e Polimorfismo

TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE II

Classe Abstrata e Interface

Profa. Thienne Johnson EACH/USP

Lição 11 Herança, polimorfismo e interfaces

INTERFACES DE JAVA. O JCF é uma arquitectura que se baseia em três entidades fundamentais:

Computação II Orientação a Objetos

Programação com genéricos

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

Rafael B. Pereira (

Orientação a Objetos e a Linguagem Java

Programação por Objectos. Java

Orientação a Objetos - Herança

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

Herança; Sobrescrita, Sobrecarga e Polimorfismo; Classes abstratas e concretas (finais).

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Binding and Casting. Bruce Eckel, Thinking in Java, 4th edition, PrenticeHall, New Jersey, cf.

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

final class UltimosDiasMeses{ static final int[] DIAS_DO_MES = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; }

Fig.1 Estrutura de definição de instâncias típica de uma classe.

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

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

Aula 24 Programação Modular, POO e Padrões de Projeto

[Desenvolvimento OO com Java] Classes abstratas e interfaces

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

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

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

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Fontes Bibliográficas. Estruturas de Dados Aula 14: Recursão. Introdução. Introdução (cont.)

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

Classes e Objetos em Java. Algoritmos e Programação I. Classes. Classes. Modificadores de Acesso. Classes. Revisão

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

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

Tipos abstratos de dados (TADs)

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.

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

Interfaces e Classes Internas

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

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

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

Polimorfismo. O que é polimorfismo?

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

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

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

Nome do Aluno: Matrícula: Turma: Data: 08/04/2013

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

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

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

Ordenação. Insertion Sort

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

Programação Orientada a Objetos

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

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Desenvolvimento OO com Java Classes abstratas e interfaces

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

5 Reuso de Classes. Desenvolvimento OO com Java. Vítor E. Silva Souza

Algoritmos e Estruturas de Dados 1

ORIENTAÇÃO A OBJETOS

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

4 Conceito de Herança

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

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

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

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

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Programação Orientada a Objetos OUTROS MECANISMOS

Programação Orientada a Objetos II

SCC PROGRAMAÇÃO ORIENTADA A OBJETOS

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2009/2010

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

POO29004 Programação Orientada a Objetos

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

package especificadores1; public class Alpha { public static void alphapublic(){ System.out.println("Alpha public!"); }

POO29004 Programação Orientada a Objetos

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

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

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

9 Classes Abstractas e Interfaces

Transcrição:

Tipos geéricos (cot) Bruce Eckel, Thikig i Java, 4th editio, PreticeHall, New Jersey, cf. http://midview.et/books/tij4 Gilad Bracha, Geerics i the Java Programmig Laguage a.k.a The Geerics Tutorial, Julho de 2004 cf. http://java.su.com/j2se/1.5/pdf/geerics-tutorial.pdf jvo@ualg.pt José Valete de Oliveira 18-1 Sumário Noções chave Defiição e utilização de tipos geéricos Hierarquias de subtipos Tipos com limites Especificação UML Métodos geéricos Desevolvimeto de tipos geéricos: O quicksort revisitado Rasura Polimorfismo revisitado jvo@ualg.pt José Valete de Oliveira 18-2 1

Utilização de tipos geéricos Os tipos geéricos podem ser usados a declaração de:. Atributos;. Variáveis locais;. Parâmetros de métodos;. Tipos de retoro (de métodos). jvo@ualg.pt José Valete de Oliveira 18-3 Especificação de tipos geéricos em UML public class Stack <T> { ArrayList<T> items; public void push(t item) { // public T pop() { // 2

Métodos geéricos iterface Collectio<E> exteds Iterable<E> { <T>T[] toarray(t[] a); // public class MyCollectio<E> implemets Collectio<E> { //... public <T> T[] toarray(t[] a) { it i = 0; for(e elemet: this) a[i++] = elemet; retur a; jvo@ualg.pt José Valete de Oliveira 18-5 Utilizado o método geérico toarray Collectio<Iteger> ci = ew MyCollectio<Iteger>(); ci.add(1); Object[] ao = ew Object[ci.size()]; ao = ci.toarray(ao); jvo@ualg.pt José Valete de Oliveira 18-6 3

Istaciação, exemplos de public class Tst { public <T> T bypass(t obj) {retur obj; public void caller() { Strig s1 = abc"; Strig s2 = this.<strig>bypass(s1); Strig s3 = bypass(s1); // T -> Strig Object o1 = bypass(s1); // T -> Strig Object o2 = bypass((object) s1); // T -> Object Strig s4 = bypass((object) s1); // ERROR! Strig s5 = (Strig) bypass((object) s1); // OK agai Desevolvimeto de tipos geéricos jvo@ualg.pt José Valete de Oliveira 18-8 4

class Poit class Poit { private it x, y; public Poit(it ax, it ay) { class Poit { x=ax; private double x, y; y=ay; public Poit(double ax, double ay) { x=ax; public it getx() { retur x; y=ay; public it gety() { retur y; public double getx() { retur x; public double dist(poit p) { public double gety() { retur y; it dx = x p.getx(); it dy = y p.gety(); public double dist(poit p) { retur Math.sqrt(dx*dx+dy*dy); double dx = x p.getx(); double dy = y p.gety(); retur Math.sqrt(dx*dx+dy*dy); O que ós gostaríamos: Poit<Iteger> origi = ew Poit<Iteger>(0, 0); Poit<Double> pd = ew Poit<Double>(1.3, 2.4); jvo@ualg.pt José Valete de Oliveira 16-10 5

class Poit class Poit { private it x, y; public Poit(it ax, it ay) { class Poit { x=ax; private double x, y; y=ay; public Poit(double ax, double ay) { x=ax; public it getx() { retur x; y=ay; public it gety() { retur y; public double getx() { retur x; public double dist(poit p) { public double gety() { retur y; it dx = x p.getx(); it dy = y p.gety(); public double dist(poit p) { retur Math.sqrt(dx*dx+dy*dy); double dx = x p.getx(); double dy = y p.gety(); retur Math.sqrt(dx*dx+dy*dy); class Poit como um tipo geérico class Poit<T exteds Number> { private T x, y; public Poit(T ax, T ay) { x=ax; y=ay; public T getx() { retur x; public T gety() { retur y; 6

class Poit como um tipo geérico public double dist(poit<? exteds Number> p) { double dx = getx().doublevalue()- p.getx().doublevalue(); double dy = gety().doublevalue()- p.gety().doublevalue(); retur Math.sqrt(dx*dx+dy*dy); @Override public Strig tostrig() { retur x+ "@" + y; Usado potos geéricos public static void mai(strig[] args) { Poit<Iteger> origi = ew Poit<Iteger>(0,0); Poit<Double> pd = ew Poit<Double> (1.1, 2.5); System.out.pritl(origi + ".dist("+pd+"): "+ origi.dist(pd)); 7

Recallig quicksort jvo@ualg.pt José Valete de Oliveira 18-15 Ateriormete @SuppressWarigs( uchecked ) abstract class Quicksort { private Comparable[] data; /** pré-geerics **/ iterface Comparable { it compareto(object o); public fial void quicksort(comparable[] d) { data = d; quicksort(0, data.legth-1); /** quicksort method as the template method */ private fial void quicksort(it left, it right) { if (right <= left) retur; it i = partitio(left, right); quicksort(left, i-1); quicksort(i+1, right); jvo@ualg.pt José Valete de Oliveira 18-16 8

O que gostaríamos public class Mai { public static void mai(strig[] args) { List<Fractio> lst = ew ArrayList<Fractio>(); lst.add(ew Fractio(1, 7)); lst.add(ew Fractio(5, 2)); lst.add(ew Fractio(1, 2)); GQuicksort<Fractio> qs = ew ProbQuickSort<Fractio>(); qs.quicksort(lst); for(fractio f: lst) System.out.pritl (f); jvo@ualg.pt José Valete de Oliveira 18-17 O quicksort revisitado public abstract class GQuicksort<T exteds Comparable<T>> { private List<T> data; public fial void quicksort(list<t> d) { data = d; quicksort(0, data.size()-1); private fial void quicksort(it left, it right) { if (right <= left) retur; it i = partitio(left, right); quicksort(left, i-1); quicksort(i+1, right); jvo@ualg.pt José Valete de Oliveira 18-18 9

Ateriormete /** Call this i a subclass for swapig elemets i ad j */ protected fial void exchage(it i, it j) { Comparable tmp = data[i]; data[i] = data[j]; data[j] = tmp; /** Use this i subclasses to compare elemets x.compareto(y) aswer 0 if x ==y; -1 if x < y; 1 se x>y */ protected fial boolea less(it i, it j) { retur (data[i].compareto(data[j]) < 0); jvo@ualg.pt José Valete de Oliveira 18-19 O quicksort revisitado protected fial void exchage(iti, itj) { T tmp = data.get(i); data.set(i, data.get(j)); data.set(j, tmp); protected fial boolea less(it i, itj) { T di = data.get(i); T dj = data.get(j); retur (di.compareto(dj) < 0); jvo@ualg.pt José Valete de Oliveira 18-20 10

Ates class ProbQuickSort exteds Quicksort { @Override protected it partitio(it left, it right) { it last=left; it pp = left + (it) (Math.radom() * (right-left)); // pivot positio exchage(left, pp); for(it i=left+1; i <= right; i++) if (less(i, left)) exchage(i, ++last); exchage(left, last); retur last; jvo@ualg.pt José Valete de Oliveira 18-21 O quicksort revisitado class GProbQuickort<T extedscomparable<t>> exteds GQuicksort<T> { protected it partitio(itleft, it right) { it last=left; it pp = left + (it) (Math.radom() * (right-left)); // pivot positio exchage(left, pp); for(it i=left+1; i <= right; i++) if (less(i, left)) exchage(i, ++last); exchage(left, last); retur last; jvo@ualg.pt José Valete de Oliveira 18-22 11

Será que podemos usar esta classe atiga /** a pre-geerics versio */ class Fractio implemets Comparable { private it um, de; // public it compareto (Object o) { // /** pré-geerics **/ iterface Comparable { it compareto(objecto); jvo@ualg.pt José Valete de Oliveira 18-23 este cliete? public class Mai { public static void mai(strig[] args) { List<Fractio> lst = ew ArrayList<Fractio>(); lst.add(ew Fractio(1, 7)); lst.add(ew Fractio(5, 2)); lst.add(ew Fractio(1, 2)); GQuicksort<Fractio> qs = ew ProbQuickSort<Fractio>(); qs.quicksort(lst); for(fractio f: lst) System.out.pritl (f); jvo@ualg.pt José Valete de Oliveira 18-24 12

Vejamos public abstract class GQuicksort<T exteds Comparable<T>> { private List<T> data; // protected fial boolea less(it i, it j) { T di = data.get(i); T dj = data.get(j); retur (di.compareto(dj) < 0); jvo@ualg.pt José Valete de Oliveira 18-25 Relembremos /** pré-geerics **/ iterface Comparable { it compareto(object o); /** actualmete **/ iterface Comparable<T> { it compareto(t t); jvo@ualg.pt José Valete de Oliveira 18-26 13

Relembremos /** a pre-geerics versio */ class Fractio implemets Comparable { private it um, de; // public it compareto (Object o) { // jvo@ualg.pt José Valete de Oliveira 18-27 e se fizermos estas alterações? public abstract classgquicksort<t exteds Comparable<? super T>> { private List<T> data; // class GProbQuickort<T exteds Comparable<? super T>> exteds GQuicksort<T> { // jvo@ualg.pt José Valete de Oliveira 18-28 14

Ode estamos? Noções chave Defiição e utilização de tipos geéricos Hierarquias de subtipos Tipos com limites Especificação UML Métodos geéricos Desevolvimeto de tipos geéricos: O quicksort revisitado Rasura Polimorfismo revisitado jvo@ualg.pt José Valete de Oliveira 18-29 15