Comment enseigner l'OO sans référencer des objets physiques du monde réel? [fermé]


14

Je me souviens avoir lu quelque part que les concepts originaux derrière OO étaient de trouver une meilleure architecture pour gérer la messagerie des données entre plusieurs systèmes d'une manière qui protégeait l'état de ces données. Maintenant, c'est probablement une mauvaise paraphrase, mais cela m'a fait me demander s'il existe un moyen d'enseigner OO sans les analogies d'objet (vélo, voiture, personne, etc.), et qui se concentre plutôt sur les aspects de messagerie. Si vous avez des articles, des liens, des livres, etc., ce serait utile.


6
Je crois que l'origine de OO était dans un langage conçu pour les simulations , qui était très ancré dans des objets du monde réel. Cela ne signifie pas que OO n'est pas utile pour les objets irréels, mais vous ne pouvez pas nécessairement consulter son historique pour l'éclairage.
Tom Anderson

7
Pourquoi voudriez-vous éviter les objets familiers, compréhensibles et réels lors de l'enseignement?
Adam Crossland

1
C'est une question intéressante, cependant. Que l'OO soit enraciné dans le physique non, et que ce soit une bonne idée d'enseigner l'OO en termes de monde physique ou non, il serait préférable de connaître une manière productive de l'enseigner sans référence au monde physique.
Tom Anderson

3
Franchement, j'aimerais voir quelques autres exemples d'utilisation d'objets pour l'interface graphique et les applications Web (donc, comme les modèles de données et les vues), car ce sont, après tout, la viande et les pommes de terre du développement. Les objets "du monde réel" sont la croûte - utile, mais pas toujours nécessaire pour un bon repas
HorusKol

1
@HorusKol: Vous avez exactement cela à l'envers. Le modèle de domaine sous-jacent est le repas. Cela se concentre presque toujours sur des objets du monde réel. Sinon, pourquoi écrire des logiciels? L'interface graphique ou la présentation Web est juste la plaque de service. Fait intéressant, la présentation demande tellement d'efforts. Peut-être que cela en dit long sur la primitivité des outils.
S.Lott

Réponses:


4

Le concept original d'OO n'a rien à voir avec ce qu'est l'OO d'aujourd'hui. (Voir Alors qu'est-ce que * Alan Kay voulait vraiment dire par le terme "orienté objet"? ). La programmation orientée objet d'aujourd'hui consiste à créer des objets tels que les métaphores des vélos et des maisons et des personnes, etc. Aidez-les à voir la corrélation puis aidez-les à voir les différences PUIS plonger dans des choses plus profondes sur l'OO.

EDIT: OO d'aujourd'hui consiste à créer des objets entièrement autonomes dont les propriétés et les capacités sont entièrement / partiellement décrites à l'aide de diverses méthodes (fonctions) et attributs (références à des variables et constantes AKA).


4

Vous pouvez parler des concepts de couplage et de cohésion. Les objets doivent être composés d'attributs et de méthodes à forte cohésion et couplage implicitement élevé. Ils doivent correspondre aux opérations et attributs les moins granulaires nécessaires au fonctionnement du système. Ils devraient également satisfaire le désir de garder le code aussi petit et simple que possible, c'est-à-dire le codage en gardant à l'esprit la maintenance et l'extensibilité.

Cela empêche également «l'explosion d'objet», la généralisation excessive et le mauvais choix de métaphore, qui sont toutes des erreurs courantes.


1
+1 pour donner réellement une réponse à la question au lieu de répondre, l'analogie est nécessaire!
Steven Jeuris

1
Je trouve aussi que c'est l'essence même d'OO. Cela explique OO en termes de ses avantages au lieu de ce à quoi il ressemble. Ajoutez la réutilisabilité à la liste, et je voudrais à nouveau voter pour cette réponse. ; p
Steven Jeuris

2

Je ne me concentrerais pas sur les objets du monde réel, et je ne me concentrerais pas non plus sur la messagerie. Plutôt un exemple que j'ai utilisé est dans les graphiques, où vous voulez avoir des objets qui "savent se dessiner".

Si vous travaillez en C, par exemple, sans OO intégré, vous pouvez trouver pratique de stocker des pointeurs vers des fonctions à l'intérieur d'objets de données. Si vous le faites, alors vous vous frayez un chemin dans la POO.

Je n'aime pas parler d'Alan Kay comme s'il était Moïse en train de remettre les tablettes. Au contraire, il a été formé en mathématiques et en bio, je crois. En tant que mathématicien, il avait probablement une certaine familiarité avec Lambda Calculus, qui était assez abstrait, sans rapport avec le matériel. En LC, vous pourriez dire que tout est un "objet" - comme le nombre 0 et le nombre 1 sont des objets qui évaluent des choses différentes lorsqu'ils reçoivent un argument. Cela mène assez bien à Smalltalk. L'idée de «message» est que nous pouvons éviter de parler de matériel. Vous pourriez dire que lorsque vous appelez une fonction (ou une méthode d'un objet) vous lui envoyez un message, et quand il revient, il vous envoie un message (ou à votre suite). Cela a été retenu comme un moyen de décrire les moyens de communiquer entre les programmes s'exécutant de manière asynchrone sur du matériel distinct. C'est très bien, mais pour la programmation ordinaire, ça s'emballe. Pour obtenir la valeur de l'idée de POO, vous n'avez pas besoin de nier la pertinence de la tâche concrète que vous essayez de faire, ni de la concrétisation du matériel que vous utilisez. Je pense que l'enseignement de la POO en termes d'analogies artificielles amène les gens à trop penser à la conception de logiciels en termes de structure de données, ce qui conduit à sa conception excessive, conduisant à une surcharge de code et à d'énormes problèmes de performances, que je dois passer du temps à nettoyer lorsque ça devient assez mauvais.


