SlideShare une entreprise Scribd logo
1  sur  19
Equals, Hashcode, ToString,Comparable e Comparator. Desmistificando o Conhecimento - 2010 Rodrigo Cascarrolho twitter.com/rodrigocasca
Motivação Aumento da qualidade do software. Nivelamento do conhecimento. Técnico Conceitual Processo Equipe com aprendizado contínuo. Gerar o hábito de questionar: Como vou implementar isso? Como vou testar isso? Como melhorar o processo? Refactoring... Aumentar a compreensão do domínio.
Object Todas as classes estendem Object. Os métodos não-finais foram projetados para serem estendidos. Os contratos DEVEM ser obedecidos.
Object Todas as classes estendem Object. Os métodos não-finais foram projetados para serem estendidos. Os contratos DEVEM ser obedecidos.
Pojo
equals() Quando NÃO usar: A classe é única (Ex: Thread) Não há interesse em teste lógico. Superclasse já possui equals(). Classe privada. Quando USAR: Quando precisamos de igualdade lógica. Onde será usado? Comparação lógica de objetos. Chave de conjuntos.
equals() Contrato Reflexivo x.equals(x) returntrue; Simétrico x.equals(y) returntrue; y.equals(x) returntrue; Transitivo x.equals(y) returntrue; y.equals(z) returntrue; x.equals(z) returntrue; Consistente Várias chamadas retornam o mesmo valor (true ou false) x.equals(null) returnfalse; Atributos derivados podem ser ignorados Atenção Primitivos: usar == Float: usar Float.compare(f1, f2); Double: usar Double.compare(d1, d2);
EqualsBuilder org.apache.commons.lang.builder.EqualsBuilder; Se necessário Two Objects that compare as equals must generate the same hash code, but two Objects with the same hash code do not have to be equal.
hashCode() Sempre sobreponha hashCode ao sobrepor equals (contrato Object.hashCode). Objetos iguais devem ter o mesmo código hash. Usado em coleções baseadas em hash. Sempre que chamando, o código hash deve retornar o mesmo inteiro. Objetos diferentes podem ter o mesmo código hash.
hashCode() Atenção Float: usar Float.floatToInBits(f); Double: usar Double.doubleToInBits(d);
org.apache.commons.lang.builder.HashCodeBuilder; you pick a hard-coded, randomly chosen, non-zero, odd number ideally different for each class  Se necessário HashCodeBuilder
toString() Contrato:  “representação concisa, mas informativa, que seja fácil para uma pessoa ler” “Pojo@f9f33525” Boa implementação torna a classe mais agradável de usar.  Fácil??? Texto: Teste toString Booleano: true Data: Fri Sep 10 01:44:47 BRT 2010
ToStringBuilder org.apache.commons.lang.builder.ToStringBuilder; org.apache.commons.lang.builder.ToStringStyle; PojoBuilder@10b30a7[Texto=TESTE1,Lista=[1, 2, 3],Boolean=true,Data=09/09/2010] PojoBuilder@e09713[Texto=TESTE1,Lista=[1, 2, 3],Boolean=true,Data=09/09/2010]
ToStringBuilder org.apache.commons.lang.builder.ToStringBuilder; org.apache.commons.lang.builder.ToStringStyle;
compareTo() Indica a ordem natural da classe. Permite comparações em ordem. Contrato: Mesmo contrato usado no equals. (x.compareTo(y) == 0) == (x.equals(y)) Quando violado o contrato, podem invalidar outras classes, como as coleções ordenadas TreeSet e TreeMap e classes utilitárias Collection e Arrays. Exemplo: Collections.sort(lista);
CompareToBuilder org.apache.commons.lang.builder.CompareToBuilder;
Comparator Necessitamos de ordenação diferente da ordenação padrão da classe. Necessitamos de mais de um tipo de ordenação para a classe.
TipoOrdenação Comparator AdminAlunosComparator comparator = new AdminAlunosComparator(column, ascending); Collections.sort(lista, comparator);
Fim Obrigado!

Contenu connexe

Tendances

Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcionalfabiocerqueira
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Polimorfismo java
Polimorfismo javaPolimorfismo java
Polimorfismo javaFAFICA
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Introdução a Java IO
Introdução a Java IOIntrodução a Java IO
Introdução a Java IOrdgse
 
Introdução à linguagem Python
Introdução à linguagem PythonIntrodução à linguagem Python
Introdução à linguagem PythonAlex Tercete
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-paneRafael Pinheiro
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 

Tendances (20)

Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
04 api javadoc
04   api javadoc04   api javadoc
04 api javadoc
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Ficheiros em JAVA
Ficheiros em JAVAFicheiros em JAVA
Ficheiros em JAVA
 
