Si vous avez fait de la programmation pour débutants, ou même commencé à étudier différents langages, vous avez probablement rencontré l'expression "programmation orientée objet" (ou "OOP").
Il existe toutes sortes d'explications techniques sur ce que c'est, mais aujourd'hui, nous allons jeter un coup d'œil à la définition simple de la programmation orientée objet.
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 parce que le programmeur définirait un ensemble très spécifique de procédures que l'ordinateur entreprendrait.
Au début, 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 d'étapes de base, les langages procéduraux peuvent devenir difficiles à gérer. C'est là qu'intervient la programmation orientée objet.
Alors, qu'est-ce que la programmation orientée objet ?
Le premier langage orienté objet (généralement accepté comme Simula) a introduit l'idée d'objets . Les objets sont des collections d'informations qui sont traitées comme une entité singulière.
Nous approfondirons ce que cela signifie réellement dans une seconde avec un exemple, mais nous devons d'abord parler des classes . Les classes sont un peu comme des pré-objets. Ils contiennent une liste d'attributs qui, une fois 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 :
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 peut également avoir des méthodes ou des fonctions.
Qu'est-ce qui le rend tellement meilleur que l'approche procédurale ?
En bref, les langages de programmation orientés objet (comme Java) facilitent l'organisation des données et du code d'une manière plus polyvalente pour les projets plus importants.
Pour en discuter un peu plus en détail, nous parlerons des quatre bases de la programmation orientée objet.
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 avez juste besoin de savoir que lorsque vous appuierez sur "On", vous obtiendrez un expresso.
Il en va de même pour les objets dans la 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 peut avoir besoin des variables de position initiale et de position finale. Il pourrait utiliser une autre méthode pour déterminer s'il a capturé une pièce.
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 de l'abstraction.
L'encapsulation est l'une des façons dont la programmation orientée objet crée de l'abstraction. Chaque objet est une collection de données qui est traitée comme une entité unique. 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 la variable de position privée et la méthode move() publique, un programmeur protège la variable de déplacement d'être affectée par quoi que ce soit d'autre. Et si la couleur est une variable privée, il n'y a aucun moyen pour un autre objet de la changer à moins qu'il n'y ait une méthode qui autorise le changement. (Ce que vous n'auriez probablement pas, 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.
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 parent, mais ils peuvent également contenir d'autres attributs.
Dans notre jeu d'échecs, les pions ont besoin d'une méthode qui peut les transformer en d'autres pièces s'ils arrivent au bout de l'échiquier. Nous l'appellerons la méthode transformPiece().
Toutes les pièces n'ont pas besoin de la méthode transformPiece(). Nous ne voudrions donc pas le mettre dans la classe Piece. 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é.
Mais il inclut également la méthode transformPiece(). Maintenant, nous n'avons plus à nous soucier 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 quand ils en ont besoin. (Cependant, il convient de noter qu'une dépendance excessive à l'héritage est mauvaise.)
Le polymorphisme est le résultat de l'hérédité. Comprendre pleinement le polymorphisme nécessite des connaissances en programmation, nous allons donc nous en tenir aux bases ici. 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 la nouvelle méthode move() dans la sous-classe Rook qui définit le mouvement comme un nombre illimité d'espaces vers l'avant, l'arrière, la gauche ou la 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 se déplacer. Cela vous fait gagner beaucoup de temps en essayant de déterminer laquelle des nombreuses méthodes vous devez utiliser.
Si votre tête tourne un peu après ces quatre dernières définitions, ne vous inquiétez pas trop. Voici les principaux éléments dont vous devez vous souvenir :
Si vous pouvez vous souvenir de ces points, vous aurez une bonne idée de ce qu'est la programmation orientée objet. Les quatre bases de la programmation orientée objet, comme je l'ai mentionné, 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 des généralités dans cet article. Différents langages orientés objet auront leurs propres bizarreries et façons de faire bouger les choses. Une fois que vous aurez choisi le langage qui vous convient, vous commencerez à apprendre comment il met en pratique les principes de la POO.
Ensuite, apprenez à organiser votre code orienté objet.