Date de première publication : 2022/10/6
Créer une classe Moteur
avec un état : moteur démarré ou non et un numéro de série, une méthode pour démarrer et une méthode pour arrêter le moteur
Moteur |
- etat : booléen - id : chaine |
+ constructeur(id) + finaliseur() + demarrer() + arreter() |
Dans le "constructeur" et dans le finaliseur __del__
, on pourra afficher ce qui est fait : construction/destruction de id.
Composition
Créer une voiture qui crée également un moteur. Faire que démarrer ou stopper la voiture, fasse la même action sur le moteur
Voiture |
- moteur : Moteur |
+ constructeur() + demarrer() + arreter() |
Regardez ce qui se passe avec ou sans finaliseur. Si vous écrivez le finaliseur, vous écrivez ce qui se passe. On ne vous demande pas d'effacer l'attribut
Agrégation
Donner une instance de moteur à une instance de voiture et faire les mêmes traitements que précédemment
Voiture |
- moteur : Moteur |
+ constructeur(Moteur) + finaliseur() + demarrer() + arreter() |
Regardez ce qui se passe avec ou sans finaliseur. Si vous écrivez le finaliseur, vous écrivez ce qui se passe. On ne vous demande pas d'effacer l'attribut
Héritage
Dernière modélisation : faire d'une voiture une classe fille de Moteur
...
Là encore, il est intéressant de noter quand les objets sont construits et détruits.
Le finaliseur de la classe fille appelle par défaut le finaliseur de la classe mère. Si vous redéfinissez le finaliseur de la classe fille, il faut alors explicitement appeler le finaliseur de la classe mère.
Aller plus loin...
En panne ?
Vous allez créer une exception personnalisée EnPanne
et vous allez l'utiliser : à chaque fois qu'un moteur est démarré, il y aura une chance de tomber en panne. Si c'est le cas, il faudra lancer une exception et prévenir l'utilisateur que la voiture n'a pas pu être démarrée.
Une voiture hybride ?
Que se passe-t-il si maintenant une voiture peut avoir deux moteurs : un moteur électrique et un moteur thermique ? Si l'on suppose également que les deux moteurs ne peuvent fonctionner en même temps ?