Programmation orientée objet: pourquoi «orientée»?

14

Je suis à peu près à travers mon diplôme de programmation de jeux. Ce n'est pas un diplôme en informatique, donc une grande partie de la théorie est rejetée en faveur de la construction de portefeuille pratique et de ce que je considère comme l'apprentissage JIT, ce qui est apparemment plus important dans l'industrie des jeux. Le premier sujet était "Introduction à la programmation orientée objet".

Cette phrase ne m'a pas dérangé jusqu'à ce que j'apprenne les différents paradigmes de programmation (je reçois cette liste sur https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Impératif
  • Fonctionnel
  • De procédure
  • Structuré
  • Evénementiel
  • Orienté objet
  • Déclaratif
  • Basé sur les automates

Je comprends que ce n'est pas une liste exhaustive, et que tous ces concepts ne sont pas égaux, et la plupart d'entre eux ne sont même pas exclusifs, mais je ne comprends pas pourquoi la plupart d'entre eux ne reçoivent qu'un seul mot - impératif; fonctionnel; déclarative - mais quand nous parlons de programmation avec des objets, nous devons clarifier que nous sommes orientés autour de ces objets. Ne pouvons-nous pas simplement utiliser des objets? Ne pouvons-nous pas simplement avoir des objets? Pourquoi doivent-ils nous orienter , notre étoile directrice?

