Les classes et méthodes de base

Avant que nous passions sous Eclipse





Exercice 1:

Vous avez en principe déjà un répertoire "tp1" dans votre arborescence. Créez le si ce n'est pas le cas.
Créez maintenant un répertoire "tp2"

1) téléchargez les fichiers sources suivants : coursPackage.zip
2) mettez-en un dans un sous répertoire de tp1 et l'autre dans un sous répertoire de tp2 en respectant le principe des packages.
3) débrouillez-vous pour compiler et exécuter ces deux programmes en ligne de commande depuis la racine de votre arborescence (cf. cours bases du langage Java : classpath/packages)

Une fois réussi, vous pouvez passer sous Eclipse !

Partie 1 : égalités entre objets





Exercice 2:

1) Lisez la description générale de la classe java.lang.String dans l'API :

API

java.lang.String


2) Soit le code suivant :

package testPackage;

public class TestString extends Object{
   
 
public static void main(String[] args) {
   
String ch1 = "to",ch2="to";

    System.out.println
("ch1 = \""+ch1+"\"");
    System.out.println
("ch2 = \""+ch2+"\"");
    System.out.println
();
   
    System.out.println
("ch2 == ch1 : "+(ch2==ch1));
    System.out.println
("ch2 == \"to\" : "+(ch2=="to"));
    System.out.println
();

    String ch3 =
"toto";
    System.out.println
("ch3 = \""+ch3+"\"");
    System.out.println
();
    System.out.println
("ch3 == \"toto\" : "+(ch3=="toto"));
    System.out.println
("ch3 == ch1+ch2 : "+(ch3==(ch1+ch2)));
    System.out.println
();
   
    String ch4 = ch1+ch2;
    System.out.println
("ch4 = \""+ch4+"\"");
    System.out.println
();
    System.out.println
("ch4 == \"toto\" : "+(ch4=="toto"));
    System.out.println
("ch4 == ch3 : "+(ch3==ch4));
    System.out.println
();

    String ch5 =
"to"+"to";
   
    System.out.println
("ch5 = \""+ch5+"\"");
    System.out.println
("ch5 == \"toto\" : "+(ch5=="toto"));
    System.out.println
("ch5 == ch4 : "+(ch5==ch4));
    System.out.println
();
   
   }
}

Ecrivez sur une feuille le résultat que le programme va donner

3) Récupérez le code et exécutez le. Le code ne pas doit pas être modifié : les noms de package doivent être respectés dans tous vos codes.

4) Comparez avec votre feuille. Essayez de comprendre le comprtement du programme (cf. question 1.1).





Exercice 3:

1) Rajoutez le code suivant à la fin du programme et exécutez le.



    System.out.println
("ch1 equals ch2 : "+ch1.equals(ch2));
    System.out.println
("ch2 equals \"to\" : "+ch2.equals("to"));
    System.out.println
("ch3 equals \"toto\" : "+ch3.equals("toto"));
    System.out.println
("ch3 equals ch1+ch2 : "+ch3.equals(ch1+ch2));
    System.out.println
("ch4 equals \"toto\" : "+ch4.equals("toto"));
    System.out.println
("ch4 equals ch3 : "+ch4.equals(ch3));
    System.out.println
("ch5 equals \"toto\" : "+ch5.equals("toto"));
    System.out.println
("ch5 equals ch4 : "+ch5.equals(ch4));

2) Maintenant, regardez le code de la méthode public boolean equals(Object obj) dans le code source de la classe java.lang.Object

3) Que pouvez-vous en déduire concernant l'une des méthodes de la classe java.lang.String étant donné les résultats observés dans l'exercice 2 ?

4) Vérifiez votre hypothèse dans le code source de la classe : java.lang.String

5) Que faut-il toujours faire lorsqu'on compare des chaînes de caractères ?

6) Que faut-il faire pour définir l'équalité logique sur les objets que l'on crée soit même ?

7) Etudiez encore une fois le code de la méthode public boolean equals(Object obj) de la classe java.lang.String

Partie 2 : clonage





Exercice 4:

1) Etudiez la documentation de la méthode public String toString() de la classe java.lang.Object dans l'API.

2) Pour un objet quelconque, que représente ce que retourne cette méthode ?

3) Etudiez la documentation de la méthode protected Object clone() de la classe java.lang.Object dans l'API.

4) Etudiez le code suivant :

package testPackage;

