« Bonjour, Amigo ! Aujourd'hui, je vais ouvrir un monde nouveau et intéressant devant tes yeux. Je parle là de la Programmation orientée objet (POO). Tu as déjà fait la connaissance des classes et des objets. Aujourd'hui tu vas en apprendre plus à leur sujet, beaucoup plus. »

Nous allons commencer par les quatre piliers de la POO. Il s'agit de l'abstraction, de l'encapsulation, de l'héritage et du polymorphisme. (Il n'y en avait que trois autrefois, mais l'abstraction a été ajoutée plus tard)

1) Abstraction.

Un bon exemple d'abstraction dans la vie réelle est la description d'un emploi dans une entreprise. Un titre est une chose, mais les responsabilités en sont une toute autre.

Imagine que tu crées un organigramme pour ta future entreprise. Tu peux répartir les fonctions d'un secrétaire sur plusieurs autres postes. Tu peux distribuer les responsabilités du PDG sur plusieurs postes distincts : directeur financier, directeur technique, directeur du marketing et directeur des ressources humaines. Ou tu peux combiner les postes de directeur des opérations et de recruteur sous un même titre.

Supposons que tu cherches des noms pour les postes de ton entreprise, puis que tu « mets à plat » les responsabilités de ces postes. C'est l'abstraction : diviser quelque chose de grand et monolithique en plusieurs éléments plus petits.

POO : principes de base - 1

Du point de vue d'un programmeur, l'abstraction revient à diviser correctement un programme en objets.

Un grand programme peut généralement être représenté sous la forme d'objets pouvant interagir d'une dizaine de façons différentes. L'abstraction te permet de choisir les caractéristiques principales d'un objet et d'omettre ce qui est moins important.

L'abstraction est comme une stratégie militaire. Si tu choisis la mauvaise stratégie, aucune tactique ingénieuse ne pourra te tirer d'affaire.

2) Encapsulation.

L'encapsulation vise à améliorer l'interaction entre les objets en les simplifiant.

POO : principes de base - 2

La meilleure façon de simplifier quelque chose est de cacher tout ce qui est compliqué pour ceux qui n'ont pas besoin d'en savoir plus à ce sujet. Par exemple, si tu prends les commandes d'un Boeing, il te faudrait beaucoup de temps pour comprendre son fonctionnement :

POO : principes de base - 3

Cela dit, tout semble plus simple pour les passagers de l'avion : ils achètent un billet et montent à bord de l'avion, qui décolle et atterrit ensuite. Tu peux facilement voler d'un continent à l'autre en sachant seulement comment « acheter un biller » et « monter à bord ». Nous ne voyons rien des complexités liées à la préparation de l'avion pour le décollage, l'atterrissage et les diverses situations d'urgence potentielles. Et nous n'avons même pas à nous soucier de la navigation par satellite, du pilotage automatique et des centres de contrôle du trafic aérien. Cela nous simplifie la vie.

En matière de programmation, l'encapsulation consiste à « cacher 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 nous pouvons cacher toutes ses méthodes des regards indiscrets (en les marquant comme « private »), et ne laisser que deux ou trois méthodes pour l'interaction avec les autres classes (en les marquant comme « public »). Ainsi, toutes les autres classes de notre programme ne verront (et n'appelleront) que ces quelques méthodes sur cette classe. Toute la complexité de la classe sera cachée à l'intérieur, tout comme le cockpit est à l'abri du regard des passagers heureux.

3) Héritage.

L'héritage est un concept en programmation et dans la vie réelle. En programmation, l'héritage est une relation spéciale entre deux classes. Mais l'héritage dans la vie réelle est beaucoup plus intéressant.

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

1) fabriquer ce qu'il nous faut à partir de zéro, et investir beaucoup de temps et d'efforts.

2) fabriquer ce qu'il nous faut avec des choses qui existent déjà.

Voici la meilleure stratégie : Nous prenons une bonne solution existante, nous la retravaillons pour l'adapter à nos besoins, puis nous l'utilisons.

Prenons l'évolution humaine. Si nous remontons aux débuts de la vie sur la planète, nous voyons que des milliards d'années se sont écoulées. Mais si nous envisageons les humains comme les descendants des singes, nous ne parlons plus que de quelques millions d'années. Créer quelque chose à partir de rien prend plus temps. Beaucoup plus de temps.

De même, en programmation, nous pouvons créer une classe basée sur une autre. La nouvelle classe devient la descendante (l'héritière) d'une classe existante. C'est extrêmement utile quand tu as déjà une classe qui contient 80-90 % des données et méthodes nécessaires. Nous déclarons simplement une classe appropriée comme le parent de notre nouvelle classe. Toutes les données et méthodes de la classe parente font automatiquement partie de la nouvelle classe. Pratique, non ?

4) Polymorphisme.

Le polymorphisme est un concept de programmation qui décrit la situation où différentes implémentations sont cachées derrière la même interface. Pour trouver une analogie dans la vie réelle, prenons le processus de conduite d'une voiture.

Si une personne peut conduire un camion, elle pourrait aussi bien se mettre au volant d'une ambulance ou d'une voiture de sport. Une personne peut conduire une voiture, peu importe le type de véhicule, car tous ont la même interface de commande : un volant, des pédales et une boîte de vitesses. Les voitures sont organisées différemment à l'intérieur, mais toutes partagent la même interface de commande.

Pour en revenir à la programmation, le polymorphisme nous permet d'interagir avec des objets de classes différentes (généralement avec un ancêtre commun) de la même façon. L'importance de ce mécanisme ne peut pas être surestimée. Il devient de plus en plus important à mesure que le programme grandit.

La POO est un ensemble de principes. Des lois en matière de programmation. Chacune d'entre elles nous restreint d'une certaine façon, mais nous donne en retour des avantages énormes quand nos programmes grossissent. Les quatre principes de la POO sont comme les quatre pieds d'une chaise. Il suffit d'en enlever un pour que le système entier devienne instable.