• Nenhum resultado encontrado

Tipos Genericos

N/A
N/A
Protected

Academic year: 2021

Share "Tipos Genericos"

Copied!
35
0
0

Texto

(1)

CEA032 – PROGRAMAÇÃO DE

COMPUTADORES II

Prof. Filipe Nunes Ribeiro

(2)

INTRODUÇÃO

(3)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

INTRODUÇÃO

Já utilizamos tipos genéricos?

(4)

INTRODUÇÃO

Onde seria útil tipos genéricos?

Array de vários tipos (Inteiro, String, ContaCorrente,

Empregado)

Método de ordenação é igual?

Classe Pilha (com vários objetos)

(5)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

EXEMPLO DE SOBRECARGA DE MÉTODOS

MetodosSobrecarregados.java

Parte 1

(6)

EXEMPLO DE SOBRECARGA DE MÉTODOS

MetodosSobrecarregados.java

Parte 2

(7)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Se fôssemos substituir os tipos de elemento em cada

método por um nome genérico – T por convenção – como

ficaria?

(8)

MÉTODOS GENÉRICOS

Se fôssemos substituir os tipos de elemento em cada

método por um nome genérico – T por convenção – como

ficaria?

(9)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Se as operações realizadas por vários métodos

sobrecarregados são idênticas para cada tipo de

argumento...

... pode ser escrita uma única declaração de um método

genérico que pode ser chamada com argumentos de tipos

diferentes.

(10)

MÉTODOS GENÉRICOS

MetodosSobrecarregados.java

Com generics

Nova Implementação

Mais Simples

Economia de Código

(11)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Declaração de métodos genéricos

Seção de parâmetros

Separado por sinal de maior e menor

Precede o tipo de retorno do método

Contém um ou mais parâmetros formais (parâmetro de tipos)

(12)

MÉTODOS GENÉRICOS

Declaração de métodos genéricos

Parâmetros formais

Identificador que especifica um nome genérico do tipo (T, M – não

importa o nome) mas ele deve ser igual ao tipo utilizado no

método.

É recomendável que os parâmetros formais sejam especificados

com letras maiúsculas individuais. Tipicamente, um parâmetro

formal que representa o tipo de um elemento do array é nomeado

T

(13)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Declaração de métodos genéricos

Parâmetros formais

Podem referenciar apenas tipos por referência (Não primitivos)

Um parâmetro de tipo pode ser declarado apenas uma vez, porem

(14)

MÉTODOS GENÉRICOS

(15)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Locais onde T poderá

referenciar Double,

Integer ou Character

(16)

MÉTODOS GENÉRICOS

No exemplo visto anteriormente

Declarando o método imprimeArray como um método

genérico eliminou-se a necessidade dos métodos

sobrecarregados

Economizou-se 19 linhas de código

Criou-se um método reutilizável que pode ser utilizado

(17)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Poderíamos fazer isso?

(18)

MÉTODOS GENÉRICOS

(19)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Poderíamos fazer isso?

O resultado seria o mesmo?

Sim. O resultado seria o mesmo. Os

benefícios da utilização de tipos

genéricos tornam-se aparentes

quando o método também retorna

um tipo genérico como veremos a

seguir.

(20)

MÉTODOS GENÉRICOS

Poderíamos fazer isso?

Na prática, o compilador faz isso

Remove seção de parâmetros de

tipo e os substitui por tipos reais

(21)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Podemos restringir os tipos que um método genérico

pode receber

Podemos exigir que o tipo implemente uma interface ou

seja subclasse de uma determinada classe

Para isso usamos a seguinte notação no parâmetro

(22)
(23)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

MÉTODOS GENÉRICOS

Auto-Boxing é feito automaticamente (conversão de int

para Integer)

O compilador verifica que não existe um método ‘maximo’

com dois inteiros como parâmetro mas existe um método

genérico que recebe dois parâmetros

Implicitamente converte por autoboxing os dois valores de

int para Integer

A classe Integer implementa a interface

Comparable<Integer> e portanto o método pode ser

executado

(24)
(25)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

CLASSES GENÉRICAS

Permitem parametrizar as variáveis de instância da

classe, os tipos dos argumentos e retorno dos métodos

Especificamos os parâmetros de tipo após o nome da

classe:

public class NomeDaClasse <E> { . . . }

Suponha que precisamos de uma pilha de Integer e uma

pilha de Double. Com Genéricos, precisamos escrever a

definição da classe Pilha apenas uma vez

(26)

CLASSES GENÉRICAS

Ao criarmos uma instância da classe Pilha temos que

especificar o tipo dos elementos armazenados na pilha.

Se tentarmos acrescentar um elemento de tipo diferente

ocorre erro de compilação. Isso garante uma maior

segurança para o programador

(27)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

CLASSES GENÉRICAS

(28)

CLASSES GENÉRICAS

(29)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

CLASSES GENÉRICAS

(30)

CLASSES GENÉRICAS

(31)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

CLASSES GENÉRICAS

(32)

CLASSES GENÉRICAS

Mesmo quando uma classe é genérica, podemos criar

uma instância dessa classe sem passar nenhum

argumento para os parâmetros de tipo:

Pilha pilha = new Pilha( 10 );

Dizemos que a pilha armazena tipos brutos, ou seja,

pode armazenar qualquer tipo de objeto.

Na verdade, cada parâmetro de tipo é substituído pelo

(33)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

CLASSES GENÉRICAS

No Java 5, as coleções (Framework Collection) passaram

(34)

CLASSES GENÉRICAS

No Java 5, as coleções (Framework Collection) passaram

(35)

Universidade Federal de Ouro Preto Campus João Monlevade

Instituto de Ciências Exatas e Aplicadas

CLASSES GENÉRICAS

Referências

Documentos relacionados

Durante os treinos dos atletas do basquete em cadeira de rodas, eles recebem assistência pelos acadêmicos do projeto para facilitar transferências da sua cadeira de rodas para

abrigados nas instituições escolares da Rede Estadual de Ensino circunscritas ao município de Florianópolis integrante da 18° Secretaria Regional do governo de

Para promover a leitura, o acervo da biblioteca escolar pode ser, segundo UNESCO (1999), que expõe o seu manifesto sobre bibliotecas escolares, constituído por um acervo

Proporcionar momentos de prazer e alegria aos alunos e à toda comunidade do CSFX, com esse objetivo apresentamos o projeto Sarau Literário que busca resgatar e

Partindo desses fatos, o objetivo deste trabalho foi avaliar o efeito do magnésio, boro e manganês na absorção de zinco por raízes destacadas em duas cultivares de arroz (IAC 165 e

Uma vez que a professora Lurdes para além de responsável pelo núcleo de Patinagem é também a coordenadora de todos núcleos de DE, esta pediu-me para lecionar sozinho os

Liver resection, as well as biliary drainage, is commonly employed and represents the ideal procedure in the treatment of intrahepatic lithiasis because it can remove the

Isso pode ser feito clicando o botão esquerdo do mouse e desenhando um retângulo ao redor dos arquivos a serem renomeados ou manter pressionado o Ctrl e clicar em cada um des-