En regardant ici ( https://en.wikipedia.org/wiki/Object-oriented_programming ), nulle part l'utilisation du terme "orienté" n'est adressée comme son propre terme. Seul "objet" est expliqué.

De plus, je peux voir pour des raisons pratiques pourquoi Event-Driven est utilisé, car la programmation d'événements est déjà une chose que vous faites lorsque vous organisez une conférence, et la programmation des automates donne l'impression que vous configurez une ligne de production robotique, il est donc utile d'y ajouter des mots de clarification.

Qu'est-ce qui rend la programmation d'objets, en tant que phrase, insuffisante pour décrire ce que nous faisons lorsque nous utilisons des objets dans notre programmation?

Évidemment, d'après mon ton, je n'aime pas trop le mot «orienté». Cela me rappelle mon temps en tant que sténographe judiciaire, écoutant avocat après avocat utiliser l'expression "en relation avec" comme une sorte de tic-tac verbal. Cela ne voulait rien dire; c'était juste un terme qu'ils utilisaient pour remplir l'air pendant qu'ils essayaient de penser à quoi dire ensuite. Cependant, je n'essaie pas de préconiser un changement de langue, je demande simplement pourquoi c'est ainsi. Si quelqu'un sait pourquoi cela a été connu de cette façon pour des raisons purement historiques et résiduelles, alors c'est la réponse. Ce sera des munitions si jamais je décide de perdre mon temps à plaider pour un changement de langue.

D'un autre côté, s'il existe effectivement une raison utile pour laquelle un langage ou un morceau de code doit pointer vers des objets, à l'exclusion de toutes les autres directions, au lieu de simplement les avoir dans sa ceinture d' outils , en tant qu'outils , je serais vraiment intéressé à en savoir plus. J'aime apprendre des choses utiles.

Excrubulent
la source
11
Je suppose que "Objectivement" ou "Objectionnel" ne donnerait pas la bonne impression de ce que l'on veut vraiment dire ;-)
Doc Brown
J'ai considéré "Objectified", mais j'ai décidé que cela pourrait aussi donner la mauvaise ambiance.
Excrubulent
1
Je pense que "objet" est l'erreur, pas "orientée". Ce que nous appelons orienté objet est généralement orienté classe.
Steve314
1
Tous les fans de Phoenix Wright veulent simplement l'appeler "OBJECTION !! Programmation"?
Katana314

Réponses:

24

Je crois que vous lisiez façon trop en une simple construction grammaticale. Jetez un œil à votre liste de paradigmes, classés différemment pour une raison que nous verrons bientôt:

  • Impératif
  • Fonctionnel
  • De procédure
  • Structuré
  • Déclaratif
  • Evénementiel
  • Basé sur les automates
  • Orienté objet

Qu'est-ce que tous ces mots ont en commun? Ce sont tous des adjectifs car ils sont destinés à modifier le mot "programmation". De plus, à l'exception de «impératif», ce ne sont pas tous des adjectifs «naturels», mais des noms «adjectifiés» - des noms qui décrivent en fait le cœur du paradigme: fonction, structure, automates et objet.

Et il y a deux manières différentes dont les noms sont adjectifiés: à travers un suffixe comme -al ou -ed, ou à travers la création d'un mot composite à l'aide d'un trait d'union. Maintenant, comme Doc Brown l'a souligné, les suffixes qui pourraient être utilisés pour adjectifier "objet" ont un sens différent. Ce qui laisse de la composition.

Et je soutiens que c'est une pure coïncidence ou goût qu'Alan Kay a choisi d'utiliser "orienté" pour son adjectif composite "orienté objet". Il aurait tout aussi bien pu être «piloté par un objet» ou «basé sur un objet», et vous pourriez également en lire trop. "Conduit" ne ressemble-t-il pas à une sorte d'obsession malsaine?

Michael Borgwardt
la source
1
Excellent point (même si je pense que vous voulez dire des adjectifs, pas des adverbes - "programmation" dans ce contexte est un substantif).
JW01
@ JW01: oups, vous avez raison
Michael Borgwardt
C'est en fait un très bon point - le mot "orienté" donne à l'expression un sens différent à "programmation d'objet", parce que le mot "objet" en soi n'est pas un adjectif. En fait, je dirais que la raison pour laquelle "orienté" a été choisi par-dessus d'autres mots était pour l'allitération. De plus, je n'y lisais rien, j'exagérais pour faire valoir qu'il y a ce mot "orienté" qui se trouve là complètement inexpliqué et incontesté dans la littérature, ce qui m'a fait me demander s'il faisait vraiment quelque chose pour gagner sa place. . : P
Excrubulent
Je me demande pourquoi il n'a pas choisi obsédé par les objets ... oh ouais, ce ne sont que les fanatiques qui ne savent pas quand s'arrêter. ;-)
Deduplicator
Il y a un livre d'un auteur polonais, Jerzy Grębosz, intitulé "Symfonia C ++" ("La symphonie en C ++") dans lequel l'auteur essaie de donner un sens à cette phrase de manière intéressante: il dit qu'elle s'appelle " orienté objet "car le code peut" s'orienter "en fonction de l'objet sur lequel il travaille actuellement (comportement polymorphe). Il distingue cela des langages dans lesquels il n'y a qu'un simple concept d '"objets" comme éléments de données. Il n'y a aucune preuve historique que c'était le sens d'origine, mais c'est tout à fait explicatif même en tant qu'explication post-factum.
BarbaraKwarc
18

mais quand nous parlons de programmation avec des objets, nous devons clarifier que nous sommes orientés autour de ces objets. Ne pouvons-nous pas simplement utiliser des objets? Ne pouvons-nous pas simplement avoir des objets?

Franchement, c'est une trace de l'histoire. La programmation fonctionnelle est vraiment une programmation orientée fonction, la programmation déclarative est vraiment une programmation orientée déclaration ... après tout, n'utilisons-nous pas seulement des fonctions? Ne pouvons-nous pas simplement avoir des fonctions?

"Orienté objet" roule mieux sur la langue et est historiquement enraciné.

L '«orientation» vient du fait que nous ne parlons pas de programmation mais de design. Ce n'est pas parce que nous utilisons des objets, des fonctions ou des événements que notre méthodologie de conception se fait en modélisant les trois. En spécifiant l'orientation de la méthodologie de conception, il aide à communiquer aux programmeurs comment ils doivent interpréter et étendre cette conception - comment le focus de modélisation colore l'implémentation.

