reaproveitamento de código com generics

31
Globalcode – Open4education Reaproveitamento de códigos com Generics

Upload: cristiano-agosti

Post on 26-May-2015

976 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Reaproveitamento de código com Generics

Globalcode – Open4education

Reaproveitamento de códigos com Generics

Page 2: Reaproveitamento de código 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

Page 3: Reaproveitamento de código com Generics

Globalcode – Open4education

Agenda

● Conceito

● Surgimento

● Vantagens

● Padrões

● Exemplos

● Restrições

● Conclusão

Page 4: Reaproveitamento de código com Generics

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

Page 5: Reaproveitamento de código com Generics

Globalcode – Open4education

Generics

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

Page 6: Reaproveitamento de código com Generics

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

Page 7: Reaproveitamento de código com Generics

Globalcode – Open4education

Convenção

● E – Elemento

● K – Chave

● N – Número

● T – Tipo

● V – Valor

Page 8: Reaproveitamento de código com Generics

Globalcode – Open4education

Sem Generics

Page 9: Reaproveitamento de código com Generics

Globalcode – Open4education

ClassCastException

Page 10: Reaproveitamento de código com Generics

Globalcode – Open4education

Tratamento

Page 11: Reaproveitamento de código com Generics

Globalcode – Open4education

Com Generics

Page 12: Reaproveitamento de código com Generics

Globalcode – Open4education

Métodos sem Generics

Page 13: Reaproveitamento de código com Generics

Globalcode – Open4education

Métodos sem Generics

Page 14: Reaproveitamento de código com Generics

Globalcode – Open4education

Método Genérico com limite

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

Page 15: Reaproveitamento de código com Generics

Globalcode – Open4education

Método Genérico com limite

Page 16: Reaproveitamento de código com Generics

Globalcode – Open4education

Classe Genérica sem limite

Page 17: Reaproveitamento de código com Generics

Globalcode – Open4education

Classe Genérica com limite

Page 18: Reaproveitamento de código com Generics

Globalcode – Open4education

Classe Genérica com limite

Page 19: Reaproveitamento de código com Generics

Globalcode – Open4education

Múltiplos Tipos

Page 20: Reaproveitamento de código com Generics

Globalcode – Open4education

Múltiplos Tipos

Page 21: Reaproveitamento de código com Generics

Globalcode – Open4education

Limites

Page 22: Reaproveitamento de código com Generics

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>

Page 23: Reaproveitamento de código com Generics

Globalcode – Open4education

Generics x Wildcards

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

deve-se preferir curingas

Page 24: Reaproveitamento de código com Generics

Globalcode – Open4education

SubTipos

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

Page 25: Reaproveitamento de código com Generics

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)

Page 26: Reaproveitamento de código com Generics

Globalcode – Open4education

Antes x Depois Erasure

Page 27: Reaproveitamento de código com Generics

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

Page 28: Reaproveitamento de código com Generics

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

Page 29: Reaproveitamento de código com Generics

Globalcode – Open4education

Perguntas

Page 30: Reaproveitamento de código com Generics

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.

Page 31: Reaproveitamento de código com Generics

Globalcode – Open4education

Contato

● skype: cristiano.agosti

● twitter: @agosti

[email protected]

● facebook.com/cristiano.agosti

● agosti.blog.br