Simplification du code : l'abstraction procédurale

Durée estimée: 45 minutes

Ce que l’on va faire :

  • répondre aux questions posées à la fin de la leçon précédente,
  • analyser le code et le décomposer en sous ensembles fonctionnels,
  • simplifier le code en remplaçant ces sous ensembles par une fonction ou procédure séparer,
  • examiner le gain obtenu par cette opération d'"abstraction",
  • apprendre à documenter le code

Réalisation

Ressources de départ : vous pouvez partir du résultat de la leçon précédente, ou du projet https://scratch.mit.edu/projects/174874637/.

Réponses aux questions posées à la fin de la leçin précédente

Fonctions, procédures et abstraction (procédurale)

Notions abordées :

  1. Décomposition,
  2. Abstraction procédurale,
  3. Qualité logicielle, modularité,
  4. Documentation.

Déroulement

  1. Réponses aux questions posées à la fin de la leçon précédente
    1. La voiture est masquée par le lutin "passage", avant l'arrivée :
      • La correction consiste simplement à ajouter le bloc dans le script de démarrage du lutin voiture.
    2. Masquer le lutin "passage", (actuellement le ballon de basket) :
      • comment cacher un lutin dans la piste ? dans le script de démarrage du lutin voiture.
      • On ne peut pas utiliser le bloc "masquer" car dans ce cas il serait également masqué pour la voiture qui ne le toucherait pas.
      • La solution est que ce lutin soit de la même couleur que la piste (ou une couleur très proche si on veut le vor qaund même). On le fait en remplaçant le ballon de basquet par un cercle de même taille.
      • Noter ici que le dessin peut se faire en mode "vecteur" ou en mode "bitmap". On passe de l'un à l'autre en cliquant sur le bouton en bas à droite. Attention, le passage du mode vecteur au mode bitmap n'est pas réversible.
        Nous reviendrons plus tard sur ces deux méthodes de dessin.
    3. Vérifier et corriger le chronomètre : Actuellement, si la voiture,touche le vert, elle revient au départ et le chrronomètre est réinitialisé, y compris au dernier tour. Dans ce cas, le temps affiché pour la course est celui du denier tour.
      Deux solutions sont possibles :
      • ou bien on ne réinitialise pas le chronomètre si le nombre de tours (qui restent à faire)est inférieur au nombre de tours de la course, en ajoutant un bloc "si",
      • ou bien on réinitialise le nombre de tours et la voiture repartira au début de la course.
      • On a retenu la 2° solution : réinitialisation du nombre de tours. Mais pour éviter d'écrire la même constante (3) à plusiuers endroits, on utilise plutôt une variable "nombreDeToursDeLaCourse", et on initialise à 3 cette variable.
        Nota : en l'absence de variable pour le nombre de tours, le chiffre 3 serait utilisé à plusieurs endroits pour définir ce nombre de tours. C'est dangereux, car si on décide de faire 4 tours, on peut très facilement oublier de la changer partout. On a alors une erreur qui risque de passer inaperçue. La variable "nombreDeToursDeLaCourse" ne va pas changer pendant le jeu, mais elle sera définie à une seule fois au début. C'est plus sûr.
  2. Simplification logicielle : la décomposition et l'abstraction (procédurale) :
    Ces notions sont FONDAMENTALES en programmation.
    Le script qui gère la voiture avec la boucle infinie est devenu trop compliqué pour être facile à lire, (surtout si c'est un copain qui l'a écrit et qu'il vous demande votre avis pour trouver un bug!).
    Il faut absolument simplifier et aussi documenter.

Revue des notions mises en oeuvre : la décomposition et l'abstraction