Telastyn
la source
Il semble donc que vous disiez que "orienté objet" est une sorte de déclaration de politique avec un phrasé redondant, tout comme "proactif" a essentiellement la même signification que "actif", il y a juste un préfixe redondant attaché à faire sûr que l'auditeur ne manque pas le sens.
Excrubulent
1
Je pense que vous avez vraiment mis le doigt dessus: nous faisons de la conception orientée objet, et c'est pourquoi les langages sont orientés objet - pour nous permettre d'exprimer cette conception.
K.Steff
1
@Excrubulent Non, l'ajout de "orienté" le rend plus spécifique. «Orienté objet» signifie que nous ne discutons pas de détails sur la programmation d'objets, mais plutôt sur la façon de concevoir des programmes afin qu'ils utilisent les objets de manière significative. La "programmation d'objet", la "programmation de fonction" ou la "programmation de déclaration" se référeraient spécifiquement à la mise en œuvre de ces concepts spécifiques au lieu des principes de conception. "Fonctionnel" et "déclaratif" sont des mots avec des suffixes qui tentent de transmettre la même signification, mais pour les objets "objectifs" ou "objectifs" n'auraient pas beaucoup de sens.
Ilari Kajaste
Et comme Michael Borgwardt a répondu , le mot "orienté" n'a rien de spécial. Il pourrait également être "piloté" ou "basé". Le point important est qu'il ne peut pas s'agir de "programmation d'objet". (Eh bien, le laguange est toujours fluide, donc il pourrait , mais il ne serait tout simplement pas aussi descriptif.)
Ilari Kajaste
J'ai changé de réponse parce que la réponse de Michael Borgwardt explique en fait le sens du mot et comment il modifie l'expression.
Excrubulent
2

L'appeler pour aider à expliquer que les objets sont une partie très importante du paradigme.

La programmation orientée objet a ses racines dans Simula , qui était essentiellement ALGOL plus quelques nouvelles fonctionnalités de programmation objet. Et conformément à cette histoire, même aujourd'hui, il est tout à fait possible dans de nombreux langages (même les "langages OO purs") de coder quelque chose qui n'est essentiellement qu'un programme procédural avec quelques objets. Mais cela est considéré comme un mauvais style par les développeurs plus expérimentés.

En fait, faire quelque chose "de la manière orientée objet" est très différent de "la manière procédurale". Le concept le plus important est l'utilisation de l'hérédité et du polymorphisme. Lorsque vous comprenez et intériorisez vraiment le fonctionnement des classes et des méthodes virtuelles, c'est une expérience révélatrice qui change la façon dont vous écrivez du code dans de nombreux cas, un véritable changement de paradigme. (En supposant, bien sûr, que vous avez commencé par écrire du code procédural en premier. Beaucoup d'étudiants de nos jours vont directement à Java ou C # comme première langue, et à l'OMI, ils ne comprennent pas vraiment les avantages de l'OO en le faisant.)

Nous l'appelons programmation orientée objet car un programme écrit en style OO ne contient pas seulement des objets; la structure de l'ensemble du programme est basée sur eux et sur la façon dont ils fonctionnent.

Mason Wheeler
la source
C'est une réponse similaire à celle de Telastyn, sauf que vous semblez impliquer que la "programmation orientée objet" en tant que terme est en fait fondamentalement différente de la "programmation objet". Pouvez-vous expliquer en quoi ils pourraient être différents? Je veux dire, il me semble que OOP est un terme assez lâche pour que OP remplisse également la même fonction.
Excrubulent
2
De nos jours, de nombreux étudiants passent directement à Java ou C # en tant que première langue, et à l'OMI, ils ne comprennent pas vraiment les avantages de l'OO. - En fait, j'ai commencé sur C ++, et dans ma première mission, j'ai utilisé un mélange d'objets et de fonctions, mais j'ai été marqué pour mon utilisation des fonctions. Certaines de ces fonctions étaient purement fonctionnelles et ne bénéficiaient pas du tout de l'encapsulation dans un objet, mais d'autres qui prenaient des pointeurs vers des variables pour fonctionner (c.-à-d. Des informations d'état modifiées) devenaient beaucoup plus faciles à créer et à appeler une fois qu'elles étaient dans un objet, donc j'en ai vu les deux côtés.
Excrubulent