IN3S02 – TD4   2011/2012
Sujet

Durée : 2 h

1         OBJECTIFS

·         Maîtriser l’héritage et la rédéfinition

·         Écrire correctement du code java (compilable) sur papier (sans l’aide du compilateur)

2         Classe Point

  1. Deux attributs entiers aX et aY
  2. Un constructeur « naturel » (à combien de paramètres ?)
  3. Un constructeur sans paramètre qui crée le point à l’origine des axes sans duplication de code
  4. Une procédure déplace à deux paramètres entiers (Dx,Dy) qui effectue une translation du point
  5. Une fonction toString qui retourne le point sous la forme "(x,y)" .
  6. Une procédure affiche qui affiche le point sous la même forme

3         Classe PointColoré

  1. Un point coloré est un point
  2. Un attribut aCouleur codé sur un seul caractère mais stocké comme une String
  3. Un constructeur « naturel » (à combien de paramètres ?)
  4. Un constructeur à 2 paramètres qui force la couleur à "N" (comme Noir) sans duplication de code
  5. Un constructeur sans paramètres qui crée un point Noir à l’origine des axes sans duplication de code
  6. Une fonction toString qui retourne le point sous la forme "couleur:(x,y)" sans duplication de code

4         Classe Utilisation (qui n’a pas vocation à être instanciée)

  1. Une procédure test pour contenir les actions suivantes :
  2. Déclarer/créer un Point, l’afficher.
  3. Déclarer/créer un PointColoré, l’afficher. (faut-il une procédure affiche() dans PointColoré ?)
  4. Déplacer le PointColoré, l’afficher.

5         {Égalité de 2 points

·   It is reflexive: for any non-null reference value x, x.equals(x) should return true. (cas n°1)

·   Zone de Texte: Spécifications
Sun
It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true. (cas n°3)

·   It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.

·   It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.

·   For any non-null reference value x, x.equals(null) should return false. (cas n°2)                    




1.       Redéfinir la fonction equals dans Point (Attention à la signature !) :

-  Cas général : sauter 3 lignes, puis écrire les comparaisons nécessaires en supposant que le paramètre est un Point, puis

-  Cas n°3 : (juste avant) tester l’hypothèse contraire (c-à-d si ce n’est pas un Point), puis

-  Cas n°2 : (juste avant) tester le cas qui peut empêcher de tester le cas n°3, puis

-  Cas n°1 : (juste avant) tester le cas trivial qui rend inutile le reste de la fonction (réflexivité) !

2.       Redéfinir la fonction equals dans PointColoré

(en évitant la duplication de code)

6         Comptage des points

  1. Définir un nouvel attribut aNbPoints dans Point (doit-il être présent dans chaque point ?)
  2. Définir une fonction getNbPoints pour y accéder (et s’il n’y a encore aucun point créé ?)
  3. Modifier un/certains/tous_les constructeur(s) pour incrémenter aNbPoints
  4. Redéfinir la méthode nécessaire pour décrémenter aNbPoints
  5. Afficher un message différent selon qu’un Point ou un PointColoré est supprimé (sans faire de test)
  6. Modifier Utilisation pour montrer  l’évolution de aNbPoints à la hausse et à la baisse