"La valeur de 99*35 est " + (99*35)
Mission
- Afficher en texte des informations sur les robots et compter tous les robots.
- Vocabulaire à connaître à l'issue du TD : toString, attribut statique
toString
- Modifier la classe Robot pour afficher dans la console un message à chaque collision (en utilisant
System.out.println
). - Tester.
- Complétez le message pour afficher les deux objets entrés en collision.
Pour cela, utiliser une facilité de Java qui permet de concaténer avec le symbole + :"du texte " + un_objet
- Tester pour voir comment sont affichés les objets, expliquez ce que vous voyez.
- Lorsque l'on fait + sur un objet, Java appelle automatiquement la méthode toString pour le convertir en chaîne de caractères.
Redéfinissez toString dans la classe Robot pour afficherROBOT
et ses coordonnées, au lieu d'un hashcode. Le prototype de toString est le suivant :public
String toString() - Ajoutez un attribut nom à la classe Robot, et modifiez les constructeurs pour que chaque robot ait un nom.Le symbole + permet de concaténer des chaînes de caractères, avec conversion à la volée, par exemple :
- Faites en sorte que toString affiche aussi le nom du robot et son numéro de série. Le message doit maintenant varier significativement selon le type de robot (killer, cyborg, etc.) en affichant par exemple
Joe, je suis un killer
.
Questions de compréhension
- Avant que vous ne redéfinissiez la méthode toString, le programme affichait le nom de la classe et le hashcode de l'objet. Comment est-ce possible puisque toString n'était pas définie dans la classe Robot ?
- Vous avez redéfini toString dans toutes les sous-classes de Robot. Que se passerait-t-il si on ne redéfinissait toString que dans certaines sous-classes (par exemple que dans Cyborg) ?
- Quelle est le contenu de la chaîne de caractères "Bla " + (20+30) + 10 ?
Attributs statiques
- L'objectif est de limiter le massacre. Pour cela, nous allons fixer un nombre maximal d'explosions à ne jamais dépasser. Dans la classe Robot, définissez une constante maxExplosions. En Java, on le fait de la manière suivante (interdit de rigoler) :
public static final
int maxExplosions = 3 ; - Il faut maintenant pouvoir compter le nombre total de robots ayant explosé. On utilise pour cela un attribut statique, c'est-à-dire un attribut partagé par tous les objets de la classe.
- Pour préciser qu'un attribut est statique, il suffit d'écrire
static
devant. - Terminez le travail demandé : plus aucun robot ne doit exploser lorsqu'on a dépassé le seuil indiqué.
- En utilisant un autre attribut statique, comptez le nombre total de robots créés (en comptant les killer, cyborgs, etc.)
- Utilisez le compteur de robots pour attribuer automatiquement un numéro de série à chaque robot. Modifiez les constructeurs en conséquence.
Questions de compréhension
- Que se passerait-t-il précisément si on oubliait d'utiliser
static
dans les questions ci-dessus ? - Que se passerait-t-il précisément si tous les attributs étaient
static
? - Une constante est toujours
static
. Est-ce indispensable ? - Le mot-clef
final
est-il indispensable pour définir une constante ? - Question qui tue : est-il possible de définir une méthode dans la classe Robot qui renvoie le nombre de robots déjà créés, de l'invoquer, et d'obtenir zéro comme résultat ?
Il se trouve que c'est effectivement possible. Faites-le.