Ludovic Frank - Développeur indépendant

La programmation orientée objet, s'amuser avec des attributs, des méthodes et des classes...

ionicons-v5-k Ludovic Frank 12 mai 2023
942 lectures Niveau : intermédiaire

Bonjour, Bonjour 😁

Avez-vous déjà observé un enfant jouant avec des “Legos” ? Empilées les unes sur les autres, elles créent des structures complexes qui sont à la fois uniques et fondamentalement similaires parce qu'elles partagent toutes les mêmes éléments de base…

Et si je vous disais que jouer aux Legos ressemble à notre sujet du jour …

Bienvenue dans le concept de la programmation orientée objet (POO) ! Cela peut sembler un concept obscur, un labyrinthe de jargon conçu pour déconcerter, mais n'ayez crainte, ça va le faire ! 

Nous sommes sur le point d'embarquer pour un voyage passionnant qui illuminera ce sujet et vous fera passer du statut de novice à celui de ninja de la POO (bon … peut être pas ! mais quand même 😛). L'avenir n'attend pas et chaque seconde qui passe voit la création d'innombrables nouvelles "classes", de nouveaux "attributs" et de nouvelles “méthodes” dans le monde. 

Êtes-vous prêt à décoder les mystères de la POO ? Alors ! C’est parti ! 😁

Le développement logiciel

Accrochez-vous, car nous sommes sur le point de rentrer dans le vif du sujet, Alors, qu'est-ce que la programmation ou le développement logiciel ?

Imaginez que vous êtes un marionnettiste, mais au lieu de tirer les ficelles d'un petit Pinocchio en bois, vous pilotez votre ordinateur. Vous lui demandez d'effectuer des tâches spécifiques, comme afficher une page web, calculer une équation ou même exécuter un jeu vidéo. Vous avez l'impression d'exercer un pouvoir sur votre machine, n'est-ce pas ?

En gros, la programmation est un moyen de dire à un ordinateur ce qu'il doit faire. Mais voilà le hic : les ordinateurs, contrairement à nous, humains intelligents et géniaux (bah quoi ? 😛), ne comprennent pas les langues humaines. Ils parlent leur propre langue, le binaire (une série de 1 et de 0), et ce n'est pas très convivial.

Par conséquent, pour communiquer avec les ordinateurs, nous devons utiliser un langage de programmation.

Les nombreux "parfums" de la programmation

Les langages de programmation sont comme les glaces. Il existe des tonnes de parfums (ou de types), et si certains préfèrent la simplicité de la vanille (comme Python), d'autres préfèrent quelque chose d'un peu plus complexe avec beaucoup de garnitures (comme C++).

Il existe généralement trois grands types de programmation :

  • La programmation procédurale : Il s'agit de la recette de votre plat préféré. Vous disposez d'une liste d'ingrédients (données) et d'un ensemble d'instructions (procédures) que vous suivez dans un ordre spécifique pour créer le plat. La programmation procédurale consiste à écrire des procédures ou des méthodes qui effectuent des opérations sur les données, comme pour faire un sandwich ou un gâteau. Il s'agit de faire les choses dans l'ordre, une étape à la fois, tout comme on suit une recette.
  • Programmation fonctionnelle : Supposons que vous soyez devenu un cuisinier qui n'a plus besoin de suivre de recettes. Vous créez maintenant des plats basés sur les fonctions (mélanger, faire cuire ... etc) et les ingrédients. Dans la programmation fonctionnelle, la sortie dépend uniquement de l'entrée. Comme en cuisine, vous mettez des ingrédients (entrée) et vous obtenez un plat (sortie). Ce style évite les changements d'état (le "state") et les données mutables (modifier directement les données sans passer par la fonction), on appelle ces fonctions des fonctions "pures". Selon moi la programmation fonctonelle est la plus difficile à comprendre, ça tombe bien, ce n'est pas le sujet du jour 😁.
  • Programmation orientée objet (POO) : Vous vous souvenez de l'analogie avec les Lego ? C'est ici qu'elle entre en jeu. La POO consiste à créer des objets (comme des blocs de Lego) qui ont certaines propriétés et certains comportements. Ces objets interagissent les uns avec les autres pour faire fonctionner l'ensemble du programme. C'est comme créer une ville Lego avec différents types de blocs, chacun ayant ses propres caractéristiques, qui travaillent ensemble pour créer une métropole Lego animée.

