1. Présentation des principes de la POO

Aujourd'hui, vous découvrirez un monde nouveau et intéressant. Le monde de la programmation orientée objet ( POO ). Vous avez déjà appris les classes et les objets. Aujourd'hui, vous en apprendrez plus sur eux, bien plus encore.

La POO est apparue comme une réponse à la complexité croissante des programmes. Lorsque les variables et les méthodes des programmes ont commencé à se compter par dizaines de milliers, il est devenu clair qu'il fallait faire quelque chose. Une solution consistait à combiner les données et les méthodes associées dans des objets distincts.

Désormais, les programmeurs devaient décrire séparément comment les objets interagissent avec l'extérieur et comment ils se comportent en interne. Cela a facilité la compréhension et l'écriture de programmes. Cependant, une question demeure : quelles méthodes doivent être internes à un objet et lesquelles doivent être disponibles pour les autres objets ?

De nombreuses approches ont été tentées. Et sur la base des meilleures pratiques découvertes, 4 principes de POO ont émergé. Ce sont l'abstraction, l'encapsulation, l'héritage et le polymorphisme . Auparavant, il n'y en avait que trois, mais les experts ont ensuite décidé d'ajouter également l'abstraction.


2. Abstraction

Les internautes se disputent encore sur la définition de l'abstraction en POO . Le problème n'est pas que tout le monde se trompe. C'est que tout le monde a raison . Plus un programme est petit, plus l'abstraction est liée au langage Java. Plus un programme est gros, plus l'abstraction est liée à la modélisation/simplification d'objets du monde réel.

Mais les meilleurs esprits semblent convenir que :

L'abstraction est l'utilisation des seules caractéristiques d'un objet qui le représentent de manière suffisamment précise dans un programme. L'idée principale est de représenter l'objet avec le plus petit ensemble de champs et de méthodes permettant simultanément de résoudre vos tâches avec une précision suffisante .

En Java, l'abstraction est réalisée via des classes abstraites et des interfaces.

L'abstraction dans la vraie vie

Un bon exemple d'abstraction dans la vie réelle est celui des descriptions de poste dans une entreprise ou une organisation. Le titre d'un poste est une chose, mais les responsabilités spécifiques attribuées à un poste sont une tout autre affaire.

Imaginez que vous concevez la structure organisationnelle de votre future entreprise. Vous pouvez diviser les responsabilités de secrétariat, en les répartissant sur plusieurs postes différents. Vous pouvez scinder le poste de PDG en plusieurs postes distincts : CFO, CTO, CMO, HR Director. Ou, par exemple, vous pouvez combiner les postes de directeur de bureau et de recruteur en un seul.

Vous imaginez des titres de poste, puis vous répartissez les responsabilités pour ces postes. L'abstraction consiste à se détacher de l'objet dans son ensemble et à sélectionner les propriétés et composants essentiels dont nous avons besoin.

Présentation des principes de la POO.  Abstraction

Du point de vue de la programmation, l'abstraction est la division correcte d'un programme en objets . En règle générale, il existe des dizaines de façons de représenter n'importe quel programme volumineux sous forme d'objets interactifs. L'abstraction vous permet de sélectionner les caractéristiques essentielles et d'ignorer les non essentielles.


3. Encapsulation

Le but de l'encapsulation est d'améliorer les interactions en simplifiant les objets.

Et la meilleure façon de simplifier quelque chose est de cacher tout ce qui est compliqué aux regards indiscrets. Par exemple, si vous êtes installé dans le cockpit d'un gros porteur Boeing, vous ne comprendrez pas immédiatement comment le faire fonctionner :

Mais pour les passagers de l'avion, tout est plus simple : vous achetez un billet et montez dans l'avion, qui décolle puis atterrit. Vous pouvez facilement voler d'un continent à l'autre avec seulement la possibilité "d'acheter un billet" et de "monter dans un avion". Toute la complexité de la préparation de l'avion pour le vol, le décollage, l'atterrissage et diverses situations d'urgence vous est cachée. Sans oublier les centres de navigation par satellite, de pilotage automatique et de contrôle du trafic aérien. Et cela nous simplifie la vie.

D'un point de vue programmation, l'encapsulation "cache l'implémentation". J'aime cette définition. Notre classe peut contenir des centaines de méthodes et implémenter des comportements très complexes dans diverses situations. Mais on peut cacher toutes ses méthodes aux regards indiscrets (en les marquant avec le modificateur private), et ne laisser que deux ou trois méthodes pour interagir avec les autres classes (en les marquant avec le modificateur public). Ensuite, toutes les autres classes de notre programme ne verront que les trois méthodes publiques et les appelleront mais pas les autres. Et toute la complexité sera cachée à l'intérieur de la classe, tout comme le cockpit est caché aux heureux passagers.


4. Héritage

Il y a deux côtés à l'héritage . Héritage en programmation et héritage dans la vie réelle. En programmation, l'héritage est une relation particulière entre deux classes . Mais l'héritage dans la vraie vie est bien plus intéressant.

Si nous devons créer quelque chose dans la vraie vie, nous avons deux options :

  1. Créer la chose dont nous avons besoin à partir de rien, en y consacrant beaucoup de temps et d'efforts.
  2. Créer la chose dont nous avons besoin en nous basant sur quelque chose qui existe déjà.

La stratégie optimale est celle-ci : prendre une bonne solution existante, la modifier un peu, l'adapter à nos besoins, puis l'utiliser.

Si nous retraçons l'histoire humaine jusqu'à ses débuts, nous découvrons que des milliards d'années se sont écoulées depuis que la vie a commencé sur la planète. Mais si nous considérons que le point de départ des humains est nos ancêtres primates (c'est-à-dire que les humains sont "basés sur" des ancêtres primates), alors seulement quelques millions d'années se sont écoulées. Construire à partir de zéro prend plus de temps. Beaucoup plus longtemps.

En programmation, vous pouvez faire quelque chose de similaire en créant une classe basée sur une autre. La nouvelle classe descend (hérite) de la classe existante. Ceci est très avantageux lorsqu'une classe existante contient 80 à 90 % des données et des méthodes dont nous avons besoin. Nous déclarons simplement la classe appropriée comme parent de notre nouvelle classe, et toutes les données et méthodes de la classe parent apparaissent automatiquement dans la nouvelle classe. Pratique, non ?


5. Polymorphisme

Le polymorphisme est un concept de programmation. Il décrit une situation où différentes implémentations sont cachées derrière une seule interface. En regardant dans la vraie vie pour un homologue, nous constatons que la conduite d'un véhicule est un bon choix.

Si quelqu'un peut conduire un camion, il peut aussi être mis au volant d'une ambulance ou au volant d'une voiture de sport. Une personne peut conduire une voiture, quel que soit le type de voiture, car toutes les voitures ont la même interface de commande : un volant, des pédales et un levier de vitesses. Les composants internes des voitures sont différents, mais ils ont tous la même interface de contrôle.

Revenant au monde de la programmation, le polymorphisme permet d'accéder de la même manière à des objets de classes différentes (ayant généralement un ancêtre commun), une propriété dont la valeur ne peut guère être surestimée. Sa valeur augmente à mesure que le programme s'agrandit.

OOP signifie principes. Lois internes. Chacun d'eux nous limite d'une certaine manière, mais offre de grands avantages en retour lorsque le programme devient important. Les quatre principes de la POO sont comme les quatre pieds d'une table. Enlevez-en un et tout le système devient instable.