Programmation Objet en Php - Exercices - Page 1 Programmation Objet en Php Exercices Auteur : E.Thirion Exercice 1 : La classe Conducteur Fichier à complèter : Etudiant/ConducteurAvecHeritage.php Un conducteur est une personne. On peut donc définir la classe Conducteur comme une sous-classe de la classe Personne. Définissez ces deux classes en respectant les consignes suivantes: La classe Personne Attributs de la classe Personne Les attributs de la classe Personne sont: Nom Alcool : degré d'alcool dans le sang. HeureSommeil : nombre d'heures de sommeil. Constructeur de la classe Personne Le constructeur de la classe Personne a deux paramètres : $n (nom) et $hs (heures de sommeil) et effectue les opérations suivantes: Affiche le message "Et voici un $n tout frais". Initialise le nom de la personne à $n. Initialise le degré d'alcool de la personne à 0. Initialise les heures de sommeil de la personne à $hs. La méthode AfficherAttributs de la classe Personne La méthode AfficherAttributs de la classe Personne n'a pas de paramètres. Elle affiche son nom, son degré d'alcool et ses heures de sommeil. Par exemple, pour une personne surnommée Tarzan avec 7 heures de sommeil, elle provoquerait l'affichage suivant: Etat de Tarzan 0 degres d'alcool dans le sang / 7 heures de sommeil
Programmation Objet en Php - Exercices - Page 2 La méthode BoireUnCoup de la classe Personne La méthode BoireUnCoup de la classe Personne a un paramètre $a. Lorsqu'on applique cette méthode à une personne son degré d'alcool dans le sang augmente de $a et un message est affiché. Pour une personne $p nommé Tarzan avec 0 degré d'alcool dans le sang, $p->boireuncoup (2) provoquerait l'affichage suivant: Tarzan boit un coup Il a maintenant 2 degres d'alcool dans le sang La méthode Dormir de la classe Personne La méthode Dormir de la classe Personne a un paramètre $hs. Lorsqu'on applique cette méthode à une personne, ses heures de sommeil deviennent égales à $hs. D'autre part, si le nombre d'heures de sommeil est supérieur ou égal à 5, son degré d'alcool redevient nul. La classe Conducteur Attributs de la classe Conducteur Les attributs de la classe Conducteur sont les suivants (en plus des attributs hérités de Personne) : HeuresConduite: nombre d'heures de conduite NbrDePoints : nombre de points de permis. Constructeur de la classe Conducteur Le constructeur de la classe Conducteur a des paramètres identitiques et exécute les mêmes opérations que celui de la classe Personne, plus les deux suivantes: il initialise les heures de conduites du conducteur à 0. il initialise le nombre de points de permis du conducteur à 12. Pour éviter une répétition inutile de code surchargez ce constructeur. La méthode AfficherAttributs de la classe Conducteur La méthode AfficherAttributs de la classe Conducteur effectue les mêmes opérations que celle de la classe Personne avec en plus l'affichage du nombres d'heures de conduite et du nombre de points de permis restant. Voici, par exemple l'affichage produit pour un conducteur nommé Bidochon: 2 degres d'alcool dans le sang / 2 heures de sommeil / 0 heures de conduite Nombre de points: 9 pour éviter une répétition inutile de code, surchargez cette méthode. La méthode Dormir de la classe Conducteur La méthode Dormir de la classe Conducteur est identique à celle de la classe Personne à un détail près: elle remet les heures de conduites à 0. Il est donc intéressant de surcharger cette méthode.
Programmation Objet en Php - Exercices - Page 3 La méthode Rouler de la classe Conducteur La méthode Rouler de la classe Conducteur a un seul paramètre $h: le nombre d'heure de conduite. Elle affecte $h aux heures de conduites d'un conducteur et affiche un message indiquant que cette personne a dormi $h heures. Par exemple, si $c est un conducteur nommé "Bidochon", l'appel de méthode $c->rouler (6) affecte la valeur 6 à l'attribut HeuresConduite de $p et affiche le message suivant: Bidochon roule 6 heures La méthode ControlePolice La méthode ControlePolice de la classe Conducteur n'a pas de paramètre. Appliquée à un conducteur, elle lui retire 3 point de permis si son degré d'alcool dans le sang est supérieur à 0.5. Elle affiche un message indiquant que cette personne c'est fait arrêté par la police. Test des méthodes Les méthodes sont appelées à la fin du script (partie du fichier à ne pas modifier). Pour les exécuter utilisez le lien dans le menu gauche du cours. Si vos méthodes ont été correctement écrites vous devriez obtenir l'affichage suivant: Et voici un Bidochon tout frais 0 degres d'alcool dans le sang / 2 heures de sommeil / 0 heures de conduite Nombre de points: 12 Bidochon boit un coup Il a maintenant 2 degres d'alcool dans le sang Bidochon roule 6 heures Bidochon se fait arreter par la police 2 degres d'alcool dans le sang / 2 heures de sommeil / 6 heures de conduite Nombre de points: 9 Bidochon dort 2 heures 2 degres d'alcool dans le sang / 2 heures de sommeil / 0 heures de conduite Nombre de points: 9 Et voici un Tarzan tout frais Tarzan boit un coup
Programmation Objet en Php - Exercices - Page 4 Il a maintenant 2 degres d'alcool dans le sang Tarzan dort 7 heures Etat de Tarzan 0 degres d'alcool dans le sang / 7 heures de sommeil Exercice 2 Fichier à complèter : Etudiant/ConducteurStatique.php Dans cet exercice nous reprenons encore une fois les deux classe Conducteur et Personne avec d'autres attributs et d'autres méthodes. Par contre la classe Conducteur est toujours considérée comme une sousclasse de la classe Personne. La classe Personne Les attributs de la classe Nom LesPersonnes: tableau contenant toutes les instances de cette classe. Cet attribut est un attribut de classe. Le constructeur Le constructeur de la classe Personne a un paramètre $n désignant le nom de la nouvelle personne. Il affiche le message "Et voici un $n tout frais", initialise le nom de la personne à $n et rajoute cette nouvelle personne dans le tableau LesPersonnes. La méthode AfficherLesPersonnes Cette méthode est une méthode de classe sans paramètre. Appliquée à la classe Personne elle affiche les noms de toutes les personnes contenues dans le tableau LesPersonnes. Supposons par exemple que l'on ai trois personnes nommée Bidochon, Lagaffe et James Bond. L'appel de méthode Personne::AfficherLesPersonnes( ) provoquera l'affichage suivant: Liste des personnes: Bidochon Lagaffe James Bond La méthode Tuer Cette méthode est une méthode de classe à un paramètre: le nom $n de la personne à tuer. Elle supprime cette personne dans le tableau LesPersonnes.
Programmation Objet en Php - Exercices - Page 5 La classe Conducteur Les attributs de la classe Aucun attribut spécifique. La méthode FaireUnAccidentAvec Cette méthode a un paramètre $n désignant le nom d'une personne. Appliquée à une personne $p elle tue cette personne ainsi que la personne nommée $n (que l'on supposera différente de la personne $p) et affiche un message. Supposons que l'on ait par exemple deux conducteurs: $Lagaffe nommé "Lagaffe" et $Bidochon nommé "Bidochon". Alors l'appel de méthode $Bidochon->FaireUnAccidentAvec("Lagaffe"), va tuer ces deux personnes et afficher le message suivant: Bidochon <--> Lagaffe : BOUM!!!! Pour écrire cette méthode, vous utiliserez obligatoirement la méthode Tuer de la classe Personne. Test des méthodes Les méthodes sont appelées à la fin du script (partie du fichier à ne pas modifier). Pour les exécuter utilisez le lien dans le menu gauche du cours. Si vos méthodes ont été correctement écrites vous devriez obtenir l'affichage suivant: Et voici un Bidochon tout frais Liste des personnes: Bidochon Et voici un Lagaffe tout frais Liste des personnes: Bidochon Lagaffe Et voici un James Bond tout frais Liste des personnes: Bidochon Lagaffe James Bond Bidochon <--> Lagaffe : BOUM!!!! Liste des personnes: James Bond
Programmation Objet en Php - Exercices - Page 6 Rappel sur les tableaux associatif en Php Pour ajouter au tableau $T, un nouvel élément de valeur $v: $T [] = $v; Pour répéter des instructions pour toutes les valeurs $v d'un tableau associatif $T: foreach ($T as $v) { instructions à répéter } Pour répéter des instructions pour toutes les paires (clef,valeur) ($c et $v), d'un tableau associatif $T: foreach ($T as $c=>$v) { instructions à répéter } Pour supprimer un élément de clef $c dans $T: unset($t[$c]);