Table des matières

TD 4 : Exploration Martienne

Classes abstraites

1) Dans la classe Vehicule, les méthodes distance et getPathTo retournent des valeurs fictives. En réalité, cela ne fait pas de sens d’instancier un objet de la classe Vehicule. Nous allons empêcher cela en définissant la classe Vehicule comme abstraite. Modifiez le code en conséquence.

2) De même, faites en sorte que la classe Sprite soit abstraite.

Organisation du code

Nous commençons à avoir beaucoup de classes et cela devient difficile de s’y retrouver.

1) Créez un package view et déplacer les classes ImageRessource, View et toutes les classes Sprite dans le package view.

2) Créez un package model et déplacer les classes en relation avec les véhicules dedans.

Objets immuables

Nous avons mis en évidence dans le deuxième TD des problèmes d’encapsulation avec la classe Position. En réalité, nous n’avons pas besoin de modifier une position existante. En Java, un objet immuable est une instance de classe dont les membres ne peuvent être modifiés après création.

1) Modifier la classe Position pour que les attributs de classe soient final. Ajouter une méthode equals.

2) Java propose maintenant une syntaxe spécifique pour des classes de ce type. Utiliser la syntaxe des Record pour définir la classe Position.

Surface martienne

En réalité, la surface martienne n’est pas aussi lisse que ça.

1) Ajouter une classe SpriteDust () pour afficher des poussières martiennes à quelques endroits sur la grille.

2) Ajouter une classe SpriteRock () pour afficher des rochers martiens à quelques endroits sur la grille.

Vous pouvez ajouter une super classe Sprite dont vont hériter les classes SpriteVehicule et SpriteDecor. La classe Sprite ne prendrait qu’une image dans son constructeur. La classe SpriteVehicule prendrait une image et un véhicule comme paramètre dans son constructeur. La classe SpriteDecor prendrait une image et une position comme paramètre dans son constructeur. Les classes SpriteDust et SpriteRock sont alors des sous-classes de cette classe SpriteDecor.