Teaching - 2i013

Enseignants


2i013 - Groupe 5 : Course de voiture


Différences entre la notion de TERRAIN et la notion de CIRCUIT:

J'ai utilisé le terme TERRAIN pour désigné simplement les différentes possibilité de terrain (Route, herbe, point de départ...). Cette information concerne donc une seule case. Il s'agit seulement d'un type (énumération), il n'y a pas de méthode incluse dans l'énumération. Pour gérer le TERRAIN (savoir si on a le droit de rouler dessus...), on passera par les méthodes static de TOOLS. On ne peut pas faire new Terrain. Il s'agit seulement de valeur: vous ne faites pas int i = new 2, vous faites int i = 2, c'est pareil pour le terrain.

J'ai utilisé la notion de CIRCUIT pour l'ensemble des cases qui composent "l'univers". Il s'agit donc effectivement d'une matrice de TERRAIN. Circuit est vraiment construit selon les principes de la programmation objet: il inclus des données (la matrice) et des méthodes (accès aux différentes informations). Attention, il y a d'autres informations dans le circuit: le point de départ, le sens de départ et le sens d'arrivée. Afin d'avoir une architecture évolutive, j'ai séparé la notion de CIRCUIT en un concept abstrait (l'interface Circuit) et une implémentation concrète (la classe CircuitImpl). On doit faire quelque part : new CircuitImpl() On ne peut pas faire new Circuit() (c'est abstrait, on ne peut pas implémenter) On peut faire Circuit c = new CircuitImpl()


Que mettre et ne pas mettre dans la FACTORY?

J'ai ensuite introduit la notion de FACTORY. Il y a plusieurs buts derrière la factory, pour l'instant, on va se concentrer sur la réduction de la taille des classes. Si on doit inclure la lecture de fichier dans CircuitImpl, la classe devient "grosse". On fait donc la lecture de fichier dans la classe CircuitFactory, à l'intérieur de la méthode build(). Seule l'opération de lecture de fichier est effectuée dans la factory.


Où se déroule la conversion du terrain en IMAGE?

Pour construire l'image associée au circuit, deux solutions élégantes sont possibles: 1) dans TOOLS, vous construisez deux méthodes: la première convertit un Terrain (une case) en couleur, la seconde prend un circuit en argument, parcourt toutes les cases et remplit une image avec les bonnes couleurs avant de retourner cette image. 2) Vous construisez une classe spécifique ConversionCircuitImage. une méthode convertit un Terrain (une case) en couleur. Le constructeur recoit le terrain et le conserve en attribut. une méthode build() construit et renvoie l'image associée au terrain.


VoitureException QUESAKO ?

pour les exceptions, c'est comme pour les interfaces: on va les utiliser un peu, on va voir leur fonctionnement en tant qu'outil de base mais on ne s'interroge pas sur leur fonctionnement profond (on verra ça en L3). Créer la classe se fait donc entièrement "à la souris" sous eclipse avec le résultat suivant:

 public class VoitureException extends Exception {
	public VoitureException(String string) {
		super(string);
	}
 }

Classe Commande

Pour comprendre la classe commande, il faut comprendre la manière dont les composants de notre simulation dialoguent. La classe voiture encapsule la position et la direction de la voiture: il est hors de question de mettre à jour ces champs depuis l'extérieur de la classe. Le modèle physique ne servirait à rien et ce serait une grave "faille de sécurité".

La seule manière d'agir sur la voiture est de lui passer une commande et c'est la voiture qui saura comment l'interpréter. La commande est donc la base du dialogue: elle passe la commande d'accélérateur et la commande sur le volant.

Concrètement, cette classe à : deux attributs compris entre -1 et 1, un constructeur et deux accesseurs ET C'EST TOUT.

NB: lors du dialogue entre votre programme et le simulateur de référence, c'est encore sur la commande que nous allons nous appuyer: une liste sera fournie au simulateur qui rendra un score.