Chaque type de programmation a ses avantages et ses inconvénients, et celui que vous choisissez d'utiliser dépend souvent de la tâche à accomplir, tout comme vous n'utiliseriez pas un marteau pour couper un morceau de bois...

Après, certains "types" sont, je trouve, plus difficiles à prendre en main que d'autres (c'est de toi que je parle, la fonctionnelle)

Mais pour l'instant, nous allons nous concentrer sur la programmation orientée objet. Alors, attachez vos ceintures, car nous sommes sur le point d'être "objectivés" (dans le bon sens du terme) !

Dans la prochaine section, nous nous pencherons sur la définition, l'histoire et l'importance de la POO. Restez donc dans les parages si cela vous intéresse 🙂.

Découvrez le monde de la programmation orientée objet (POO)

Maintenant que nous avons plongé le monde de la programmation, il est temps d'allez en profondeurs : le monde de la programmation orientée objet, ou comme on à l'habitude de l'appeler : la POO.

Alors, qu'est-ce que la POO ?

La POO expliquée - Tout tourne autour des objets !

En termes simples, la POO est un paradigme de programmation (un terme sophistiqué pour désigner un style ou une manière de programmer) dans lequel nous organisons notre code autour d'objets ...

Un objet est tout ce que vous voulez qu'il soit ! Il peut s'agir d'une personne, d'une voiture, d'un compte bancaire ou même d'un pixel sur votre écran. Le point essentiel est que les objets sont comme l'ADN de la POO. Ils contiennent des données (appelées attributs) et du code pour manipuler ces données (appelées méthodes).

Imaginez un objet "voiture". Il possède des attributs tels que la couleur, le modèle et la vitesse actuelle, ainsi que des méthodes telles qu’accélérer, freiner et tourner. Dans la POO, vous créez des instances de ces objets et vous les faites interagir les uns avec les autres, un peu comme vous le feriez avec des petites voitures.

L'histoire de la POO

Le concept de la POO n'est pas apparu du jour au lendemain. Comme la plupart des choses brillantes, il a évolué au fil du temps. Le premier langage de programmation à utiliser les principes de la POO était Simula, développé dans les années 1960 pour simuler des systèmes du monde réel. Toutefois, c'est le langage Smalltalk, développé dans les années 1970, qui a réellement mis la POO sous les feux de la rampe.

Depuis lors, de nombreux autres langages ont adopté les principes de la POO, notamment les très populaires Java et Python,.

Et tout comme un bon vin, la POO s'est améliorée avec le temps, prouvant son utilité dans une variété d'applications (ce sjte internet, par exemple 😁).

Pourquoi la POO est-elle importante ?

Vous vous demandez peut-être : "Pourquoi devrais-je m'intéresser à la POO ?". Eh bien, la POO est aussi importante pour le développement de logiciels que le café l'est pour une session de code qui dure toute la nuit (oui, j'ai connu ça 😛). Voici pourquoi :

  • La modularité : La POO permet de décomposer des problèmes complexes en éléments plus petits et donc gérables. Chaque objet est comme un mini-programme, avec ses propres données et sa propre logique. Il est donc plus facile de déboguer et de maintenir votre code que de se souvenir de votre mot de passe (ce n'est pas "motdepasse", n'est-ce pas ?😛).
  • Réutilisation : Les objets peuvent être réutilisés d'un programme à l'autre, tout comme votre tasse de café préférée qui vous permet de tenir jusqu'à la fin de chaque session de code (quoi, comment ça j'essaie d'insister sur le fait que les développeurs boivent beaucoup de café ? Un tout petit peu ...). Cela permet de gagner du temps, de réduire les erreurs et de rendre le code plus cohérent.
  • Évolutivité : La POO est parfaite pour les systèmes complexes et de grande taille. Elle permet à plusieurs développeurs de travailler simultanément sur différentes parties d'un projet sans provoquer de gros conflit.
  • Facile à comprendre : La POO modélise les entités du monde réel, ce qui rend le code plus facile à comprendre, même pour un développeur débutant. C'est comme apprendre une nouvelle langue en s'immergeant dans un pays où elle est parlée.

