reaproveitamento de código com generics

Post on 26-May-2015

976 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Minha palestra sobre Reaproveitamento de código com Generics para a trilha Java University do TDC 2013

TRANSCRIPT

Globalcode – Open4education

Reaproveitamento de códigos com Generics

Globalcode – Open4education

Apresentação

● Mestre em Ciência da Computação

● Professor na Universidade do Oeste de Santa Catarina -

Unoesc (unoesc.edu.br)

● Sócio proprietário da Camtwo Sistemas (camtwo.com.br)

● A mais de 10 anos trabalhando com Java e web

● Autor do agosti.blog.br

Cristiano Agosti

Globalcode – Open4education

Agenda

● Conceito

● Surgimento

● Vantagens

● Padrões

● Exemplos

● Restrições

● Conclusão

Globalcode – Open4education

Surgimento

● Java Specification Request - JSR 014

● Surgiu na versão 5 do Java para possibilitar a criação de

tipos parametrizáveis

● Melhoram o mecanismo de tipos da linguagem

Globalcode – Open4education

Generics

São estruturas que permitem a escrita de um algoritmo sem a preocupação com os tipos de dados.

Globalcode – Open4education

Vantagens

● Sem necessidade de cast

● Código mais robusto pois o compilador verifica o tipo (type

safe)

● Menos erros em tempo de execução

● Reaproveitamento de código com programação genérica

Globalcode – Open4education

Convenção

● E – Elemento

● K – Chave

● N – Número

● T – Tipo

● V – Valor

Globalcode – Open4education

Sem Generics

Globalcode – Open4education

ClassCastException

Globalcode – Open4education

Tratamento

Globalcode – Open4education

Com Generics

Globalcode – Open4education

Métodos sem Generics

Globalcode – Open4education

Métodos sem Generics

Globalcode – Open4education

Método Genérico com limite

Bounded Type (tipo limitado)T extends Comparable<T>

Globalcode – Open4education

Método Genérico com limite

Globalcode – Open4education

Classe Genérica sem limite

Globalcode – Open4education

Classe Genérica com limite

Globalcode – Open4education

Classe Genérica com limite

Globalcode – Open4education

Múltiplos Tipos

Globalcode – Open4education

Múltiplos Tipos

Globalcode – Open4education

Limites

Globalcode – Open4education

Wildcards (curinga)

● Representado por ?

● Indica tipo desconhecido

● Usado em: parâmetro, atributo, variável ou retorno de

método

● Não usar em: parâmetro para métodos genéricos

● Limites descendente <? extends T>

● Limites ascendente <? extends T>

Globalcode – Open4education

Generics x Wildcards

se nao existir dependencia entre parametros e/ou tipos de retorno,

deve-se preferir curingas

Globalcode – Open4education

SubTipos

● Se o tipo F e subtipo de B● G e um tipo generico, ● G<F> nao e subtipo de G<B>

Globalcode – Open4education

Erasure (apagamento)

● O compilador Java cria uma unica representacao de byte code para cada tipo generico ou metodo generico

● Todas as instanciacoes dos Generics sao mapeadas para essa representacao usando uma tecnica chamada de Apagamento (Erasure)

Globalcode – Open4education

Antes x Depois Erasure

Globalcode – Open4education

Restrições Generics

● Não usar tipos primitivos● Não usar em atributos estáticos● Não usar para cast ou instanceof● Não usar em catch ou throw● Não criar instancias T valor = new T();● Não criar arrays T[ ] a = new T[10];● Não aceita sobrecarga

Globalcode – Open4education

Conclusões

● Boa prática de Programação

● Segurança e reaproveitamento do código

● Compatibilidade com código legado

● Simplicidade e Robustez

Globalcode – Open4education

Perguntas

Globalcode – Open4education

Referências

● http://docs.oracle.com/javase/tutorial/java/generics/

● http://blog.globalcode.com.br/2011/11/type-inference-no-

java-7-generics-com.html

● Java Generics and Collections - Maurice Naftalin. Editor

O'Reilly.

Globalcode – Open4education

Contato

● skype: cristiano.agosti

● twitter: @agosti

● cristiano.agosti@camtwo.com.br

● facebook.com/cristiano.agosti

● agosti.blog.br

top related