Modèle objet de PHP (1)

Licence Informatique 2ème année

Youssef Chahir

 

Modèle objet de PHP (1)

Notes de cours

Travail personnel

Objectifs

On continue à manipuler PHP et on aborde les aspects objets.

Exercice 1 — PHP Objet : Géométrie : polygone, rectangle, triangle, ... #

Le but de ce tp est d'illustrer en PHP l'héritage sur un exemple classique de géometrie; les polygones et leurs specialisation en rectangles, en triangles etc....
Un polygones est caracterisé par des points.

  1. Écrire dans un fichier "Point.php" une classe Point pour representer un point avec une couleur donnée en 2 dimensions. Elle comprendra au moins le constructeur ainsi qu'une méthode distance pour calculer la distance d'un point à un autre et une méthode toString pour pouvoir afficher les coordonnées d'un point sous la forme (x,y).
  2. Ecrire dans un fichier "Polygone.php" une classe Polygone où un polygome est un ensemble de points : Soit le constructeur qui prend en arguments les points qui composent le polygone.
    • Écrire la méthode nbrSommet pour calculer le nombre de sommets.
    • Écrire la méthode perimetrepour calculer le périmètre.
    • Ajouter une méthode __toString pour l'affichage de la liste des sommets (les points).
    • Écrire un fichier "testPolynome.php" pour tester vos polygones et leurs methodes.
      Par exemple :
      $Polygone= new Polygone(new Point(10,10), new Point(20,20),new Point(10,20));
      print("Je suis un polygone avec les sommets : ".$Polygone);
      print("et de perimetre ".$Polygone->Perimetre());
      ...
  3. Écrire dans un fichier "Rectangle.php" une classe Rectangle qui spécialise les polygones. Le constructeur prend deux points en argument correspondants aux coins supérieur gauche et inférieur droit).
    • Ajouter des méthodes longueur et largeurpour calculer la longueur et la largeur.
    • Ajouter une méthode perimetre pour calculer le périmètre du rectangle.
  4. Ecrire une classe Traiangle qui hérite de la classe Polygone.
    • Écrire une méthode equilateral qui vérifie si un triangle est équilatéral ou non
  5. Écrire dans un fichier "Cercle.php" une classe Cercle qui est caractérisé par son centre (c.à.d. un point) et son rayon. Cette classe comprendra le(s)) constructeur(s), une méthode Perimetre pour calculer le périmètre du cercle ainsi qu'une méthode Surface pour calculer sa surface.
  6. A la création d'une instance de cercle, il faut vérifier que la valeur de son rayon est positive. Dans le cas contraire, le programme lève une exceptionon et retourne un message d'erreur.
  7. Créer une méthode d'affichage d'un cercle .
  8. Le rayon d'un cercle est défini comme la distance entre les points du cercle et son centre. Un cercle est l'ensemble des points situés à même distance d'un point donné. Ce point est son centre, la distance est le rayon. On peut traduire ceci est disant qu'un cercle est l'ensemble des solutions d'une équation de la forme :
    `\sqrt((x-a)^2 + (y-b)^2) = R`
    pour R un nombre réel positif (cercle de centre (a,b) et rayon R).
    Un cercle peut être construit soit à partir de son centre et de son rayon, soit à partir de deux points (centre et un autre point) diamétralement opposés. Un cercle possède un périmètre et une surface. Il peut être affiché, translaté. Il est possible de modifier sa couleur, son rayon et son diamètre. Compléter la classe Cercle (précédente).

Remarque :

On peut utiliser l'autoloading dans les fichier de test.

Améilioration :

On peut améliorer l'affichage d'une figure géométrique sur une page web, en utilisant la bibliothèque GD dont voici un exemple :

// Création d'une image vide
$image = imagecreatetruecolor(400, 300)  or die('Cannot Initialize new GD image stream');;

// Alloue une couleur pour le polygone
$col_poly = imagecolorallocate($image, 255, 255, 255);

// Dessine le polygone
imagepolygon($image, array(
        0,   0,
        100, 200,
        300, 200
    ),
    3,
    $col_poly);

// Affichage de l'image sur le navigateur
header('Content-type: image/png');

imagepng($image);
$save='test1.png';
imagepng($image,$save,0,NULL); 
imagedestroy($image);

header("Content-type: image/png");

$img_width = 800;

$img_height = 600;

$img = imagecreatetruecolor($img_width, $img_height);
$black = imagecolorallocate($img, 0, 0, 0);
$white = imagecolorallocate($img, 255, 255, 255);
$red   = imagecolorallocate($img, 255, 0, 0);
$green = imagecolorallocate($img, 0, 255, 0);
$blue  = imagecolorallocate($img, 0, 0, 255);
$orange = imagecolorallocate($img, 255, 200, 0);

imagefill($img, 0, 0, $white);

imagerectangle($img, $img_width*2/10, $img_height*5/10, $img_width*4/10, $img_height*8/10, $red);

imagerectangle($img, $img_width*4/10, $img_height*5/10, $img_width*8/10, $img_height*8/10, $red);

imagepolygon($img, [$img_width*3/10, $img_height*2/10, $img_width*2/10, $img_height*5/10, $img_width*4/10, 
             $img_height*5/10], 3, $red);

imagepolygon($img, [$img_width*3/10, $img_height*2/10, $img_width*7/10, $img_height*2/10, $img_width*8/10, 
            $img_height*5/10,$img_width*4/10, $img_height*5/10], 4, $red);

imageellipse($img, 100, 100, 100, 100, $orange);

imagearc($img, $img_width*3/10, $img_height*8/10, 100, 200, 180, 360, $red);

imageline($img, 0, $img_height*8/10, $img_width, $img_height*8/10, $green);

imagepng($img);
$save='test2.png';
imagepng($img,$save,0,NULL);