Qu'est-ce que la programmation orientée objet ?

Topic : Programmation   | Publié il y a 4 mois

Si vous débutez dans la programmation, ou même commencé à apprendre différents langages, vous rencontrerez probablement l’expression «programmation orientée objet» (ou «POO»).

Il existe toutes sortes d’explications techniques, mais nous allons aujourd’hui nous intéresser à la définition de la programmation orientée objet d’une manière simple. 

La programmation orientée objet (POO) est devenue l'un des éléments constitutifs de la programmation, qui remplace ou améliore la programmation procédurale. Alors que l'idée plus traditionnelle de la programmation procédurale place l'action et la logique au centre, la POO utilise des objets et des données pour produire des résultats.

Au niveau le plus simple, la POO se concentre sur les objets qu'un programmeur souhaite modifier plutôt que sur les actions nécessaires pour effectuer ce changement. Cela facilite l'exécution d'analyses de code par les programmeurs et ces objets sont réutilisables dans d'autres projets.

La majorité des langages de programmation modernes tels que C ++, Object Pascal, Java et Python combinent à la fois la programmation orientée objet et la programmation procédurale, ce qui signifie que la programmation orientée objet est devenue une évolution très importante dans le monde de la programmtion.

La programmation orientée objet est le modèle de programmation de choix depuis une décennie ou plus. La conception modulaire de la programmation orientée objet permet aux programmeurs de créer des logiciels en morceaux gérables plutôt qu'en grandes quantités de code séquentiel.

L’un des grands avantages de la programmation orientée objet est l’évolutivité, les objets et les définitions n’ayant aucune limitation finie. En outre, la séparation des données de la méthode évite les problèmes courants rencontrés dans les anciens langages logiciels linéaires. Si un bug apparaît dans un code linéaire, il peut être traduit par un système et créer de nombreuses erreurs difficiles à tracer. Inversement, un programme POO, avec une séparation de la méthode et des données, n’est pas sujet à de telles erreurs proliférées.

Avant de commencer: Programmation Procédurale

Pour comprendre ce qu'est un langage de programmation orienté objet, vous devez comprendre ce qu'il a remplacé. Les premiers langages de programmation étaient procéduraux - ainsi appelés, car le programmeur définirait un ensemble très spécifique de procédures que l'ordinateur entreprendrait.

Au paravant, les procédures étaient écrites sur des cartes perforées. Ces étapes prenaient des données, effectuaient une séquence d'actions sur ces données, puis produisaient de nouvelles données.Les langages procéduraux ont bien fonctionné pendant un certain temps (et certains sont encore utilisés). Mais lorsque vous souhaitez programmer quelque chose au-delà d'une séquence élémentaire d'étapes, les langages procéduraux peuvent devenir difficiles à gérer. C’est là que la programmation orientée objet entre en jeu.

L'objet de la programmation orientée objet

Alors, qu'est-ce que est la programmation orientée objet ?

Le premier langage orienté objet (généralement accepté comme étant Simula) a introduit la notion d'objets. Les objets sont des ensembles d'informations traités comme une entité singulière.

Nous allons approfondir ce que cela signifie réellement dans un instant avec un exemple, mais nous devons d’abord parler de cours. Les classes sont un peu comme des pré-objets. Ils contiennent une liste d'attributs qui, lorsqu'ils sont définis, deviennent un objet.

Prenons l’exemple de la programmation d’un jeu d’échecs. Nous pourrions avoir une classe appelée Piece. Dans Piece, nous avons une liste d'attributs :

  • Couleur
       la taille
       Forme
       Mouvement autorisé
  •  

Un objet définit simplement une instance particulière d'une chose appartenant à cette classe.

