Comment expliquer les concepts de POO à une personne non technique?

10

J'essaie souvent d'éviter de dire aux gens que je suis programmeur parce que la plupart du temps je finis par leur expliquer ce que cela signifie vraiment. Quand je leur dis que je programme en Java, ils posent souvent des questions générales sur le langage et en quoi il diffère de x et y. Je ne suis pas non plus doué pour expliquer les choses parce que 1) je n'ai pas beaucoup d'expérience dans le domaine et 2) je déteste vraiment expliquer les choses à des personnes non techniques.

Ils disent que vous comprenez vraiment les choses une fois que vous les expliquez à quelqu'un d'autre, dans ce cas, comment expliqueriez-vous la terminologie et les concepts de la POO à une personne non technique?


la source
Est-ce que quelqu'un avec accès peut l'ajouter comme wiki communautaire? Merci.
2
J'ai vu cette même question presque mot pour mot à quelques reprises maintenant.
1
@Michael pouvez-vous poster quelques liens?
1
Liés ou dupliqués: programmers.stackexchange.com/questions/4123/…
Maniero
Pour comprendre les modèles de conception (et donc la POO), consultez shop.oreilly.com/product/9780596007126.do le livre le plus intuitif à ce sujet
cl-r

Réponses:

27

J'essaie généralement de décrire la programmation orientée objet en utilisant des exemples du monde réel.

Par exemple, je pourrais dire qu'une classe appelée Vehicledécrit les choses minimales qu'un véhicule est. Je vais demander à la personne de me dire ce qu’elle pense qu’un véhicule est. Parfois, ils disent des choses comme "Eh bien, comme une voiture ou un camion", et je hoche la tête et je suis d'accord avec eux. Je demanderai ensuite quelles sont les différences entre une voiture et un camion. Parfois, ils mentionnent la taille, parfois le but et d'autres choses.

Ensuite, je leur demanderai d'oublier une voiture ou un camion et je leur demanderai simplement de continuer à décrire un véhicule:

"Oh, ça bouge"

"Il a un opérateur ou un chauffeur"

etc...

Bientôt, nous savons ce qu'est un véhicule et j'ai dit que dans la POO, nous définirions un véhicule et, pour les besoins de l'argument, nous dirions qu'il peut se déplacer et lui donner une sorte de conducteur. Alors je vais demander, ok, alors qu'est-ce qu'une voiture a?

"Des portes"

"Les fenêtres"

Et puis un camion ....

"Portes" "fenêtres" "Plus de roues!"

Bientôt, après beaucoup de discussions, l'autre personne a généralement identifié:

1) Ce qui constitue un véhicule

2) Qu'est-ce qui constitue une voiture

3) Ce qui constitue un camion

4) Qu'est-ce qui constitue un avion.

Le tout sans aucun détail technique. Nous avons divisé les propriétés de chacun dans les bonnes zones. Ils comprennent l'héritage ("Oui, une voiture est un véhicule, un camion est un véhicule, mais une voiture n'est pas un camion, c'est SIMPLE, duh!").

Ils comprennent même le polymorphisme, "Bien sûr, ils font essentiellement la même chose, mais cela pourrait le faire légèrement différemment.". Nous pouvons parler de comportement et où cela devrait vivre dans notre arbre d'objets.

Selon leur formation et leurs antécédents, certains l'obtiennent plus rapidement que d'autres. Mais quand je compare la POO à des objets réels, la plupart des gens l'obtiennent toujours. En fait, j'ai trouvé dans des conversations avec des gens non techniques des choses auxquelles je n'avais jamais pensé. Les véhicules n'ont pas besoin d'être habités, par exemple (les drones), mais un programmeur aurait-il pensé à l'opérateur du véhicule comme une propriété de celui-ci? Je ne dis pas qu'il est bon ou mauvais de mentionner un opérateur, mais cela nous amène à réfléchir à ce que nous modélisons et à ce que nous essayons de réaliser lorsque nous développons un logiciel.

Maintenant, spécialisation partielle des modèles, d'autre part .... :)