Polimorfismo java
Polimorfismo javaPolimorfismo java
Polimorfismo java
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Semanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantesSemanaupecaruaru2013 c++para iniciantes
Semanaupecaruaru2013 c++para iniciantes
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Introdução a Java IO
Introdução a Java IOIntrodução a Java IO
Introdução a Java IO
 
Java Básico :: Stream
Java Básico :: StreamJava Básico :: Stream
Java Básico :: Stream
 
Introdução à linguagem Python
Introdução à linguagem PythonIntrodução à linguagem Python
Introdução à linguagem Python
 
Aula2
Aula2Aula2
Aula2
 
Javascript OO
Javascript OOJavascript OO
Javascript OO
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
 
ptt
pttptt
ptt
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 

Similaire à Equals, Hashcode, ToString, Comparable e Comparator

Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
A importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPA importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPklaussilveira
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Crescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeCrescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeFelipe Nascimento
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Thiago Dieb
 
Facebook's Hack programming language / Linguagem de programação Hack do Facebook
Facebook's Hack programming language / Linguagem de programação Hack do FacebookFacebook's Hack programming language / Linguagem de programação Hack do Facebook
Facebook's Hack programming language / Linguagem de programação Hack do FacebookRafael Alves
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidIury Teixeira
 

Similaire à Equals, Hashcode, ToString, Comparable e Comparator (20)

Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
A importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHPA importância dos padrões na comunidade PHP
A importância dos padrões na comunidade PHP
 
Resumão java
Resumão javaResumão java
Resumão java
 
Working with legacy code 3
Working with legacy code 3Working with legacy code 3
Working with legacy code 3
 
Java7
Java7Java7
Java7
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Crescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidadeCrescendo profissionalmente com o apoio comunidade
Crescendo profissionalmente com o apoio comunidade
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
Java 07
Java 07Java 07
Java 07
 
Facebook's Hack programming language / Linguagem de programação Hack do Facebook
Facebook's Hack programming language / Linguagem de programação Hack do FacebookFacebook's Hack programming language / Linguagem de programação Hack do Facebook
Facebook's Hack programming language / Linguagem de programação Hack do Facebook
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Condingdojo
CondingdojoCondingdojo
Condingdojo
 

Plus de Rodrigo Cascarrolho

Carreira em Tecnologia da Informação
Carreira em Tecnologia da InformaçãoCarreira em Tecnologia da Informação
Carreira em Tecnologia da InformaçãoRodrigo Cascarrolho
 
Arquitetura Microsserviços - Semana facet 2015
Arquitetura Microsserviços - Semana facet 2015Arquitetura Microsserviços - Semana facet 2015
Arquitetura Microsserviços - Semana facet 2015Rodrigo Cascarrolho
 
PhoneGap - Criando aplicações Android e iOS com HTML5
PhoneGap - Criando aplicações Android e iOS com HTML5PhoneGap - Criando aplicações Android e iOS com HTML5
PhoneGap - Criando aplicações Android e iOS com HTML5Rodrigo Cascarrolho
 
Html5- Novidades, adoção e mobile.
Html5- Novidades, adoção e mobile.Html5- Novidades, adoção e mobile.
Html5- Novidades, adoção e mobile.Rodrigo Cascarrolho
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesRodrigo Cascarrolho
 

Plus de Rodrigo Cascarrolho (9)

TI Colégio Lumière 2018
TI Colégio Lumière 2018TI Colégio Lumière 2018
TI Colégio Lumière 2018
 
Carreira em Tecnologia da Informação
Carreira em Tecnologia da InformaçãoCarreira em Tecnologia da Informação
Carreira em Tecnologia da Informação
 
Arquitetura Microsserviços - Semana facet 2015
Arquitetura Microsserviços - Semana facet 2015Arquitetura Microsserviços - Semana facet 2015
Arquitetura Microsserviços - Semana facet 2015
 
Scrum em 15 minutos
Scrum em 15 minutosScrum em 15 minutos
Scrum em 15 minutos
 
PhoneGap - Criando aplicações Android e iOS com HTML5
PhoneGap - Criando aplicações Android e iOS com HTML5PhoneGap - Criando aplicações Android e iOS com HTML5
PhoneGap - Criando aplicações Android e iOS com HTML5
 
Html5- Novidades, adoção e mobile.
Html5- Novidades, adoção e mobile.Html5- Novidades, adoção e mobile.
Html5- Novidades, adoção e mobile.
 
Apresentação Google Android
Apresentação Google AndroidApresentação Google Android
Apresentação Google Android
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 

Equals, Hashcode, ToString, Comparable e Comparator