Maison  >  Article  >  Java  >  La programmation orientée objet n’est pas ce que vous pensez, ou du moins elle n’était pas censée être

La programmation orientée objet n’est pas ce que vous pensez, ou du moins elle n’était pas censée être

王林
王林original
2024-08-22 06:38:07564parcourir

Object-Oriented Programming is Not What You Think It Is, or at Least It Wasn’t Meant to Be

"Quand j'ai inventé le terme "orienté objet", laissez-moi vous dire que je ne pensais pas au C++. La grande idée est la "messagerie"... La clé pour créer de bons systèmes extensibles réside bien plus dans concevoir la manière dont vos modules communiquent entre eux plutôt que la manière dont leurs propriétés et comportements internes devraient être."
"Je regrette d'avoir inventé le terme "objet" il y a longtemps à propos de ce sujet, car il incite les gens à se concentrer sur une idée plus petite. La grande idée est la "messagerie"."
— Alan Kay, créateur du langage Smalltalk.

Lorsque nous apprenons la programmation orientée objet, la première chose qui nous est montrée est l'idée qu'une voiture a des attributs comme des portes et des roues, qu'un téléviseur a le comportement de s'allumer et de s'éteindre, qu'une maison a des fenêtres qui peuvent ouvrir et fermer. Mais les vrais systèmes sont loin de ressembler à ça.
Vous verrez un objet appelé HTTPRequest, mais vous n’en verrez pas un appelé télévision. Vous rencontrerez logMessage, mais pas house1Joao. Ou encore, ResourceManagement, fileSystem, etc. Et maintenant, quels comportements doivent avoir ces "objets" ?

L'idée des objets en tant que représentations d'objets du monde réel apparaît avant même Alan Kay avec le langage Simula. Les créateurs du langage, Ole-Johan Dahl et Kristen Nygaard, concevaient un langage destiné à simuler la réalité, comme les files d'attente, le trafic réseau, les processus de fabrication, etc. La programmation procédurale n'était pas adaptée pour résoudre ce type de problème.

C'est là que commence le besoin d'une forme de programmation qui vous permette de vous concentrer sur ce qui compte vraiment et de laisser la mise en œuvre sous le capot. Imaginez devoir construire un système robuste et vaste en pensant davantage aux détails du code qu'au problème lui-même. Sans oublier que le nombre de fonctions qu’un code pouvait avoir était suffisamment grand pour devenir un enchevêtrement déroutant et obscur.

Ils ont fait le premier pas en faisant abstraction des concepts inutiles en programmation.

"Mais c'est exactement la POO moderne !" Vous pourriez vous exclamer. Eh bien, oui et non. L'implémentation du langage Simula pour ce paradigme était différente. L'accent n'était pas mis sur les systèmes réutilisables et flexibles mais sur la modélisation des événements et des processus.
L'héritage était simple. L'accent était mis sur le raffinement et la spécialisation des procédures plutôt que sur la flexibilité et les hiérarchies.
L'encapsulation était basique. Il n'y avait aucun concept de modificateurs d'accès comme privé, public et protégé.
Fondamentalement, l’idée était d’organiser le chaos du code en packages avec des définitions plus claires.

Quelque temps plus tard, chez Xerox, Alan Kay a eu son idée des messages. Au même Xerox qui a créé l'infographie et Smalltalk.
Son idée était fondamentalement de considérer les objets comme des êtres vivants, non pas comme des animaux ou des humains, mais comme des cellules. (Alan Kay était biologiste de formation.)
Les tissus vivants fonctionnent parfaitement grâce à la communication entre les cellules. Ils ont leurs fonctions très bien définies et savent répondre aux « messages » qu’ils reçoivent des autres cellules.
L’idée était de créer des objets dont la fonction était de savoir répondre à leur manière aux messages. Il n'est pas nécessaire, et cela ne devrait pas être le cas, de savoir comment la réponse de l'objet est implémentée. La seule chose que vous devez savoir est quel type de message l’objet comprend. (En fait, l'ensemble des messages que vous pouvez « envoyer » à l'objet s'appelle une interface.)
Par exemple, qu'attendez-vous que l'objet somme renvoie lorsque vous envoyez le message « 2 + 2 » ?
Ah, oui. Dans Smalltalk, tout est objet, y compris les messages.
Oui, je sais, c'est fou. Objets communiquant via des objets qui contiennent d'autres objets. Mais c'est l'idée.
"D'accord, et comment cela aide-t-il à créer des systèmes réutilisables et extensibles ?"
Les systèmes logiciels ressemblent plus à un câblage qu’à un fichier. Et c'est la distinction qu'Alan Kay fait.
Pour lui, il faut se soucier de savoir si les fils sont connectés aux bons pôles et non de la façon dont un fichier est organisé.

Conclusion

La programmation orientée objet, telle que conçue par Alan Kay, ne consistait pas seulement à organiser le code en structures qui imitent le monde réel, mais également à créer des systèmes qui communiquent efficacement via des messages. Bien que la POO moderne ait évolué à partir des idées initiales de Simula et ait gagné en popularité avec des langages comme C++ et Java, le véritable objectif de cette approche, qui est la communication entre les objets, a souvent été dilué.

Comprendre la vision originale de Kay peut nous amener à reconsidérer la façon dont nous concevons et construisons des logiciels aujourd'hui. Au lieu de nous concentrer uniquement sur la structure interne des objets et les hiérarchies de classes, nous devrions également valoriser la simplicité et la flexibilité que peut apporter une communication bien conçue entre les modules.

Revenir aux racines de la POO peut nous aider à développer des systèmes plus résilients, modulaires et faciles à étendre. Après tout, comme nous le rappelle Kay, la « grande idée » ne concernait pas les objets eux-mêmes, mais la façon dont ils communiquent.


Sources :

  1. Alan Kay, « The Early History of Smalltalk », dans History of Programming Languages, 2e éd., édité par Thomas J. Bergin et Richard G. Gibson, Addison-Wesley, 1996, pp. 511-578.
  2. Kristen Nygaard et Ole-Johan Dahl, "The Development of the SIMULA Languages", dans History of Programming Languages, 1ère éd., édité par Richard L. Wexelblat, Academic Press, 1981, pp. 439-493.
  3. Bjarne Stroustrup, Le langage de programmation C++, Addison-Wesley, 2013, Préface et Chapitre 1.
  4. Ok, Alan. « La signification de la « programmation orientée objet ». » Courriel à Stefan Ram, 2003.

P.S. : Cet article a été rédigé par Moisés Cristiano et édité par ChatGPT.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn