Seb-Info

DS sur poste programmation PHP POO

DS sur poste programmation PHP POO

Consignes générales

  • Le code doit être lisible et fonctionnel.
  • Le code doit être commenté (au minimum : description de classe, rôle des méthodes, points d’algorithme importants).
  • Le code doit être indenté correctement.
  • Respect des normes vues en classe : PSR-12 (voir les outils utilisés).
  • Consultez immédiatement la section Comment rendre le travail (en bas de page).

Ressources autorisées

  • Autorisé : ressources Web, vos travaux, documentation officielle, et outils d’IA (ChatGPT, Copilot, etc.).
  • Interdit : « appel à un ami » / entraide individuelle en temps réel, partage de code entre étudiants.

Compréhension & évaluation

Votre note dépendra principalement de ce que vous avez compris et savez justifier.
Les copier-coller non maîtrisés ne mèneront pas à une bonne note.

  • Vous devez être capables d’expliquer votre code à l’oral et d’effectuer de petites modifications demandées en direct.

L'Aston Martin DB5 de James Bond renaît de ses cendres, toutes les photos

Exercice 1 :

Vous disposez de ce code :

<?php

abstract class Vehicule 
{
    protected $demarrer = FALSE;
    protected $vitesse = 0;
    protected $vitesseMax;

    // On oblige les classes filles à définir les méthodes abstracts
    abstract function demarrer();
    abstract function eteindre();
    abstract function decelerer($vitesse);
    abstract function accelerer($vitesse);

    // Méthode magique toString
    public function __toString()
    {
        $chaine = "Ceci est un véhicule <br/>";
        $chaine .= "---------------------- <br/>";
        return $chaine;
    }
}

class Voiture extends Vehicule 
{
   
    // à compléter
}

$veh1 = new Voiture(110);
$veh1->demarrer();
$veh1->accelerer(40);
echo $veh1;
$veh1->accelerer(40);
echo $veh1;
$veh1->accelerer(12);
$veh1->accelerer(40);
echo $veh1;
$veh1->accelerer(40);
$veh1->decelerer(120);
echo $veh1;

$veh2 = new Voiture(180);
echo $veh2;

echo "############################ <br/>";
echo "Nombre de voiture instanciée : " . Voiture::getNombreVoiture() . "<br/>";

De même on a fait le choix de placer toutes les classes en un seul fichier pour ce DM mais vous le savez cela n’est pas la bonne pratique.

  1. On vous demande de modifier ce code afin qu’on ne puisse pas accélérer en une fois de plus de 30%. Par exemple une voiture peut passer au maximum de 100 à 130 km/h. Si la voiture est à 50 km/h elle peut au maximum passer à 65 km/h.
    Une exception sera faite quand on démarre car 30% de 0 ça fait 0 ! ^^ Et la voiture ne pourrait dans ce cas jamais avancer.
    Donc si la voiture est à l’arrêt on peut au maximum passer de 0 km/h à 10 km/h.
  2. De même on ne peut ralentir de plus de 20 km/h en une seule fois. A vous de faire les modifications. Attention les vitesses négatives n’existent pas !
  3. On veut ajouter la possibilité de mettre le frein de stationnement. Le frein de stationnement ne peut être mit que quand la vitesse de la voiture est à 0 km/h. On ne peut accélérer et donc avancer si le frein de parking est activé. A vous de voir les modifications que cela engendre.
  4. Faire les tests nécessaires afin de valider les exercices 1,2,3.

Exercice 2 :

Comme on a créé une classe voiture héritant de véhicule on souhaite maintenant créer une classe Avion.
Mais après quelques réflexions nous avons modifié la classe Vehicule.
En effet certaines méthodes étaient génériques.
Voici la nouvelle mouture de la classe est :

<?php

abstract class Vehicule 
{
    protected $demarrer = FALSE;
    protected $vitesse = 0;
    protected $vitesseMax;

    // On oblige les classes filles à définir les méthodes abstract
    abstract function decelerer($vitesse);
    abstract function accelerer($vitesse);

    // Fonction pour démarrer le véhicule
    public function demarrer() 
    {
        $this->demarrer = TRUE;
    }

    // Fonction pour éteindre le véhicule
    public function eteindre() 
    {
        $this->demarrer = FALSE;
    }

    // Vérifier si le véhicule est démarré
    public function estDemarre() 
    {
        return $this->demarrer;
    }

    // Vérifier si le véhicule est éteint
    public function estEteint() 
    {
        return !$this->demarrer;
    }

    // Obtenir la vitesse actuelle
    public function getVitesse() 
    {
        return $this->vitesse;
    }

    // Obtenir la vitesse maximale
    public function getVitesseMax() 
    {
        return $this->vitesseMax;
    }

    // Méthode magique toString pour afficher un véhicule
    public function __toString() 
    {
        $chaine = "Ceci est un véhicule <br/>";
        $chaine .= "---------------------- <br/>";
        return $chaine;
    }
}

