Programmation pour le TAL
Cours Java

Cours UML

Correction UML
Autonomie : objets géométriques

Exercice sur Java à rendre. L'exercice porte sur l'implémentation du système de dessin vectoriel dont nous avons commencé à donner une modélisation UML. Le projet final de l'U.E. porte sur l'extraction de triplets syntaxiques, maus nous utiliserons les objets géométriques pour illustrer les nouvelles notions abordées dans le cours sur Java (en commençant ci-dessous notamment par les constructeurs et la surdéfinition/surcharge de méthodes).
  1. Téléchargez et importez le paquet sajous.litl.geom : geom.tar.gz
  2. Exécutez la méthode main() de la classe TestGeomObjects. N'hésitez pas à modifier des instructions, à en ajouter, à en commenter d'autres pour observer les différences dans l'exécution. L'objectif n'est bien-sûr pas de constater "que ça marche", mais de comprendre ce qui se passe et pourquoi. Un bon réflexe pour s'assurer de la compréhension des mécanismes mis en œuvre est d'ajouter des instructions d'affichage dans les différentes méthodes, par exemple :
    System.out.println ("Passage dans le constructeur 3 de la classe X")
  3. Exécutez le programme sans toucher au code, puis commentez la méthode toString() dans la classe Segment et réexécutez. Que se passe-t-il ? (décommentez ensuite la méthode toString() de Segment)
  4. On veut implémenter le déplacement (la translation) des objets. Un déplacement se caractérise par la donnée d'un vecteur (dx, dy), pour "déplacement sur l'axe des abs./ord." ou "delta x/y" (il s'agit de décalages, positifs ou négatifs, sur les deux axes du repère). Une méthode translate (int dx, int dy) est déjà donnée pour la classe PointMobile. Quand on invoque cette méthode sur une instance de la classe, le point est déplacé. Implémentez une méthode équivalente (même signature) dans la classe Segment et testez-là dans le main() de la classe TestGeomObjects.
  5. Donnez une implémentation de la classe Circle (getters/setters, constructeurs, méthodes toString () et translate () et testez-là dans la classe TestGeomObjects.

Astuces Eclipse

Mot-clé this
Dans les setters générés automatiquement, notez l'utilisation de this. Vous pouvez également observer cette utilisation, par exemple, dans le constructeur de la classe PointFixe. Une implémentation pourrait être, par exemple :
	public FixedPoint (int ord, int abs)
	{
		x = ord;
		y = abs;
	} // FixedPoint ()
	
Ici, le nom des arguments (ord, abs) est différent de celui des membres (x, y) : pas de problème. Mais si on nomme les arguments x et y, ils masquent la visibilité des membres (de même nom) de l'objet. Si on écrit "x = x", les deux occurrences de x réfère à l'argument et l'affectation a un effet nul. La solution mise en œuvre dans Java est d'accéder aux membres d'un objet, lorsqu'ils sont masqués, par this.nomMembre. Dans l'implémentation ci-dessous
	public FixedPoint (int x, int y)
	{
		this.x = x;
		this.y = y;
	} // FixedPoint ()
	
x et y désignent les valeurs des arguments passés au constructeur, et this.x/this.y désignent les membres de l'objet. On affecte donc les valeurs des arguments aux membres de l'objet.
Lire à ce sujet la section 9.5 du chapitre 6 de "Programmer en Java".
this () est aussi le moyen d'invoquer un constructeur depuis un autre constructeur : dans la classe FixedPoint, le constructeur FixedPoint (int x, int y, String objName) invoque le constructeur de la même classe FixedPoint (int x, int y, String objName).

Autonomie : projet sur l'extraction de triplets syntaxiques


Retour page U.E. ]

Mention légale ]