Moo-Juice
la source
3
LOL +1 pour une bonne réponse, mais j'aimerais pouvoir vous en donner une autre pour une spécialisation partielle du modèle! J'ai tendance à utiliser des analogies animales, car l'hérédité est plus naturelle dans ce contexte. Enfer, vous pouvez même expliquer l'héritage multiple (double) de cette façon!
Chinmay Kanchi
Tout le monde utilise des voitures comme exemples. C'est pourquoi il est vraiment déprimant de travailler dans une base de code qui semble dépourvue de POO et qui concerne les voitures.
Erik Reppen
14

Les objets sont des noms, les méthodes sont des verbes.

k rey
la source
8
Assez effrayant, je dois expliquer cela assez fréquemment aux programmeurs.
Wyatt Barnett
7
Pas toujours. Par exemple: je m'oppose à votre méthode. ;)
Dan J
En JavaScript, les méthodes sont également des fonctions, des propriétés, des noms et des verbes ET.
Erik Reppen
3

Voici une version de ma réponse en conserve que je donne à la personne ultra non technique:

La programmation est une tentative de créer une représentation de la réalité sur l'ordinateur. Il existe déjà de nombreux outils et appareils qui le font déjà - pensez à la façon dont une feuille de calcul nous permet de représenter plus facilement la comptabilité ou les statistiques, ou comment une présentation Powerpoint nous permet de stocker et d'afficher nos présentations.

Parfois, nous devons intégrer des représentations personnalisées de la réalité dans des applications nouvelles ou existantes qui reflètent nos processus métier. Il existe de nombreuses façons de programmer, et l'une des façons les plus courantes de programmer est la programmation orientée objet, où le code que nous construisons est spécifiquement conçu pour reproduire les concepts de la réalité. Les «choses» ont en réalité des attributs et des comportements. Par exemple, un être humain a souvent les bras et les jambes, la couleur des cheveux, l'origine ethnique et peut souvent parler et marcher.

Parler et marcher peut prendre différentes formes, telles que la langue que l'on parle ou la vitesse ou la manière dont on marche.

Les êtres humains ont souvent des interactions avec d'autres types de «choses», qu'il s'agisse d'animaux, d'autres humains, d'autres organismes vivants ou d'objets inanimés. Il existe en réalité des thèmes qui ont souvent besoin d'un moyen d'être représentés, tels que les interactions entre les «choses», la catégorisation des choses, etc. Il existe une «logique métier» très compliquée qui doit être représentée dans le logiciel que notre organisation utilise.

La programmation orientée objet fournit un moyen de représenter avec précision ces "concepts du monde réel" et "logique métier".

-> Cette déclaration est généralement suffisante pour écarter leur curiosité (ou peut-être les ennuie aux larmes), mais s'ils ont plus de questions, la déclaration ci-dessus (je crois) jette une base décente pour où la conversation peut aller. Je ne pense pas vraiment que la personne non technique s'intéresse trop à la terminologie technique telle que "Abstraction", "Composition", "Polymorphisme", etc., mais si c'est le cas, le langage que j'ai utilisé dans la déclaration en conserve me permet pour tirer des exemples basés sur elle.

Tim Claason
la source
1

J'ai toujours appris la POO comme ceci:

Vous avez une horloge, et elle indique l'heure - eh bien, dans la programmation, vous mettez tout le code et tout ce que vous devez faire tous ensemble (cela semble assez évident, mais les gens ne le faisaient pas auparavant au début). Quoi qu'il en soit, cela s'appelle l' encapsulation .

Maintenant, vous avez une horloge, vous voudrez peut-être un réveil - eh bien, une fois que vous avez tous les éléments ensemble, vous pouvez y ajouter des choses pour le faire faire plus - comme régler l'alarme et la faire sonner. C'est ce qu'on appelle l' héritage .

De plus, vous regardez l'horloge que j'ai sur mon poignet, mais vous pouvez d'autres horloges qui ressemblent à une horloge grand-père ou une horloge numérique. Cela semble différent, mais c'est toujours une horloge - enfin, cela s'appelle le polymorphisme .