Si vous lisez la discussion à laquelle j'ai fait référence, vous verrez qu'il est souligné que ce qu'Alan Kay a appelé OO n'a rien à voir avec OO moderne ... c'est pourquoi je l'ai référencé.
Kenneth

@Kenneth: Voici le lien. Ce que je n'entends pas dire par AK, c'est qu'il voulait que ses idées soient la Bible de n'importe qui. C'était juste une idée intelligente qui, à son avis, était vraiment bonne. Il se réfère spécifiquement au PLANIFICATEUR de Hewitt (sur lequel j'ai été complètement endoctriné) comme une amélioration. Ce sont de belles idées que les gens intelligents ont eues, et ne doivent en aucun cas être considérées comme des Saint-Graal auxquels d'autres choses devraient être considérées comme imparfaites en comparaison.
Mike Dunlavey

@Mike Peut-être que vous comprenez toujours mal ce que je dis ... J'ai fait référence à la discussion que j'ai faite pour souligner que ses idées originales n'étaient pas vraiment applicables au OO d'aujourd'hui. Je n'adore définitivement pas ses idées ni même les étudie.
Kenneth

@Kenneth: Je suis enveloppé dans mes "boutons chauds", comme quand j'entends des gens parler de vrai POO, ou de ce que AK voulait vraiment dire. Pardon.
Mike Dunlavey

@ Mike Alan Kay dit qu'il s'inspire beaucoup de sa formation en microbiologie. En particulier, sa conception d'un objet était (et je ne me souviens pas dans lequel de ses papiers / discours il en parle) basée sur la cellule.
Frank Shearar

1

Je dirais qu'il y a peu de différence en utilisant un objet physique comme exemple et en utilisant un objet non physique comme exemple. Dans le code, ils ont tous deux exactement les mêmes parties. Si nous utilisons l'exemple graphique et l'enseignons avec Sphère, cube, cylindre, c'est presque la même chose que l'utilisation d'une balle, d'une boîte, d'un poteau.

Donc, pour l'enseigner sans utiliser d'exemples physiques, je suggérerais de ne pas utiliser d'exemples du tout, mais je ne vois pas pourquoi vous ne voudriez pas d'exemples physiques, donc ma position sur le sujet est

Non, vous ne devriez pas l'enseigner sans objets physiques du monde réel


1

Je ne vois pas comment vous pouvez éviter de commencer dans les métaphores du monde réel, mais vous ne voulez pas y rester . Si vous faites bien la POO, cela devient rapidement abstrait, mais à ce niveau de compréhension suivant, l'apprenant devrait comprendre les objets comme des objets.


1

Fait intéressant, certains de mes exemples préférés ne sont pas des objets physiques. Prenons l'exemple du compte bancaire. Tout le monde "comprend" pourquoi le dépôt () et le retrait () devraient facturer les frais de service, plutôt que de s'appuyer sur le code d'appel pour modifier la valeur du solde et n'oubliez pas d'enlever les frais de service. Les formes sur un écran sont doublement intangibles, et Stroustrup m'a dit que l'exemple classique "Formes" est l'un des deux plus anciens exemples d'OO qu'il connaisse, datant de 40 ans maintenant (l'autre est des véhicules, maintenant âgé de 44 ans.)

Ce qui est important, c'est que les gens comprennent tout de suite vos exemples. Les ascenseurs ne sont un bon exemple qu'avec des gens qui connaissent tous les ascenseurs. Etc.


1

Si vous êtes dans un groupe de programmation, réunissez quelques personnes et commencez à discuter de la façon dont vous vous diriez de faire ce que le système doit faire. Jouez littéralement des rôles dans le système (vous pouvez le faire vous-même en jouant simplement chaque rôle, mais c'est plus facile avec un groupe de personnes. Les jouets aident si vous êtes seul). Concentrez-vous sur ce que chaque personne fait / fera, plutôt que sur les données dont elle dispose. Faire cela avec les gens permet de se concentrer sur les messages et les rôles parce que les gens ont tendance à se souvenir de ce qu'ils font mais pas des données dont ils disposent.

Prenez note de ce que vous devez vous demander mutuellement et des informations dont vous avez besoin pour le faire. Protégez vos propres données, si un autre programmeur vous demande quelque chose, dites non et demandez-lui pourquoi il en a besoin (aide à l'encapsulation des données).


J'ajouterais également que c'est un bon moyen de savoir si vous avez des objets qui ne sont que des collections de données, car vous vous retrouverez avec quelqu'un qui n'a littéralement rien à faire. Pensez alors où se trouvent les données des objets utilisés et serait-il plus logique que ces données soient simplement dans ces objets.
Cormac Mulhall

0

Je pense qu'une approche ascendante / métal pourrait être utile. Expliquez d'abord les structures et les pointeurs de style C, pour montrer comment les données peuvent être structurées plutôt que d'utiliser simplement des primitives directement. Expliquez ensuite la liaison tardive et les pointeurs de fonction. Expliquez ensuite que vous pouvez les utiliser pour créer des objets, qui sont essentiellement des piles de données bien encapsulées et des pointeurs vers les fonctions nécessaires pour fonctionner sur lesdites données.

Cette explication contredit la méthode conventionnelle de mathématiques / science-fiction de l'enseignement du concept indépendamment de la mise en œuvre, mais c'est la perspective qui m'a fait (certes, quelqu'un avec une ingénierie, pas une science-fiction, une formation) finalement obtenir OO.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.