En résumé, la POO change la donne (enfin a changé la donne, car elle est très répandue aujourd'hui). Ce n'est pas seulement un style de programmation ; c'est une façon de penser, un paradigme qui vous guide pour aborder la résolution de problèmes comme si vous construisiez avec des Legos, un bloc (ou un objet) à la fois.

Vous êtes toujours avec moi ? Parfait 😁 ! Car dans la prochaine section, nous allons nous plonger dans les concepts de base de la programmation orientée objet. Nous parlerons de classes, d'attributs, de méthodes et de bien d'autres choses encore ! Alors, prenez une tasse de café (ou de thé, si vous préférez) et continuons de creuser en profondeur dans la programmation orientée objet !

Les concepts fondamentaux de la POO

Très bien, il est temps de plonger dans les concepts de base de la POO. Ne vous inquiétez pas, j'ai préparé mon traducteur pour convertir le langage des développeurs en langage humain. Attachez vos ceintures, c'est parti !

Objets et classes : Le Yin et le Yang de la POO

Vous vous souvenez de l'analogie avec les Lego ? Dans la POO, un "objet" est comme un simple bloc de Lego. Chaque objet est une instance d'une "classe", qui définit les attributs et les méthodes communs à tous les objets de ce type (oui, dis comme ça ça l'air compliquer, mais, ne vous inquiétez pas).

Pensez à une classe comme à un plan de création d'objets. Par exemple, supposons que nous ayons une classe appelée "Chien". Cette classe définit les attributs communs à tous les chiens, tels que la race, l'âge et la couleur, ainsi que des méthodes telles qu’aboyer, manger et dormir. Chaque chien de votre programme serait alors un objet créé à partir de cette classe, avec son propre ensemble d'attributs.

Attributs et méthodes : Le quoi et le comment

Les "attributs" sont les caractéristiques d'un objet, les détails qui le définissent. Par exemple, dans notre classe "Chien", la race, l'âge et la couleur seraient des attributs. Ce sont des adjectifs qui décrivent un objet.

Les "méthodes", quant à elles, sont les actions qu'un objet peut effectuer. Ce sont des verbes. Dans notre classe "Chien", aboyer, manger et dormir seraient des méthodes.

L'héritage : Tel père, tel fils

En POO, on parle d'"héritage" lorsqu'une classe (l'enfant) hérite des attributs et des méthodes d'une autre classe (le parent). Cela permet de réutiliser le code et de l'organiser de manière logique et hiérarchique.

Pensez-y comme à un véritable héritage. Si vos parents vous lèguent une voiture de collection, vous en "héritez". De même, si nous créons une classe appelée "Caniche" qui hérite de la classe "Chien", la classe "Caniche" aura automatiquement les mêmes attributs et méthodes que la classe "Chien". Les caniches sont des petits chiens, après tout !

Le polymorphisme : Un nom, plusieurs formes

"Polymorphisme" est un grand mot effrayant qui signifie simplement "plusieurs formes". Dans la POO, il désigne la capacité d'un objet à prendre plusieurs formes.

Prenons l'exemple de notre classe Chien avec une méthode appelée "son". Pour un objet Chien, le son peut être "aboyer". Mais si nous avons un autre objet de la classe Oiseau, le son pourrait être "gazouille". Le même nom de méthode "son" se comporte différemment selon les classes. C'est le polymorphisme en action !

Encapsulation : Garder les secrets

"L'encapsulation" consiste à cacher des données. Il s'agit de protéger les attributs et les méthodes d'une classe contre les interférences extérieures et les abus. Il s'agit d'une bulle protectrice qui protège le fonctionnement interne d'un objet du reste du programme.

C'est comme un journal secret fermé par un cadenas. Vous (l'objet) pouvez y écrire (modifier les attributs) et le lire (appelé des méthodes), mais personne d'autre ne peut le faire, à moins que vous ne leur fournissiez une clé (méthodes d'accès, souvent appelées les "getter" et les "setter").

L'abstraction : Cacher la complexité, montrer l'essentiel

Enfin, l'"abstraction" consiste à simplifier les systèmes complexes en les modélisant de manière à mettre en évidence leurs caractéristiques essentielles et à masquer les détails. C'est comme lorsque vous utilisez une voiture : vous n'avez pas besoin de savoir comment fonctionne le moteur pour la conduire.

Dans la POO, l'abstraction permet de créer une interface simple et de haut niveau pour un code complexe, ce qui le rend plus facile à comprendre et à utiliser. Il s'agit de prendre du recul pour voir la forêt (la fonctionnalité globale) au lieu de se perdre dans les arbres (les détails du code).

Exemples et cas d'utilisation de la programmation orientée objet

Maintenant que nous avons abordé la théorie de la POO, regardons-la en action. Car, soyons honnêtes, "voir c'est croire", et je suis sûr que vous êtes impatient de voir ces concepts "en vrai".

La POO dans la nature

La programmation orientée objet est omniprésente dans le monde de la programmation. Des jeux au développement web, des applications mobiles à l'intelligence artificielle, on là retrouve un peu partout :

  • Les jeux : Les jeux vidéo sont un excellent exemple de la programmation orientée objet. Chaque personnage d'un jeu peut être un objet doté d'attributs (comme la santé, la vitesse et la puissance) et de méthodes (comme la course, le saut et l'attaque). Cela permet aux développeurs de jeux de créer une variété de personnages uniques en changeant simplement les attributs ou en modifiant les méthodes.
  • Développement de sites web : Les sites web utilisent souvent la POO pour l'interaction avec l'utilisateur. Par exemple, un objet utilisateur peut avoir des attributs tels que le nom d'utilisateur et le mot de passe, et des méthodes pour se connecter, se déconnecter ou mettre à jour les informations du profil, et en fait... pour mon CMS, l'article que vous êtes en train de lire, est un objet.
  • Systèmes de base de données : Dans une base de données, chaque table peut être considérée comme un objet avec ses propres propriétés et méthodes. Cela facilite la manipulation et l'interaction avec les données, la même chose qu'au-dessus, dans ma base de donnée, et article, est un objet 😁.

Retroussons maintenant nos manches et voyons quelques exemples de code réels dans plusieurs langages de POO populaires : Python, Java, C++ et PHP (bah oui, forcément ...).

Quelques exemples avec les différents langages de programmation

La programmation orientée objet avec Python

Python, avec sa syntaxe simple et ses capacités puissantes, est un excellent langage pour démontrer la POO. Reprenons l'exemple de notre classe "Chien" :

Ici, nous avons défini une classe "Chien" avec des attributs "race" et "couleur", et une méthode aboyer(). Nous avons ensuite créé un objet mon_chien à partir de la classe "Chien" et utilisé ses attributs et ses méthodes. Plutôt sympa, non ?

Java et l'art de la programmation orientée objet

Java est un pilier dans le monde de la POO. Voyons à quoi ressemblerait la classe Chien en Java :

Java est un peu plus verbeux que Python, mais les concepts restent les mêmes. Nous avons défini une classe Chien avec des attributs et des méthodes, et créé un objet monChien à partir de cette classe.

C++ et la programmation orientée objet

Le C++, un langage puissant à la syntaxe complexe, offre un support solide à la POO. L'utilisation de classes et d'objets est au cœur du C++. Voyons à quoi ressemblerait notre fidèle classe Chien en C++ :

Dans ce code, nous faisons la même chose que dans les deux autres langages précédents, toujours la création, l'instanciation et l'utilisation d'une classe.

La syntaxe et la structure du C++ peuvent sembler un peu intimidantes, surtout si vous venez d'un langage comme Python ou PHP, mais les principes de la POO restent cohérents.

PHP et l'objet

PHP, conçu à l'origine comme un langage de script pour le web, supporte également la programmation orientée objet et l'utilise largement. Revenons sur notre classe Chien en PHP :

Nous faisons encore une fois exactement la même chose que précédemment, création, instanciation et l'utilisation d'une classe et ses méthodes.

Comme vous pouvez le constater, la structure est assez similaire à celle d'autres langages de programmation orientée objet. Cela montre la beauté et la cohérence de la programmation orientée objet POO à travers différents langages. Même si la syntaxe varie, les principes sous-jacents restent les mêmes.

A noter qu'ici, les attributs sont affichés comme étant "public", ce que l'on ne fait normalement jamais, on accède aux attributs via des méthodes, et les attributs restent en "privé" ("private" en anglais, et oui, on ne code pas en français).

Différences entre la programmation orientée objet et les autres paradigmes de programmation

Maintenant que nous avons acquis une bonne base de la POO, il est temps de passer à l'épreuve de force. Opposons nos nouvelles connaissances à d'autres paradigmes de programmation et voyons ce qu'il en est.

Programmation procédurale vs POO : la vieille garde contre le nouveau venu

Vous vous souvenez de ces vieux films en noir et blanc ? La programmation procédurale est un peu comme ça : classique, directe et un peu linéaire. Il s'agit d'écrire une liste d'instructions que l'ordinateur doit suivre, étape par étape. C'est un peu comme une recette de cuisine : faites ceci, puis ceci, puis cela.

La programmation orientée objet, en revanche, ressemble à un film moderne avec de multiples intrigues et flashbacks. Il s'agit de créer des objets, de définir leurs attributs et de décider des actions qu'ils peuvent entreprendre. L'accent est mis sur les objets et leurs interactions, et non sur la séquence d'actions.

Programmation fonctionnelle vs POO : le mathématicien contre le réaliste

La programmation fonctionnelle est comme un mathématicien pur : elle aime l'immuabilité, évite les effets de bord et traite les fonctions comme des citoyens de première classe. Imaginez une bibliothèque parfaitement organisée où chaque livre est toujours à sa place et où vous n'êtes pas autorisé à apporter vos propres livres (ou à modifier ceux qui sont déjà là).

La programmation orientée objet, en revanche, est comme une ville animée : elle se nourrit d'interactions, de changements et de modélisation du monde réel. Il s'agit d'encapsuler les données et le comportement dans des objets et de les laisser interagir, tout comme les habitants d'une ville.

Avantages et inconvénients de la distribution en boucle : le bon, la brute et le truand

Comme toutes les technologies dans le monde du développement, la programmation orientée objet POO à sont lot de fan et ses détracteurs, voyons quelques-uns de ses avantages et de ses inconvénients

Avantages de la POO

  • Modularité : La programmation orientée objet vous permet de décomposer votre programme en petits morceaux, ce qui facilite l'écriture, la maintenance et la réutilisation du code.
  • Abstraction : La programmation orientée objet cache les détails complexes et ne montre que les caractéristiques essentielles, ce qui la rend plus facile à comprendre et à utiliser.
  • Héritage : La programmation orientée objet permet aux classes d'hériter des caractéristiques d'autres classes, ce qui favorise la réutilisation du code.

Inconvénients de la POO

  • Consomation de ressources : La POO peut être plus plus consommatrices de ressources pour la machine qui fait tourner le code par rapport à un code procédural simple.
  • Complexité : L'accent mis sur l'abstraction et l'encapsulation peut rendre le code plus difficile à déboguer et l'architecture du système plus difficile à comprendre.
  • Ne conviens pas à tous les problèmes : Si la POO est idéale pour modéliser des systèmes complexes, elle n'est pas toujours adaptée aux tâches plus simples ou aux problèmes qui ne se prêtent pas naturellement à une approche orientée objet.
  • Le "codebase" peut parfois être très gros : En raisons de l'abstraction, on peut se retrouver avec une base de code (un "code base") bien plus gros et contenant bien plus de fichiers.

En fin de compte, le meilleur paradigme de programmation dépend du problème à résoudre, des exigences spécifiques du projet et des préférences du développeur. Comme un outil dans une boîte à outils, chaque paradigme a sa place, et la POO ne fait pas exception.

Comment débuter avec la POO ?

Maintenant que nous avons parcouru le sujet de la POO, vous avez peut-être envie de vous plonger dedans. Alors, voici quelques idées pour vous aider à vous lancer :

Ressources et outils recommandés pour apprendre la POO

Se lancer dans l'aventure de la POO peut être très passionnant, à condition d'avoir de bonnes ressources

  • Les livres : Si aimez la lécture, le livre "Head First Object-Oriented Analysis and Design" (Analyse et conception orientées objet) est un bon livre pour commencer. Il utilise un format visuellement riche pour stimuler votre esprit et rendre les sujets complexes plus accessibles.
  • Cours en ligne (payant) : Des sites web tels que Coursera, Udemy ou encore Codecademy proposent des cours sur la POO. Ces cours interactifs comprennent souvent des vidéos, des quiz et des exercices pratiques de code.
  • Tutoriels : Des sites web tels qu'Openclassroom, W3Schools ou encore Mozilla Developer Network (MDN) proposent des tutoriels complets sur la POO dans différentes langues.

En ce qui concerne les outils, un bon environnement de développement intégré (IDE) sera votre compagnon le plus important. Personnellement j'utilise beaucoup les "IDE" de chez Jetbrains, et le plus souvent PHPStorm, puisque je code beaucoup avec PHP.

Il y a d'autre environnement de développement, qui contrairement a ceux de Jetbrains sont gratuit, le plus connu est Visual studio code, si vous voulez allez dans l'univers Microsoft (car le C# est aussi de la POO), il y a Microsoft Visual Studio, que l'on retrouve souvent en entreprise, il dispose d'une version gratuite.

Conseils pour les débutants

En tant que débutant de la POO, voici quelques conseils à garder à l'esprit :

  • Commencez simplement : Commencez par les bases. Comprenez les classes, les objets, les attributs et les méthodes. Ensuite, passez à des concepts plus complexes comme l'héritage, le polymorphisme et l'abstraction.
  • Pratiquez, pratiquez, pratiquez : Plus vous codez, plus vous apprenez. Essayez de mettre en œuvre ce que vous apprenez dans de petits projets.
  • Demandez de l'aide : N'hésitez pas à demander de l'aide. Les sites Web comme StackOverflow regorgent de personnes prêtes à vous aider.
  • Soyez patient : Apprendre la POO, c'est comme apprendre une nouvelle langue. Il faut du temps pour la maîtriser. Ne vous précipitez pas et célébrez vos progrès.

Et c'est tout ! Avec ces ressources et ces conseils, vous pouvez vous lancer dans l'aventure de la POO. N'oubliez pas qu'il ne s'agit pas d'arriver rapidement à destination, mais de prendre le temps d'apprendre, de toute façon dans les métiers du dev et de la technologie, vous en apprendrez tout le temps.

Conclusion

Cet article touche à sa fin, j'ai tenté de vous donner les bases sur la POO, les objets (des classes instanciées, c'était pour vérifier si vous avez suivi...).

Sachez que dans le monde du dev, vous la retrouverez partout, enfin, sauf si vous utilisez Redux, là c'est de la fonctionnelle.

Bon courage et à la prochaine 😁