Et là, vous avez les 3 coins de la programmation orientée objet. Tout le reste n'est que du codage.

gbjbaanb
la source
1

Je leur dirais simplement de s'inscrire à un cours de POO s'ils veulent vraiment le comprendre.

Je veux dire, toutes ces analogies comme Car.startEngine (); sommes, avouons-le - pur rap. Lorsque j'ai commencé à utiliser la POO il y a de nombreuses années, j'ai trouvé que cela ne faisait qu'abréger davantage le domaine.

Au lieu d'expliquer simplement que la POO consiste à gérer la complexité des langages procéduraux, près de 80% des auteurs de livres de programmation supposent que les programmeurs sont des idiots sans idée qui doivent être parlés en termes simples (voir l'ironie ici?).

Oui, il est parfaitement normal d'expliquer les listes et les vecteurs, car c'est ce avec quoi nous travaillons principalement, pas Car.Engine et PoliceMan.Arrest (sauf si vous êtes un développeur de jeu, mais encore une fois, vous devez toujours avoir eu votre part du ancien).

Revenons au sujet, je leur dirais simplement que je crée des objets intangibles qui existent uniquement dans l'esprit du programmeur, à des fins de traitement de la paie / de jeu / de navigation par navette spatiale, etc.

S'ils ont encore des questions, arrêtez de discuter, car cela n'en vaut pas la peine. La plupart des gens ne parviennent pas à imaginer des notions abstraites et ont besoin d'exemples pour à peu près tout (ce qui signifie vraiment plus de simplification / spécialisation du sujet réel).

Jas
la source
+1 OO a été inventé chez Xerox SPARC précisément parce qu'ils pensaient que les Car.startEngine()choses rendraient la programmation simple pour tous et facile à comprendre pour les non-programmeurs ou les débutants. Eh bien, clairement, cela n'a pas fonctionné du tout ...
Ericson2314
1

J'ai parlé d'une conversation que j'ai eue avec ma femme à ce sujet, dans cette réponse ici: /software/45464/how-to-convince-non-programmer-his-notions-about- les ordinateurs ont tort / 45467 # 45467

EDIT: La question à laquelle j'ai répondu a été modérée, donc je vais reprendre ma réponse ici.

Assise dans un restaurant avec ma femme, elle m'a demandé "Que signifie Orienté Objet?"

J'ai commencé à parler de la réutilisation du code, de l'encapsulation et du polymorphisme, et à un moment donné, j'ai réalisé que ses yeux étaient finement vitrés.

J'ai donc sorti un paquet Splenda du conteneur. J'ai dit: "Voici un objet. Quelles sont ses propriétés?"

Elle a dit: "Il est rectangulaire, il est fait de papier, il contient des splenda, il est bleu, il y a une impression dessus."

J'ai ramassé un paquet de sucre. "Qu'est-ce qu'il a en commun avec celui-ci?"

Elle a dit: "La rectangulaire, le papier, qu'il y a de l'impression."

J'ai dit: "Qu'en est-il qu'ils contiennent tous les deux quelque chose de sucré?"

Elle a dit: "Bien sûr."

J'ai dit: "Donc, ce sont les deux exemples de ce que nous pourrions appeler un sachet d'édulcorant abstrait. Un sachet d'édulcorant platonique idéal, si vous voulez."

Elle a dit: "Bien sûr."

J'ai dit: "Et chacun a des propriétés héritées du paquet abstrait, puis des variations sur celui qui sont spécifiques à son type de chose."

Elle a dit: "D'accord. Oh! Et si je voulais faire, comme, un paquet de Saccharine, je prendrais le générique, et définirais les détails à ce sujet pour la Saccharine, et alors j'aurais ça!"

J'ai dit: "Bingo: programmation orientée objet".

Vous et moi savons qu'elle vient de se frayer un chemin vers le modèle de conception Factory. Peu importe. Il illustre l'héritage, l'encapsulation, l'identité de classe d'objet ... Du bon.

