Exercice POO de base concevoir un programme de géométrie

But:
Concevoir entièrement un petit programme orienté-objet
Thème:
POO de base
-

Ecrivez un programme Geometrie qui permet à l'utilisateur d'entrer les coordonnées (x, y) des sommets d'un triangle. Le programme affiche ensuite le périmètre du triangle ainsi qu'un message indiquant s'il s'agit d'un triangle isocèle. Votre programme doit être orienté objets. Indications:

  • Un triangle est isocèle si au moins deux côtés ont la même longueur.
  • La formule pour calculer la distance entre deux points (x1, y1) et (x2, y2) est: racine carrée de (x1 - x2)2 + (y1 - y2)2.
  • Java met à disposition la méthode Math.sqrt() pour calculer la racine carrée. Cette méthode prend un nombre non-négatif en paramètre. Exemple:

    double a = Math.sqrt(9.0); // la valeur 3.0 sera affectée à a

Exemple d'affichage du programme pour un triangle isocèle:

Construction d'un nouveau point Veuillez entrer x : 0 Veuillez entrer y : 0Construction d'un nouveau point Veuillez entrer x : 2.5 Veuillez entrer y : 2.5Construction d'un nouveau point Veuillez entrer x : 0 Veuillez entrer y : 5Périmètre : 12.071067811865476 Le triangle est isocèle

Dans cet exercice, vous élaborerez un programme orienté objets de manière indépendante pour la première fois. Si vous n'avez pas le temps de faire cet exercice, n'oubliez pas d'en étudier le corrigé.

Voici quelques indications en vrac qui peuvent vous être utiles. Ne les lisez pas si vous voulez être complètement indépendant ...

  • Réfléchissez aux objets que vous aimeriez utiliser dans le programme. Vous pourriez par exemple représenter le triangle par une classe Triangle et ses points par une classe Point. Une troisième classe Geometrie pourrait héberger la méthode main.
  • Réfléchissez aux variables et méthodes d'instance qui seraient utiles pour les classes Triangle et Point.
  • Un objet de type Point a typiquement les coordonnées x et y. Un objet de type Triangle a trois sommets qui peuvent être représentés par des objets de type Point.
  • Les coordonnées des points peuvent par exemple être entrées dans la méthode constructeur de la classe Point à l'aide de la méthode scanner.nextDouble(). Dans ce cas, la méthode constructeur n'a pas de paramètres.
  • Le périmètre d'un triangle peut être calculé comme la somme des distances entre les trois sommets.
  • Une méthode calculerDistance() peut être utile pour calculer la distance entre deux points. La formule est indiquée ci-dessus. Si cette méthode se trouve dans la classe Point, le premier point est accessible sous forme de l'objet utilisé pour appeler la méthode (l'objet actuel this), mais il faut envoyer le deuxième point en paramètre. Si les variables d'instance x et y du deuxième point sont privées, il faut mettre à disposition des méthodes getX() et getY() afin de pouvoir accéder aux valeurs nécessaires pour le calcul.
Fichiers:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121import java.util.Scanner;class Geometrie { /**  * Le programme principal se content de construire un  * triangle, d'afficher son perimètre et d'afficher  * s'il est isocèle ou non.  */ public static void main(String[] args) { Triangle t = new Triangle(); double perimetre = t.calculerPerimetre(); System.out.println("Périmètre : " + perimetre); boolean isocele = t.testerIsocele(); if (isocele) System.out.println("Le triangle est isocèle"); else System.out.println("Le triangle n'est pas isocèle"); }}class Triangle { private Point p1, p2, p3; private double longueur1, longueur2, longueur3; /**  * La constructeur d'un Triangle fait appel  * au constructeur de Point. Ce dernier lit les  * coordonnées depuis le terminal.  */ public Triangle() { // Construction de trois points: p1 = new Point(); p2 = new Point(); p3 = new Point(); // Les distances sont calculées et stockées dans des variables // d'instance. Les méthodes calculerPerimetre et testerIsocele // peuvent ainsi accéder aux valeurs précalculées et nous évitons // de les recalculer plusieurs fois. longueur1 = p1.calculerDistance(p2); longueur2 = p2.calculerDistance(p3); longueur3 = p3.calculerDistance(p1); } /**  * Calcul du perimètre de l'instance courante (this).  * @return le perimetre sous la forme d'un double  */ public double calculerPerimetre() { return (longueur1 + longueur2 + longueur3); } /**  * Teste si l'instance courante (this) est un triangle isocèle  * @return true si le triangle est isocèle et false sinon  */ public boolean testerIsocele() { if ((longueur1 == longueur2) || (longueur2 == longueur3) || (longueur3 == longueur1)) { return true; } else { return false; } }}class Point { private static Scanner scanner = new Scanner(System.in); private double x, y; public Point() { System.out.println("Construction d'un nouveau point"); System.out.print(" Veuillez entrer x : "); x = scanner.nextDouble(); System.out.print(" Veuillez entrer y : "); y = scanner.nextDouble(); } public double getX() { return x; } public double getY() { return y; }/**  * Calcule la distance entre this et un point p  * @param p un Point par rapport auquel on calcule la distance  * @return la distance de this à p  */ public double calculerDistance(Point p) { // Calcule la distance entre deux points. Le premier point est // l'objet actuel (this). Le deuxième point (p) est envoyé en // paramètre. double x1 = this.x; double y1 = this.y; double x2 = p.getX(); double y2 = p.getY(); double xdiff = x1 - x2; double ydiff = y1 - y2; double somme = xdiff * xdiff + ydiff * ydiff; double distance = Math.sqrt(somme); return distance; }}
Article publié le 17 Août 2010 Mise à jour le Lundi, 06 Juin 2022 17:58 par Salim KHALIL