Des triangles plutôt classes

D'après Wikipedia En géométrie euclidienne, un triangle est une figure plane, formée par trois points sommets, par les trois segments qui les relient, appelés côtés, délimitant un domaine du plan appelé intérieur.

Image d'un triangle dont les sommets sont p1, p2, et p3 et dont les segments sont s1, s2, 3.

On pourrait traduire cette définition par plusieurs modélisations orientées objets en Java. Par exemple en définissant la classe Triangle par 3 points. D'après la figure ci-dessus, un triangle serait défini par p1, p2 et p3 en vert.

On décide cependant ici de modéliser un triangle non pas par ses sommets, mais par ses côtés. Dans la figure ci-dessus, il s'agit de définir un triangle par les segments s1, s2 et s3 en bleu tels que

Ainsi, les 3 attributs de la classe Triangle sont les 3 côtés du triangle.

En modélisant le problème à l'aide d'un diagramme de classes UML, on obtient le résultat ci-dessous que vous devrez implémenter en totalité.

Diagramme UML des classes Triangle, Segment et Point

Point

La classe Point représente un point du plan euclidien.

Diagramme UML d'une classe Point

Ce diagramme exprime que la classe Point possède

  1. deux attributs (d'instance) privés x et y de type double qui représentent les coordonnées d'un point,
  2. un constructeur pour créer un point à partir de ses coordonnées,
  3. des getters et des setters (naturels) pour ses coordonnées,
  4. une méthode toString() sans paramètre qui renvoie une chaîne de caractères dont je précise ici qu'elle aura la forme "(x, y)" C'est-à-dire que par exemple pour un point de coordonnées 3.5 en x et 8.4 en y, on obtient la chaîne de caractères suivante : "(3.5, 8.4)"

À vous d'écrire la classe Point de sorte qu'elle respecte ces consignes.

Segment

La classe Segment représente un segment de droite dont les 2 extrémités sont les points p1 et p2.

Diagramme UML d'une classe Segment

Ce diagramme exprime que la classe Segment possède

  1. deux attributs (d'instance) privés p1 et p2 de type Point qui représentent les extrémités d'un segment,
  2. un constructeur pour créer un segment à partir de ses extrémités,
  3. des getters et des setters (naturels) pour ses extrémités,
  4. une méthode length() qui, comme on peut s'en douter, retourne sa longueur,
  5. une méthode toString() sans paramètre qui renvoie une chaîne de caractères sous la forme "[(x1, y1) ; (x2, y2)] avec (x1, y1) les coordonnées du point p1 et (x2, y2) les coordonnées du point (x2, y2) On pourra par exemple avoir l'affichage d'un segment comme suit : "[(0.0, 0.0) ; (3.5, 8.4)]"

À vous d'écrire la classe Segment de sorte qu'elle respecte ces consignes.

Triangle

Un triangle est construit par ses sommets (3 points) à partir desquels les trois segments s1, s2, s3 (qui sont ses côtés) sont créés.

Diagramme UML d'une classe Triangle

Ce diagramme exprime que la classe Triangle possède

  1. trois attributs (d'instance) privés s1, s2 et s3 de type Segment qui représentent les 3 segments d'un triangle,
  2. un constructeur pour créer un triangle à partir de ses 3 sommets (attention, cette fois ce n'est pas naturel, car les attributs sont les segments. Il faut les construire à partir des sommets. La première image de cette description peut être utile.),
  3. des getters et des setters pour ses sommets (attention, cette fois ce n'est pas naturel, car les attributs sont les segments),
  4. une méthode perimeter() qui retourne son périmètre,
  5. une méthode area() qui retourne sa surface (chercher la formule de Héron),
  6. une méthode barycenter qui retourne son barycentre,
  7. une méthode toString()sans paramètre qui renvoie une chaîne de caractères sous la forme "<[(0.0, 0.0) ; (3.5, 8.4)], [(3.5, 8.4) ; (8.5, 2.4)], [(8.5, 2.4) ; (0.0, 0.0)]>"
    Attention : le triangle est délimité par, à gauche, < et, à droite,>. Les segments sont séparés par des virgules.

La responsabilité de cette classe est de garantir l'intégrité de ses données. C'est-à-dire que les segments d'un triangle doivent rester cohérents quand on change les coordonnées d'un sommet.

À vous d'écrire la classe Triangle de sorte qu'elle respecte ces consignes.

Auteurs:

D'après une idée et scénarisation de Céline Fouard (UGA)
Lab instrumenté par Yvan Maillot (UHA)