Tout savoir sur la programmation orientée objet avec le langage C++
Définitions et rappels
Avant d’entrer dans le vif du sujet, il convient de rappeler certaines notions importantes lorsqu’on parle de programmation informatique en C++.
Définitions
La Programmation Orientée Objet est un paradigme qui existe dans de nombreux langages comme le C++, le C# ou l’Eiffel et même en Javascript (bien qu’il soit plus compliqué). Le noyau dur de la Programmation Orientée Objet se retrouvent en deux termes : Modèle et Instance.
Le Modèle représente un ensemble de données, de fonctions membres et de méthodes.
L’Instance quant à elle représente l’objet créé à partir d’un modèle.
Rappels importants
Pour bien comprendre l’importance de la Programmation Orientée Objet dans la programmation informatique de notre ère, voici quelques rappels de notions à assimiler avant de se lancer dans le retour d’expérience à la suite.
Rappelons d’abord l’importance de la notion d’héritage. Celle-ci se divise en deux formes.
- héritage de classe concrète —> concrète ou abstraite —> concrète. Dans ces deux cas là, les propriétés et les données (fonction membres et méthodes) qui seront visibles sur les classes filles.
- L’autre forme de l’héritage est intitulé héritage en interface.
Ensuite intervient la notion d’Override. C’est à dire la possibilité de changer le fonctionnement d’une instance en proposant une implémentation différente dans une classe fille. Pour information, la méthode est une fonctionnalité que l’on peut override.
Enfin, une interface rassemble l’ensemble de méthodes Pure Virtuelles, c’est à dire des méthodes qui ne propose pas d’implémentations.
Alerte
La différence entre une fonction membre et une méthode est importante. Une fonction membre ne peut être altérer par une classe fille dans le sens où elle n’hérite pas de la possibilité d’override cette même fonction membre.
Retour d’expérience
Ce retour d’expérience vous est proposé par notre Insider Nicolas.
D’après l’un de mes plus récents projets, j’ai eu l’occasion de travailler en C++ sur le Blog Project Framework (Open Source) sur lequel vous pouvez d’ailleurs apporter votre contribution. L’idée est simple : simplifier la bibliothèque standard du C++. Basé principalement sur de la R&D par l’intégration de fonctionnalités non présentes dans la bibliothèque standard commme l’ajout de classes utilitaires à la gestion d’objets mathématiques notamment (quaternion, vecteur, matrice).
N’hésitez pas à poser vos questions sur ce projet en commentaires.
Pourquoi utiliser la POO ?
La question peut se poser même si les arguments en sa faveur sont considérables. Commençons par expliquer que ce formidable outil pour le développement permet de faire des API quasiment parfaites. Avec ces dernières, un utilisateur sans connaissances poussées peut sans mal faire usage de l’Orienté Objet afin d’être guidé complètement et faciliter l’application de formules par l’utilisation des rotations de matrice voire des calculs vectoriels (class : vector).
Il est aisé d’aller encore bien plus loin. Il est notamment possible de faire ce que l’on appelle des ECS (Entity Component System) avec des templates (ce qui est particulièrement agréable à utiliser.)
La POO peut cependant être facilement biaisée par l’ensemble des architectures qui la compose. Pourquoi ? En C++, il existe tant de paradigmes qu’il est très facile de créer des architectures trop compliquées à maintenir.
Exemple : en C++ il est très facile de ne pas respecter les principes SOLID en s’écartant des méthodologies Agiles et donc arriver à un résultat inmaintenable. Cela arrive souvent chez les débutants en C++ qui malheureusement partent sur des bases de C et rajoute des objets de la STL en pensant que cela suffit à faire de l’Orienté Objet.