Dan Ray
la source
Drat. La réponse liée a été supprimée pour des "raisons de modération". Quelle ambiguïté inutile! :-(
Ogre Psalm33
@ OgrePsalm33 - J'ai grossièrement repris ma réponse.
Dan Ray
0

Cette question semble pouvoir être close, néanmoins ...

Comme la plupart des choses, la POO est en fait très simple à expliquer au niveau conceptuel. Les programmeurs modélisent des objets; et:

  • les objets ont un état (champs / membres de données)
  • les objets ont des actions (méthodes / fonctions)
  • les objets s'appuient les uns sur les autres (héritage)

Ce sont des centaines de détails plus fins, bien sûr. Mais si vous essayez simplement de donner à quelqu'un un aperçu de 10 secondes, je pense que c'est un bon début. Y a-t-il des concepts plus spécifiques que vous avez du mal à expliquer?

zourtney
la source
0

L'exemple du téléphone mobile:

Imaginez que vous êtes propriétaire d'une usine, vous voulez décrire un téléphone générique

  • Étape 1: répertoriez les propriétés génériques de ces téléphones , par exemple: taille, poids, couleur, etc.
  • Étape 2: Liste de ces fonctions génériques du téléphone , par exemple: passer un appel, recevoir un appel, envoyer des sms, etc.

Maintenant que vous avez votre "plan directeur" générique, créez-moi les téléphones suivants:

Téléphone 1:

  • Hauteur-> 102mm

  • Poids-> 85g

  • Couleur-> Rose

Téléphone 2:

  • Hauteur-> 125 mm

  • Poids-> 96g

  • Couleur-> Rouge

Nuit noire
la source
0

Je pense que la meilleure façon d'expliquer à un type non technique la POO est de la relier à eux.

Essentiellement, OOD et OOP veulent que vous pensiez au système que vous concevez et implémentez comme un monde de choses en interaction.

Permet donc, pour les besoins de l'argument (qui ne se passe jamais bien sur Internet), de dire que vous expliquez à OOD & P à un collecteur d'ordures. Son nom est Bob. Vous aviez l'habitude d'aller à l'école avec lui il y a 15 ans, vous l'avez rencontré dans un bar, et vous feignez tous les deux de vous intéresser à la vie de l'autre.

"Donc, John, tu dis que tu es un programmeur. Mon neveu est dans toutes ces bêtises. Continue à parler de programmation orientée objet, ou quelque chose comme ça. Qu'est-ce que tout cela?" Notez que Bob est britannique de la façon dont il a mal orthographié.

"Eh bien, Bob," répondez-vous, grimaçant de façon orientée. "C'est assez simple vraiment. Tu ramasses les ordures, non? Quoi, tu fais généralement ton travail?"

"Eh bien, je suis la camionnette en ville ramassant les ordures et les mettant dans la camionnette", répond Bob, perplexe.

et vous devrez écouter cela. Ce sont nos comportements. C'est essentiellement tout ce dont vous avez besoin pour la conception. La programmation orientée objet est essentiellement la façon dont vous implémentez la conception. Cela diffère d'une langue à l'autre. "

Bob s'est endormi dans sa bière. Tu t'en vas.

Matt Ellen
la source
1
Ah! La conduite par vote vers le bas. Lunatique dans ses charmes.
Matt Ellen
1
Pas mal ton histoire mec. Attachez-vous également des oignons à votre ceinture?
Donal Fellows
Seuls les gros jaunes, à cause de la guerre.
Matt Ellen
0

J'aime l'exemple de la voiture pour expliquer l'héritage (j'ai tendance à utiliser des animaux plutôt que des véhicules mais c'est la même idée) mais pour expliquer comment fonctionne un programme orienté objet, je me réfère à une analogie que j'ai lue une fois sur le site Web de Chris Crawford: le programme est comme une bureaucratie vraiment efficace. Tous les différents objets du programme sont comme les différents départements d'une bureaucratie; chaque département a ses propres tâches désignées, ils ont des entrées bien définies (à qui parler et quels formulaires remplir,) et d'autres départements ne savent souvent pas grand-chose de ce qui se passe à l'intérieur. Les RH sont comme une usine abstraite, l'informatique est un singleton, etc.

Obtenir un message d'erreur parce que vous avez tapé la mauvaise chose dans un programme informatique, c'est exactement comme remplir le mauvais formulaire à soumettre à un bureau.

jhocking
la source
0

La POO est une simplification grossière si quelque chose - une abstraction - du processus de pensée humaine et de la compréhension du monde pour projeter la fonctionnalité dans un «vide» numérique pour imiter les processus familiers et les classifications numériques. À bien des égards, il s'agit davantage de notre état de langage primitif que de «penser plus comme des ordinateurs».

Si la programmation imitait la réalité ou la pensée humaine, elle serait bien plus organique, chaotique et aléatoire - même latérale. Au lieu de cela, nous simplifions la réalité en petits pas, "logique 2 + 2", catégories brutes, petits outils réutilisables et raisonnement préhistorique.

Nous essayons toujours de trouver comment télécharger nos pensées et nos désirs dans un protocole et un langage commun et pour ma part, les historiens seront fascinés par sa grossièreté sophistiquée un jour - comme nous voyons maintenant les hiéroglyphes. Ce n'est pas du tout "intelligent" - cela met simplement en évidence comment nous ne pouvons pas facilement expliquer comment nous décidons ou comprenons même les choses les plus simples. L'informatique est encore au niveau "un chien est un chien parce que ce n'est pas un chat" de l'évolution de la pensée - c'est des millénaires derrière même le langage parlé de base.

Glyn
la source
0

Il existe deux types d'assistants. Il y a le gars qui fait arriver des choses spécifiques avec des mots magiques. Il a un mot pour invoquer le feu. Il a un mot pour faire apparaître un poulet surgelé de nulle part. Et un autre mot pour créer un pot de force (je préfère ma force verte, brillante et translucide) pleine de bonté fraternelle. Avec la bonne application de ses mots, il peut produire un poulet frit.

Et puis il y a l'assistant OOP. Qui convoque juste un lutin qui sait comment aller à l'épicerie, acheter un poulet (ou des ingrédients pour tout autre aliment que vous voulez qu'il prépare), le faire cuire et vous servir le dîner. L'assistant POO n'a pas besoin de dire à son lutin comment le faire. Il a juste besoin de lui faire savoir ce qu'il veut, qui dans ce cas est du poulet frit. Non seulement cela, l'assistant POO peut invoquer d'autres serviteurs pour dire à son imp-chef quoi faire.

Donc, le gars de l'incantation impressionne lors des fêtes, mais l'assistant OOP est celui que vous voulez lorsque vous allez démarrer un restaurant magique avec un tas de personnages (comme, par exemple, un serveur licorne énervé et un gestionnaire d'étage troll) qui tous doivent travailler ensemble. Si vous essayez d'invoquer chaque étape du problème de la résolution de "restaurant", vous pouvez facilement vous enchevêtrer dans les détails et il est très facile de faire des erreurs. L'assistant POO pré-entraîne ses serviteurs à trier les détails pour lui afin qu'il puisse se concentrer sur la résolution du plus gros problème en faisant interagir son peuple.

Sans oublier qu'il est plus facile de réutiliser votre chef-lutin pour votre problème de cafétéria d'école primaire, c'est de séparer toutes les ordures que vous pourriez ou non réutiliser lorsque vous le faites une étape à la fois en appelant des mots et les mots qui appellent d'autres ensembles de mots (qui deviendront de plus en plus nombreux car vous devrez gérer une plus grande variété de problèmes).

Pour être juste, avec une application très, très prudente, l'assistant d'incantation peut tout faire aussi vite que l'assistant POO. Il peut décomposer les choses de la bonne manière, de sorte que l'appel des bons sorts ne nécessite pas plus de travail de sa part que l'assistant POO. Mais le travail est beaucoup plus difficile à comprendre ou à reproduire et beaucoup plus difficile à réutiliser de grandes parties car il est tout lié pour un problème complexe spécifique.

Erik Reppen
la source