SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
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 não existir dependê ncia entre
parâ metros e/ou tipos de retorno,
deve-se preferir curingas
Globalcode – Open4education
SubTipos
● Se o tipo F é subtipo de B
● G é um tipo genérico,
● G<F> não é subtipo de G<B>
Globalcode – Open4education
Erasure (apagamento)
● O compilador Java cria uma ú nica representaç ão de byte
code para cada tipo genérico ou método genérico
● Todas as instanciaç ões dos Generics são mapeadas para
essa representaç ão usando uma técnica 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

Mais conteúdo relacionado

Semelhante a Reaproveitamento código Generics

Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...minastestingconference
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsSamanta Cicilia
 
Seminário sobre GO
Seminário sobre GOSeminário sobre GO
Seminário sobre GOgptavares
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoAnderson Ledo
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeKamilla Queiroz Xavier
 
Programação Diversitária
Programação DiversitáriaProgramação Diversitária
Programação DiversitáriaLaís Berlatto
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...Rafael Chiavegatto
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDEAnderson Silveira
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptxssuser980608
 
TDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTTDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTLoiane Groner
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 

Semelhante a Reaproveitamento código Generics (20)

Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
Seminário sobre GO
Seminário sobre GOSeminário sobre GO
Seminário sobre GO
 
Aula 04
Aula 04Aula 04
Aula 04
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Curso de Groovy
Curso de GroovyCurso de Groovy
Curso de Groovy
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Python tdc2019
Python tdc2019 Python tdc2019
Python tdc2019
 
DevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a QualidadeDevQA - Da zona de conforto ao comprometimento com a Qualidade
DevQA - Da zona de conforto ao comprometimento com a Qualidade
 
Programação Diversitária
Programação DiversitáriaProgramação Diversitária
Programação Diversitária
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
 
Produtividade com Eclipse IDE
Produtividade com Eclipse IDEProdutividade com Eclipse IDE
Produtividade com Eclipse IDE
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptx
 
TDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTTDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWT
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
burlando um WAF
burlando um WAFburlando um WAF
burlando um WAF
 

Mais de Cristiano Agosti

Mais de Cristiano Agosti (6)

Apresentação Tdc2015 - Trilha Java
Apresentação Tdc2015 - Trilha JavaApresentação Tdc2015 - Trilha Java
Apresentação Tdc2015 - Trilha Java
 
Vraptor 3
Vraptor 3Vraptor 3
Vraptor 3
 
03 jax-ws
03 jax-ws03 jax-ws
03 jax-ws
 
Portal de Colaboração Social
Portal de Colaboração SocialPortal de Colaboração Social
Portal de Colaboração Social
 
Jogo para dispositivos móveis
Jogo para dispositivos móveisJogo para dispositivos móveis
Jogo para dispositivos móveis
 
Apache poi
Apache poiApache poi
Apache poi
 

Reaproveitamento código Generics