héritage
Quatre fichiers sont attendus ici. N'oubliez pas de faire appel aux autres fichiers si vous utilisez des descriptions d'objets (par exemple, un enseignant doit connaître la description d'un étudiant).
Il s'agit du fichier réalisé lors du premier exercice auquel il faut rajouter la méthode
Classe fille d'
Classe fille d'
Fichier individu.php
Description de la classeIndividu
Il s'agit du fichier réalisé lors du premier exercice auquel il faut rajouter la méthode
bonjour
Fichier etudiant.php
Description de la classeEtudiant
Classe fille d'
individu
avec :
- Une variable pouvant contenir des notes
- Un constructeur initialisant le tableau de notes
- Une méthode
passerEpreuve
qui génère une note alétoire grâce à la fonctionrand(0,20)
et l'ajoute dans le tableau de notes - Une méthode
moyenne
qui calcule la moyenne à partir du tableau de notes de l'étudiant
Fichier enseignant.php
Description de la classeEnseignant
Classe fille d'
individu
avec :
- Une variable pouvant contenir des étudiant
- Un constructeur initialisant le tableau d'étudiants
- Une méthode
ajouterEtudiant
qui permet d'ajouter une instance d'Etudiant
- Une méthode
organiserEpreuve
demande à chaque étudiant de passer une épreuve - Une méthode moyennes qui affiche les moyennes des étudiants et calcule la moyenne générale (voir les résultats du jeu de test)
Jeu de test
$enseignant = new Enseignant('Doe', 'John', 67); $enseignant->bonjour(); $riri = new Etudiant('Duck', 'Riri', 8); $fifi = new Etudiant('Duck', 'Fifi', 8); $loulou = new Etudiant('Duck', 'Loulou', 8); $enseignant->ajouterEtudiant($riri); $enseignant->ajouterEtudiant($fifi); $enseignant->ajouterEtudiant($loulou); $enseignant->organiserEpreuve(); // Fait appel à la méthode passerEpreuve de la classe Etudiant // qui utilise la fonction rand(0,20) pour déterminer la note $enseignant->moyennes(); $enseignant->organiserEpreuve(); $enseignant->moyennes();
Résultat du jeu de test
Je suis John Doe
Riri Duck : 10 (10)
Fifi Duck : 9 (9)
Loulou Duck : 15 (15)
Moyenne générale : 11.333333333333
Riri Duck : 12 (10, 14)
Fifi Duck : 12.5 (9, 16)
Loulou Duck : 13.5 (15, 12)
Moyenne générale : 12.666666666667
Disparition de John Doe !
Disparition de Loulou Duck !
Disparition de Fifi Duck !
Disparition de Riri Duck !
Riri Duck : 10 (10)
Fifi Duck : 9 (9)
Loulou Duck : 15 (15)
Moyenne générale : 11.333333333333
Riri Duck : 12 (10, 14)
Fifi Duck : 12.5 (9, 16)
Loulou Duck : 13.5 (15, 12)
Moyenne générale : 12.666666666667
Disparition de John Doe !
Disparition de Loulou Duck !
Disparition de Fifi Duck !
Disparition de Riri Duck !
Individu.php
<?php namespace App\GereckeFr\CoursBundle\POO\Ex02; class Individu { private $nom; private $prenom; private $age; // Constructeur function __construct($n, $p, $a) { // On initialise les variables $this->nom = $n; $this->prenom = $p; $this->age = $a; } // Destructeur function __destruct() { return "Disparition de $this->prenom $this->nom !<br>"; } function joyeuxAnniversaire() { $this->age++; return "J'ai $this->age ans<br>"; } function etatCivil() { return "$this->prenom $this->nom"; } function bonjour() { return "Je suis " . $this->etatCivil(); } }
Etudiant.php
<?php namespace App\GereckeFr\CoursBundle\POO\Ex02; class Etudiant extends Individu { public $notes; function __construct($n, $p, $a) { parent::__construct($n, $p, $a); // initialisation des variables en utilisant la méthode parent $this->notes = array(); // initialisation du tableau de notes } function passerEpreuve() { $this->notes[] = rand(0,20); // Production de la note, aléatoire ici } function moyenne() { // Calcul de la moyenne sur l'ensemble des notes du tableau if(count($this->notes) <= 0) return 0; $total = 0; foreach ($this->notes as $note) { $total += $note; } return $total / count($this->notes); } }
Enseignant.php
<?php namespace App\GereckeFr\CoursBundle\POO\Ex02; class Enseignant extends Individu { private $etudiants; // Constructeur function __construct($n, $p, $a) { parent::__construct($n, $p, $a); // initialisation des variables en utilisant la méthode parent $this->etudiants = array(); // initialisation du tableau d'étudiants } /* * Principe d'encapsulation, le tableau d'étudiants n'est pas accessible * On doit donc définir une méthode pour ajouter des étudiants */ function ajouterEtudiant(Etudiant $etu) { $this->etudiants[] = $etu; } function organiserEpreuve() { foreach ($this->etudiants as $etudiant) { $etudiant->passerEpreuve(); // Pour chaque étudiant, on demande de "produire" une note } } function moyennes() { $total = 0; $result = ""; foreach ($this->etudiants as $etudiant) { // Affichage de l'état civil de l'étudiant $result .= $etudiant->etatCivil(); // Affichage de la moyenne de l'étudiant $result .= " : " . $etudiant->moyenne() . " ("; $result .= join(", ", $etudiant->notes); $result .= ")<br>"; $total += $etudiant->moyenne(); } // Calcul de la moyenne générale $result .= "Moyenne générale : " . $total / count($this->etudiants) . "<br>"; return $result; } }