Question

Je viens d'avoir un CS mi-parcours et l'une des questions était:

OOD permet ADTs à créer et utiliser.

  • True
  • false

J'ai répondu faux, mais ma réponse a été marquée comme incorrecte. Je soupçonne ce que les moyens d'interrogation est « conception orientée objet peut être utilisé pour mettre en œuvre les types de données abstraites », mais si c'est ce que cela signifie qu'il semble très maladroitement me formulée. Mon raisonnement pour répondre à faux était ADTs sont conceptuelles et existent en dehors de tout paradigme de programmation particulier, si la « création » d'un ADT est un exercice purement théorique.

Pour moi, il semble que la question est analogue à dire « OOD permet algorithmes à créer ». Vous pouvez utiliser OOD dans la mise en œuvre d'un algorithme, mais il n'a rien à voir avec sa création.

Ai-je raison d'en appeler ma marque? Mon professeur est en quelque sorte un idiot et je l'ai déjà corrigé sur plusieurs autres points pendant toute la durée, donc je suis en train de ne pas le contrarier si je me trompe.

Était-ce utile?

La solution

Tout d'abord, si c'est exactement la phrase à l'examen et non votre traduction, il est ambigu. Cela pourrait signifier que OOD est un moyen possible de créer et d'utiliser ADT, ou que la création et l'utilisation ADTs nécessite OOD.

En outre, ADT peut vouloir dire deux choses: type de données abstrait ou algebraic de type . Les deux concepts sont complètement différents, mais sont souvent confondus. Un type de données algébrique est un type qui est défini par sa structure récursive, ou de manière équivalente par des moyens pour construire un objet de ce type. Un type de données abstrait est un type qui est défini par ses propriétés, à la façon de construire des objets restant caché.

La seconde interprétation - que vous avez besoin pour OOD ADTs - est certainement faux. Il existe des langages de programmation qui ont pas d'orientation de l'objet que ce soit, mais ont ADTs dans un sens ou l'autre ou les deux. Standard ML est un bon exemple. Enregistrement et de définitions de type de somme fournissent des types de données algébriques, tandis que le système de module fournit des types de données abstraites

La première interprétation - que ADTs peuvent être mis en œuvre avec OOD - est controversée, car elle dépend de la terminologie qui ne sont pas standard. Dans les langues typiques qui fournissent des objets, vous pouvez construire des types de données algébriques: définir plusieurs implémentations d'une classe pour faire un type de somme, et de mettre plusieurs champs dans une classe pour faire un type de produit. Toutefois, ce n'est pas intrinsèque à la programmation orientée objet. En ce qui concerne les types de données abstraites, la plupart des langages orientés objet fournissent une sorte d'abstraction facilité en se cachant la mise en œuvre d'une classe sous une interface. Cependant, ce n'est pas intrinsèque à la POO. La principale caractéristique des objets est l'héritage, et vous pouvez avoir l'héritage sans abstraction que ce soit

La question peut faire une différence entre la conception orientée objet et construction de la programmation orientée objet, mais OO D est pas vraiment sur le même plan que ADTs.

Dans tout cela est une question d'examen mal rédigée. La connexion entre OOD et ADTs est un sujet intéressant, mais la question n'est pas formulée de manière significative.

Autres conseils

Tout dépend de votre définition de « créé ».

Si vous voulez dire par créé « défini », alors certainement la réponse est vrai. Le concept d'une interface dans les langues Java ou similaires est un ADT. En donnant un nom à certaines méthodes qui peuvent être appelées sur un type, vous avez créé un type de données abstrait, que vous pouvez utiliser pour les variables et les paramètres.

Si vous voulez dire par créé « instancié », alors la réponse est fausse, puisque vous ne pouvez pas instancier un type abstrait. Un objet aura le type d'un ADT. Il aura le type d'une classe qui implémente un ADT.

Non, je ne pense pas que vous avez une jambe pour se tenir debout.

Dans la mesure où il y a une ambiguïté dans la question, il semble assez clair pour moi ce que l'on entend. Il semble que la demande est: les langages orientés objet permettent (activer, rendre possible) vous de construire (mettre en œuvre, construire) un type de données abstrait dans votre code. La réponse est « vrai »:. Langages orientés objet standard ne vous permettent d'implémenter et d'utiliser des types de données abstraites dans votre code

Votre argument en faveur de « faux » moi aussi faibles en particulier les grèves. ADTs ne sont pas seulement théorique: vous pouvez mettre en œuvre un ADT dans votre code, et les gens le font souvent. Dire qu'ils sont « simplement » conceptuelle est de manquer le point. Si je disais « Un marteau me permet de construire une chaise en clouant ensemble des morceaux de bois », et vous avez répondu « faux: la notion d'une chaise est purement conceptuel », nous serions tous à vous regarder drôle. Je pense de même ici.

conception orientée objet est pertinent pour ADTs. Dans la mesure où vous pensez de la conception orientée objet en recommandant que vous construisez des objets encapsulées, alors que l'encapsulation signifie essentiellement que vous construisez un ADT.

Je ne recommanderais pas appeler votre note sur cette question. Enregistrez vos appels pour les situations où vous avez un cas plus raisonnable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top