Programmation Objet
- François Brucker
- Célia Châtel
La programmation objet est un sujet très commenté. Il existe de nombreux cours en parlant et ce depuis de très longues années. Vous côtoierez donc sur internet des choses très anciennes (aux concepts désuets ou en disgrâce comme l'héritage) aux choses très récentes (aux concepts non encore clairement établis et dont on ne sait s'ils survivront à l'épreuve du temps). Le but ici est de présenter les bases opérationnelles et les raisons fondamentales de ce type de programmation et de pourquoi il est utilisé dans la quasi-totalité des langages actuels.
Ce cours devrait vous permettre de vous lancer dans la programmation objet dans tout langage, mais nous illustrerons tous les principes vues en python. Il restera bien sur des choses à découvrir, des concepts avancés ou encore les subtilités d'utilisation des objets dans divers langages, mais après ce cours vous devriez être bien préparé.
Le but de la programmation objet est d'écrire du code :
- facile à lire
- maintenable
- facile à étendre en ajoutant des fonctionnalités
Si un concept objet va à l'encontre de ce principe dans votre programme NE L'UTILISEZ PAS. C'est souvent vrai pour l'héritage qui n'a d'utilité que dans des cas très précis...
Classes et objets
La base de la programmation objet, c'est les classes et comment elles permettent de construire (on dira instancier) des objets.
On s'entraîne à la création d'objets :
Combiner ses objets entre eux
Reprenons nos objets et combinons les avec d'autres :
Héritage
Projet final
Protection des attributs et des méthodes
Attribut et méthodes privées
TBD : les
_
et les__
Getter et setters
TBD
Accesseurs
Améliorer ses objets en gérant précisément l'accès aux attributs :
Accesseurs et héritage :
La gestion des accesseurs et des mutateurs hérités est "compliquée" en Python. Si vous avez utilisé des @property
vues dans le projet objets : Dés pour votre classe Dé
, il faut un peu tricoter pour les utiliser dans la classe StatDé
.
Supposons que c'est l'attribut valeur
auquel vous accédez par @property
. Pour appeler :
- l'accesseur de la classe mère dans une classe fille on peut utiliser :
super().valeur
- le mutateur de la classe mère dans une classe fille peut être accédé via son nom Python qui est :
super(type(self), type(self)).valeur.fset(self, new_position)
C'est un peu compliqué et vient de l'implémentation de super()
en Python.
Vous pouvez consulter les deux liens suivants pour un peu mieux comprendre ce qu'on fait