name: inverse layout: true class: center, middle, inverse --- # JAVA - Cours 7 ## Les incontournables des objets ## Inès de Courchelle ![image](../img/CY-tech.png) --- layout: false # Today ## Objectifs - Afficher des objets - Comparer des objets - Copier des objets
--- # Afficher un objet ## La méthode toString() - Elle est définie dans la classe Object, du coup, toutes les classes JAVA en hérite (même celles que je créé) - Elle est automatiquement appelée lorsque l'on essaye d'afficher un objet - Elle peut être générée avec un IDE ## Exemple
--- # Afficher un objet ## MAIS COMMENT ?? ##### Code ```java Personnage p1 = new Personnage(01,"Eleven","Jane"); Personnage p2 = new Personnage(02,"Henderson","Dustin"); System.out.println(p1); System.out.println(p2); ``` ##### Résultat ```bash Je suis Jane Eleven Je suis Dustin Henderson ``` --- # Afficher un objet ## Comment ? il faut définir la class toString() ## où ? dans ma classe concerné
--- # Afficher un objet ## Illustration .pull-left-small[
] .pull-right-big[ ```java public class Joueur { .... public String toString() { return "Je suis "+ prenom + " "+ nom; } ... } ``` ]
```java public class Main { public static void main(String[] args){ Personnage p1 = new Personnage(01,"Eleven","Jane"); Personnage p2 = new Personnage(02,"Henderson","Dustin"); System.out.println(p1); System.out.println(p2); } } ``` --- # Comparer ## Pour les types primitifs easy peasy c'est le == ```java int a=4; int b=4; if (a==b){ System.out.println("a et b sont égaux"); } ``` ## Mais pour un objet ?
--- # Comparer des objets ## Pour les objets == compare les références ## c-à-d ```java Perso p1 = new Perso(01,"Lizzy"); Perso p2 = new Perso(01,"Lizzy"); Perso p3 = p1; ``` .pull-left[ ```java if (p1==p3){ System.out.println("Ils sont égaux") } ``` .arrow[] VRAI ] .pull-right[ ```java if (p1==p2){ System.out.println("Ils sont égaux") } ``` .arrow[] FAUX ] --- # Comparer des objets ## La méthode equals Par défaut tout les objets ont une méthode equals
--- # Comparer des objets ## La méthode equals ```java public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Perso other = (Perso) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (nom == null) { if (other.nom != null) return false; } else if (!nom.equals(other.nom)) return false; return true; } ``` --- # La var ## Exemple
--- # Comparer des objets ## Exemple
## le code ```java Joueur j1 = new Joueur(01,"Djokovic","Novak",8770); Joueur j2 = new Joueur(04,"Nadal","Rafael",7525); Joueur j3 = j2; System.out.println(j3+" "+j2); j3.setPrenom("Carlos"); System.out.println(j3+" "+j2); ``` --- # Copier un objet ## Résultat .pull-left[ ```java Joueur j1 = new Joueur(01,"Djokovic","Novak",8770); Joueur j2 = new Joueur(04,"Nadal","Rafael",7525); Joueur j3 = j2; System.out.println(j3+" "+j2); j3.setPrenom("Carlos"); System.out.println(j3+" "+j2); ``` ] .pull-right[ ```shell Joueur [id=4, nom=Nadal, prenom=Rafael, classement=7525] Joueur [id=4, nom=Nadal, prenom=Rafael, classement=7525] Joueur [id=4, nom=Nadal, prenom=Carlos, classement=7525] Joueur [id=4, nom=Nadal, prenom=Carlos, classement=7525] ``` ]
## Ça marche pô - Le joueur 3 et le joueur 2 auront le même prénom carlos - Dès que je fais une modification sur l'un ça le fait sur l'autre --- # Copier un objet ## The question ? Comment dupliquer un objet pour avoir deux versions de cet objet susceptibles d'évoluer différemment ?
--- # Copier un objet ## La méthode clone ```java @Override public Object clone() throws CloneNotSupportedException { Object resultat = null; try { resultat = super.clone(); } catch (CloneNotSupportedException cnse) { cnse.printStackTrace(); } return resultat; } ``` --- # Copier un objet ## Résultat .pull-left[ ```java Joueur j1 = new Joueur(01,"Djokovic","Novak",8770); Joueur j2 = new Joueur(04,"Nadal","Rafael",7525); Joueur j3 = j2; System.out.println(j3+" "+j2); j3.setPrenom("Carlos"); System.out.println(j3+" "+j2); ``` ] .pull-right[ ```shell Joueur [id=4, nom=Nadal, prenom=Rafael, classement=7525] Joueur [id=4, nom=Nadal, prenom=Rafael, classement=7525] Joueur [id=4, nom=Nadal, prenom=Carlos, classement=7525] Joueur [id=4, nom=Nadal, prenom=Rafael, classement=7525] ``` ]
--- # Attention ## Ne pas oublier dans la Class Joueur
## Sinon ... ça marche pô
--- # Conclusion ## Une classe est composée : - d'attribut(s) - de constructeur(s) - de la méthode toString pour convertir l'objet en chaîne de caractères - de la méthode equals() pour comparer des objets - de la méthode clone() pour copier des objets