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).

Fichier individu.php

Description de la classe Individu
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 classe Etudiant
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 fonction rand(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 classe Enseignant
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 !

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;
    }
}