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

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

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

Profa. Thienne Johnson EACH/USP

Linguagem de Programação III

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

Rafael B. Pereira (

Programação com genéricos

9 Classes Abstractas e Interfaces

Aula 3 POO 1 Classe e Objeto. Profa. Elaine Faria UFU

Herança Tiago Eugenio de Melo

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

POO Programação Orientada a Objetos. Classes e Objetos 2

Generics POO. Prof. Marcio Delamaro

Herança e Polimorfismo - Parte I -

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

A R R A Y S E E X C E P T I O N S P R O F. M E. H É L I O E S P E R I D I Ã O

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

Linguagem de Programação III

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

Programação por Objectos. Java

Operadores Lógicos e Relacionais Comandos condicionais (if-else) Casting AULA 04

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

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Programação por Objectos. Java

Instituto Federal de Educação, Ciência e Tecnologia da Bahia Campus Irecê Disciplina: Linguagem Técnica II Prof o Jonatas Bastos

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Herança e Polimorfismo -Parte I - Mário Meireles Teixeira O exemplo DoME. Database of Multimedia Entertainment

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

ALOCAÇÃO DINÂMICA DE MEMÓRIA

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

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

Palavras Reservadas da Linguagem Java

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

Genéricos by Pearson Education do Brasil

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

A figura abaixo representa uma classe denominada Carteira. Esta classe é composta dos métodos depositar(valor) e retirar(valor) e do atributo saldo.

TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE II

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

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

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Interfaces POO. Prof. Marcio Delamaro

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

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

Templates. BCC Programação Orientada a Objectos(POO) Departamento de Computação - UFOP

No final deste curso, saberás criar programas através da linguagem de programação Java.

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

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Classes e Objetos. Sintaxe de classe em Java

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

Conceitos de Programação Orientada a Objetos

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

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

Classe Abstrata e Interface

AULA 02 DADOS PRIMITIVOS E EXERCÍCIOS

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

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

POO29004 Programação Orientada a Objetos

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

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

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

Programação Orientada a Objetos para Redes de Computadores. Polimorfismo com Hierarquias de Herança. Exemplo: Hierarquia Animal

Orientação a Objetos e Java

Programação Orientada a Objetos

Programação Orientada a Objetos

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

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

Usuários. Interface com Usuários. Programa Aplicativo. Interfaces de Programação. Sistema Operacional

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

Atividade 08 - Utilizando Collections - List

Implementação da programação modular II

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

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

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

Java Variáveis e Controle Fluxo

POO29004 Programação Orientada a Objetos

Introdução a Programação Orientada a Aspectos

Linguagem de Programação II Herança

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

ANHANGUERA ESTRUTURA DE DADOS AULA 02 O QUE É ESTRUTURA DE DADOS? Prof. Thomás da Costa

- Mapa de memória de um processo - Ponteiros

Orientação a Objetos AULA 09

Programação Orientada a Objetos para Redes de Computadores

Unidade: sobrecarga, construtores e herança

A Relação de Subtipo e Tipos Genéricos

C O N S T R U T O R E S E S O B R E C A R G A P R O F. M E. H É L I O E S P E R I D I Ã O

Linguagem de Programação II Implementação

Instituto Superior de Engenharia de Lisboa

PROGRAMAÇÃO ORIENTADA A OBJETOS JAVA

C com introdução a OO

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Computação II Orientação a Objetos

Programação Orientada a Objetos II Java Décima primeira aula

Transcrição:

- Java Fernando Santos Programação Orientada a Objetos

Generics é uma funcionalidade incorporada ao Java a partir da versão 5.0 Permite aos programadores escreverem métodos genéricos Os parâmetros dos métodos, variáveis locais e o tipo de retorno podem ser definidos na chamada do método Permite ao mesmo método ser invocado usando-se tipos distintos (sem precisar sobrescrevê-lo) Permite também a definição de classes genéricas Os atributos da classe podem ser definidos no momento da instanciação do objeto Recurso útil ao definir classes como estruturas de dados Generics em Java oferece os mesmos recursos dos Templates em C++

Considere o método imprimevetor da classe abaixo Ao tentar compilar o código um erro é apresentado Embora o tipo double contenha o tipo int, uma referência para double nao pode referenciar um vetor de int Seria necessário ter 2 implementações de imprimevetor

O problema se agravaria, à medida em que fosse necessário imprimir vetores de outros tipos de dados Para cada tipo, uma nova implementação Cada implementação teria apenas o cabeçalho do método (e o tipo usado no for) diferente das demais

Este problema seria facilmente resolvido ao implementar um método genérico Define-se um ou mais tipos genéricos, que serão delimitados pelos símbolos < > Estes tipos são definidos na chamada do método

Uma ressalva: métodos genéricos (e classes genéricas) podem ser definidos apenas para tipos referenciáveis Logo, não podem ser definidos para tipos primitivos {byte, short, int, long, float, double, boolean, char} Essa limitação é contornada usando-se as classes empacotadoras de tipo, que são uma alternativa oferecida por Java para tratar tipos primitivos como referenciáveis de forma transparente {Byte, Short, Integer, Long, Float, Double, Boolean, Character}

Mas qual seria a diferença entre usar um método genérico e um método usando Object, como abaixo?

Mas qual seria a diferença entre usar um método genérico e um método usando Object, como abaixo? Para este caso em específico, a diferença é NENHUMA!

Java implementa métodos e classes genéricas da seguinte forma substitui os tipos genéricos por tipos que sejam de uma superclasse contenha todas as candidatas a serem usadas realiza o casting de tipos (quando necessário) implicitamente esse processo é conhecido como erasure No exemplo anterior, o tipo Object seria usado pois é o único tipo capaz de referenciar qualquer objeto que invoque o método Obs.: A abordagem do erasure é diferente da utilizada nos templates emc++. Lá o compilador gera códigos para sobrescrever o método considerando cada tipo que o invoca

Considere agora a função genérica maior abaixo

Neste caso, substituir o tipo genérico por Object não forneceria uma implementação equivalente Isto porque o tipo genérico deve implementar a interface Comparable Generics considera a palavra-chave extends tanto para denotar classes que herdam superclasses quando para classes que implementam uma interface Ao fazer isto, é possível usar o método compareto do tipo genérico (o que não seria possível utilizando Object) Além disto, Generics realiza o casting implicito do tipo de retorno onde o método foi invocado

O conceito de Generics pode ser estendido às classes Como exemplo, considere a implementação (não genérica) da classe Pilha abaixo

A classe Pilha foi implementada para armazenar apenas números inteiros Mesmo que a estrutura da Pilha seja a mesma, ela nao poderia armazenar dados de outros tipos Para resolver este problema, é possível definir a classe Pilha genericamente, de modo que ela seja capaz de armazenar qualquer tipo de dado (desde que seja não-primitivo) Generics auxilia na implementação de estruturas de dados Diversas classes que compõe o Collections Java são definidas de forma genérica

A implementação abaixo define uma Pilha genérica O tipo T pode ser usado na implementação da classe, mas será definido somente no momento da sua instanciação

No código acima, são instanciadas 2 Pilhas: uma armazena objetos Par, a outra armazena Inteiros Para cada instanciação, T assume um tipo distinto na pilha Note que, o tipo de retorno de p1.pop() é Par e p2.pop() retorna um Integer (casting implícito)