Nous pourrions donc avoir un objet appelé WhiteQueen. Cet objet aurait des définitions pour les quatre attributs (blanc, grand, cylindrique avec des créneaux, n'importe quel nombre d'espaces dans n'importe quelle direction). Il pourrait aussi avoir des méthodes ou des fonctions.

Qu'est-ce qui rend cela tellement mieux que l'approche procédurale ?

En bref, les langages de programmation orientés objet (tels que Java) facilitent l’organisation des données et du code d’une manière plus polyvalente pour les projets plus volumineux.

Pour en discuter un peu plus en détail, nous aborderons les quatre bases de la programmation orientée objet.

Programmation Orientée Objet: Abstraction

Ce n’est pas parce que vous voulez utiliser quelque chose que vous devez savoir comment cela fonctionne. Une machine à expresso, par exemple, est complexe. Mais vous n’avez pas besoin de savoir comment cela fonctionne. Vous devez juste savoir que lorsque vous appuyez sur «On», vous obtiendrez un expresso.

Il en va de même pour les objets en programmation orientée objet. Dans notre exemple d'échecs, nous pouvons avoir une méthode move(). Cette méthode pourrait nécessiter beaucoup de données et d’autres méthodes. Il pourrait avoir besoin des variables de position initiale et finale. Il pourrait utiliser une autre méthode pour déterminer si un morceau a été capturé.

Mais vous n’avez pas besoin de le savoir. Tout ce que vous devez savoir, c'est que lorsque vous dites à la pièce de bouger, elle bouge. C’est une abstraction.

Programmation orientée objet: Encapsulation

L'encapsulation est l'un des moyens par lesquels la programmation orientée objet crée de l'abstraction. Chaque objet est une collection de données traitées comme une seule entité. Et dans ces objets se trouvent des données, à la fois des variables et des méthodes.

Les variables d’un objet sont généralement gardées privées, ce qui signifie que les autres objets et méthodes ne peuvent pas y accéder. Les objets ne peuvent être affectés qu'en utilisant leurs méthodes.

Un objet Bishop peut contenir plusieurs informations. Par exemple, il pourrait avoir une variable appelée «position». Cette variable est nécessaire pour utiliser la méthode move(). Et bien sûr, il a une couleur.

En rendant privée la variable de position et la méthode move(), un programmeur protège la variable de déplacement de toute autre chose. Et si la couleur est une variable privée, il n’est pas possible pour un autre objet de la changer sauf s’il existe une méthode permettant cette modification. (Ce que vous n’auriez probablement pas eu, car la couleur de la pièce devrait rester constante.)

Ces variables et méthodes sont conservées dans l'objet Bishop. Parce qu’ils sont encapsulés, un programmeur peut modifier la structure ou le contenu de l’objet sans se soucier de l’interface publique.

Programmation orientée objet: héritage

En plus des classes, les langages de programmation orientés objet ont également des sous-classes. Ceux-ci contiennent tous les attributs de la classe parente, mais ils peuvent également contenir d'autres attributs.

Dans notre jeu d'échecs, les pions ont besoin d'une méthode qui les transforme en d'autres morceaux s'ils parviennent au bout du plateau. Nous l'appellerons la méthode transformPiece().

Toutes les pièces n'ont pas besoin de la méthode transformPiece(). Donc, nous ne voudrions pas le mettre dans la classe Pièce. Au lieu de cela, nous pouvons créer une sous-classe appelée Pawn. Comme il s’agit d’une sous-classe, elle hérite de tous les attributs de Piece. Ainsi, une instance de la sous-classe Pawn inclut une couleur, une hauteur, une forme et un mouvement autorisés.

Mais il inclut également la méthode transformPiece(). Maintenant, nous n’avons plus jamais à craindre d’utiliser accidentellement cette fonction sur une tour.

Voici une explication technique :

La création de sous-classes permet également de gagner beaucoup de temps. Au lieu de créer de nouvelles classes pour tout, les programmeurs peuvent créer une classe de base, puis l’étendre à de nouvelles sous-classes selon leurs besoins. (Cependant, il convient de noter que le recours excessif à l'héritage est mauvais.)

Programmation orientée objet: polymorphisme

Le polymorphisme est le résultat d'un héritage. Bien comprendre le polymorphisme nécessite quelques connaissances en programmation, nous allons donc nous en tenir aux bases. En bref, le polymorphisme permet aux programmeurs d'utiliser des méthodes du même nom, mais avec des objets différents.

Par exemple, notre classe Piece peut avoir une méthode move() qui déplace une pièce d'un espace dans n'importe quelle direction. Cela fonctionne pour la pièce maîtresse, mais pas pour autre chose. Pour résoudre ce problème, nous pouvons définir une nouvelle méthode move() dans la sous-classe Rook qui définit le mouvement comme un nombre illimité d'espaces en avant, en arrière, à gauche ou à droite.

Désormais, lorsqu'un programmeur invoque la méthode move() et utilise une pièce comme argument, le programme saura exactement comment la pièce doit être déplacée. Cela vous fait gagner beaucoup de temps à essayer de déterminer laquelle des nombreuses méthodes différentes vous devriez utiliser.

Programmation orientée objet en quelques mots

Si votre tête tourne un peu après ces quatre dernières définitions, ne vous inquiétez pas trop. Voici les principales choses à retenir:

   La programmation orientée objet rassemble des informations en entités uniques appelées objets.
   Chaque objet est une instance unique d'une classe.
   L'abstraction cache le fonctionnement interne d'un objet lorsqu'il n'est pas nécessaire de le voir.
   Encapsulation stocke les variables et méthodes associées dans des objets et les protège.
   L'héritage permet aux sous-classes d'utiliser les attributs des classes parentes.
   Le polymorphisme permet aux objets et aux méthodes de gérer plusieurs situations différentes avec une seule interface.

Si vous vous souvenez de ces points, vous maîtriserez bien ce qu'est la programmation orientée objet. Comme je l'ai mentionné, les quatre bases de la programmation orientée objet peuvent être un peu difficiles à maîtriser. Mais une fois que vous aurez commencé à programmer, ils deviendront plus clairs.

N'oubliez pas que nous n'avons abordé que les généralités dans cet article. Différents langages orientés objet auront leurs propres bizarreries et moyens de faire bouger les choses. Une fois que vous aurez choisi le langage qui vous convient, vous commencerez à comprendre comment cela met en pratique les principes de la programmation orientée objet.