Programmation Objet

Auteurs :
  • 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 :

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 , 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

Design Pattern