public class TestClone {
 
 
private int value;

 
public TestClone(int aValue) {
   
value = aValue;
 
}
 
 
@Override
 
public String toString() {
   
return super.toString()+" contient -> value = "+value;
 
}

 
public static void main(String[] args) {
   
TestClone t1 = new TestClone(2);
    System.out.println
("t1 = "+t1);
    System.out.println
();
    TestClone t2 =
new TestClone(4);
    System.out.println
("t2 = "+t2);
    System.out.println
();
   
   
try {
     
t2 = (TestClone) t1.clone();
   
} catch (CloneNotSupportedException e) {
     
e.printStackTrace();
   
}
   
System.out.println("t2 = "+t2);
 
}
}

4) Exécutez code précédent. Quel est le problème ?

API

java.lang.Object

java.lang.Cloneable


5) Faites en sorte que le code précédent s'exécute sans lever une exception.

6) Vérifiez que le clonage a bien réussi. (i.e. les instances doivent être différentes mais avec des attributs égaux en valeur)





Exercice 5:

1) Etudiez maintenant le code des classes suivantes :

2) Récupérez intégralement le code de ces classes et exécuter le.

3) Il y a un problème : trouvez lequel ! Si vous ne trouvez pas, c'est que vous n'avez pas bien lu la documentation référencée dans la question 3.3 (Retournez-y). Indice : deux "vrais" clones ne devraient rien partager !





Exercice 6:

1) Modifier le code pour obtenir un clonage correct des objets testPackage.Bidule.

2) Vérifiez le résultat (références et valeurs).

3) Faites en sorte qu'on puisse tester l'égalité logique entre deux objets testPackage.Bidule (cf. 2.5 et 2.6 : par exemple un clone et son original doivent être égaux ).

Partie 3 : la structure liste





Exercice 7:

1) Etudiez la javadoc de la classe java.util.ArrayList dans l'API.

2) Créer une classe Salarie, dans un package mesObjets, permettant de définir des objets modélisant une personne et son salaire (on aura par exemple des attributs comme nom, prénom, salaire, etc.). Écrivez un programme de nom TestList dans le package testPackage. Celui-ci doit créer une liste de salariés (remplie avec quelques instances) et l'afficher.

API

java.util.ArrayList


Exemple :
    ArrayList<Salarie> liste = new ArrayList<Salarie>();
    liste.add(new Salarie("Pierre","Gold n Gold",60000));
    liste.add(new Salarie("Jacques""Clean n Dry",1000));
    liste.add(new Salarie("Jules""Clean n Dry",1000));
    liste.add(new Salarie("Albert""No where"2000));
    liste.add(new Salarie("Zizou""RMCF"60000));
    liste.add(new Salarie("Charles","Dad n Son"5000));

3) En utilisant l'API, trouvez dans quelle classe la méthode qui réalise le formatage en String d'une liste est effectivement codée java.util.ArrayList.





Exercice 8:

1) Modifiez le programme pour qu'il trie la liste des salariés du plus grand au plus petit salaire avant de l'afficher.

API

java.util.Collections

java.lang.Comparable


Exemple de résultat :

originale : [Pierre 60000, Jacques 1000, Jules 1000, Albert 2000, Zizou 60000, Charles 5000]

triée sur les salaires : [Zizou 60000, Pierre 60000, Charles 5000, Albert 2000, Jules 1000, Jacques 1000]

2) Modifiez le programme pour (1) afficher la liste triée par salaires, puis (2) afficher ensuite la liste triée par ordre alaphabétique sur les noms.

API

java.util.Collections

java.util.Comparator


Exemple de résultat :

originale : [Pierre 60000, Jacques 1000, Jules 1000, Albert 2000, Zizou 60000, Charles 5000]

triée sur les salaires : [Zizou 60000, Pierre 60000, Charles 5000, Albert 2000, Jules 1000, Jacques 1000]

triée sur les noms : [Albert 2000, Charles 5000, Jacques 1000, Jules 1000, Pierre 60000, Zizou 60000]



Exercice 9:

Réalisez maintenant un tri qui trie la liste des salariés du plus grand au plus petit salaire avec les noms triés par ordre alphabétique pour chaque salaire.

Exemple de résultat :

originale : [Pierre 60000, Jacques 1000, Jules 1000, Albert 2000, Zizou 60000, Charles 5000]

triée sur les salaires puis les noms : [Pierre 60000, Zizou 60000, Charles 5000, Albert 2000, Jacques 1000, Jules 1000]

Testez avec cette liste (noms et salaires), elle contient des cas particuliers.