Un avion a des caractéristiques supplémentaires :

  • une altitude ( à un moment donné )
  • une altitude maximum qu’on appelle plafond. (Il ne peut aller plus haut)
  • chaque avion à son plafond mais aucun avion n’a été au delà de 40 000 mètres qu’on considère comme le plafond max de tous avions.
  • De même on considère que la vitesse max de toutes avions est de 2000 km/h après comme pour les voitures chaque avion à sa vitesse maximale propre.
  • un train d’atterrissage (on suppose ici qu’on peut le rentrer et le sortir)

Un avion a des méthodes en plus comme :

  • décoller ( le décollage nous faire prendre de suite une altitude de 100 m )
  • atterrir ( atterrir nous faire prendre de suite une altitude de 0 m )
  • prendre de l’altitude ( on en peut pas prendre de l’altitude tant qu’on n’a pas décollé )
  • perdre de l’altitude ( on ne peut pas perdre de l’altitude tant qu’on n’a pas décolle )
  • sortir le train d’atterrissage

Consignes :

  • Un avion ne peut décoller que si il a atteint une certaine vitesse. Pour simplifier on va considérer que c’est 120 km/h
  • Il ne peut atterrir que si son train d’atterrissage est sorti et si ça vitesse est comprise entre  80 km/h et 110 km/h  que l’altitude est entre 50 et 150 mètres (idem on simplifie).
  • Si l’avion peut atterrir alors à la fin son altitude est de 0 et sa vitesse de 0.
  • Le train d’atterrissage doit être rentré une fois qu’on est au dessus de 300 mètres sinon l’avion ne prend plus d’altitude.
  • Pour toutes actions illégales vous pouvez lancer une exception et la gérer

Exercice 3 :

On veut tester vos capacités à gérer l’ORM c’est à dire le passage des objets à la base de données.

Pour cela on partira d’une classe Avion différente de l’exercice 2 qui a plus vocation à référencer les différents avions qui existent.

Les propriétés sont simple :

  • un nom, par exemple F4U Corsair
  • un pays d’origine, par exemple Etats-Unis
  • une année de mise en service, par exemple 1943.
  • un constructeur, par exemple Chance Vought Aircraft Division

Les méthodes sont :

  • les setters pour les propriétés
  • les getters habituels
  • Constructeur
  • Hydrate

Il vous est demandé de créer cette classe Avion.class.php

Puis la classe managerAvion.class.php qui doit s’occuper d’implanter ces avions dans la base de données ou de les récupérer comme nous l’avons fait avec Pilotes.

Vous testerez ceci en créant juste 2 ou 3 avions afin de gagner du temps.

Vous devez bien évidement créer une table afin d’accueillir vos objets.


Comment rendre le travail ?

Le projet doit être versionné avec Git et poussé sur un dépôt GitHub public.

  • Initialisez un dépôt Git local dans votre dossier de projet avec git init.
  • Effectuez des commits réguliers et commentés (au moins un par exercice ou grande étape).
  • Ajoutez votre dépôt distant GitHub avec git remote add origin <lien-de-votre-depot>.
  • Envoyez vos commits sur GitHub avec git push origin main (ou master selon votre branche).
  • Vous pouvez utiliser VSC ou tout IDE qui vous va bien pour faire cela !

Le dépôt doit contenir uniquement les trois fichiers PHP demandés :

  • exercice1.php
  • exercice2.php
  • exercice3.php

Chaque fichier doit comporter un en-tête PHPDoc indiquant :

Par exemple
/**
 * Nom : Dupont
 * Prénom : Jean
 * Fichier : exercice1.php
 * Date : 2025-10-15
 * Description : Gestion des règles de vitesse et frein de parking.
 */
  • Il n’est pas demandé de fournir la base de données pour l’exercice 3.
  • Ne compressez pas vos fichiers (pas de ZIP).
  • Vérifiez que votre dépôt GitHub est public avant envoi ou si vous le mettez en private ajoutez moi en collaborateur.
  • Envoyez le lien du dépôt par mail à : contact@inion.info

Bonnes pratiques attendues :

  • Des commits fréquents et clairs (ex. : “Ajout de la méthode décoller() dans Avion”).
  • Un dépôt Git propre : pas de fichiers temporaires, pas de dossiers inutiles.
  • Un README.md à la racine présentant brièvement les 3 exercices (optionnel mais apprécié).
  • Un historique Git cohérent (pas de commit unique en fin de travail).

Évaluation

  • Votre projet sera évalué sur :
    • La qualité du code (lisibilité, indentation, PSR-12, commentaires, cohérence logique).
    • La traçabilité du travail (commits Git réguliers et explicites).
    • Et surtout, la compréhension orale de votre code : lors d’un court échange, vous devrez expliquer vos choix et réaliser de petites modifications demandées en direct.

.

Ce contenu est réservé aux membres du site. Si vous êtes un utilisateur existant, veuillez vous connecter. Les nouveaux utilisateurs peuvent s'inscrire ci-dessous.

Connexion pour les utilisateurs enregistrés
   
Nouvel utilisateur ?
*Champ requis
Powered by WP-Members