我只是中期CS,问题之一是:

OOD允许创建和使用ADT。

  • 真的
  • 错误的

我回答了错误,但是我的答案被标记为不正确。我怀疑问题的含义是“可以使用面向反对的设计来实现抽象数据类型”,但是如果这意味着它对我来说似乎非常笨拙。我回答错误的理由是ADT是概念性的,并且存在于任何特定的编程范式之外,因此ADT的“创建”纯粹是一种理论上的练习。

对我来说,这个问题似乎类似于说“ OOD允许创建算法”。您可以在实现算法中使用OOD,但与其创建无关。

我能吸引我的印记吗?我的教授有点像一个白痴,我已经在整个学期的其他几点上纠正了他,所以如果我错了,我试图避免对他进行拮抗。

有帮助吗?

解决方案

首先,如果这正是考试中的句子而不是您的翻译,那是模棱两可的。这可能意味着OOD是创建和使用ADT的一种可能方法,或者创建和使用ADT需要OOD。

此外,ADT可以意味着两件事: 抽象数据类型 或者 代数数据类型. 。这两个概念是完全不同的,但经常感到困惑。代数数据类型是由其递归结构定义的类型,或者是由构建该类型对象的方法等效的。抽象数据类型是由其属性定义的类型,其构建对象仍然隐藏的方式。

第二种解释 - 您需要ADT的OOD - 绝对是错误的。有一些没有对象取向的编程语言,但在某种意义上或另一种意义上具有ADT。标准ML是一个很好的示例:记录和总和类型定义提供代数数据类型,而模块系统提供抽象数据类型。

第一个解释(可以用OOD实施ADT)是有争议的,因为它取决于不是标准的术语。在提供对象的典型语言中,您可以构建代数数据类型:定义类的几个实现来制作总和类型,并将多个字段放入类中以制造产品类型。但是,这不是面向对象的编程。关于抽象数据类型,大多数面向对象的语言通过隐藏某个接口下的类实现来提供某种抽象功能。但是,这不是OOP的固有:对象的关键特征是继承,您可以在没有任何抽象的情况下获得继承。

问题可能是在面向对象的设计和面向对象的编程结构之间有所不同,但是d 与ADTS并不是在同一平面上。

总而言之,这是一个途径差的考试问题。 OOD和ADT之间的联系是一个有趣的主题,但是问题并没有以有意义的方式措辞。

其他提示

这完全取决于您对“创建”的定义。

如果创建您的意思是“定义”,那么答案肯定是正确的。 Java或类似语言中接口的概念是ADT。通过为可以在类型上调用的某些方法的名称,您创建了一个抽象数据类型,您可以将其用于变量和参数。

如果创建您的意思是“实例化”,那么答案是错误的,因为您无法实例化抽象类型。对象将具有ADT的类型。它将具有实现ADT的类的类型。

不,我认为您没有腿可以站起来。

在这个问题上存在任何歧义的程度,对我来说似乎很清楚。声称似乎是:面向对象的语言允许(启用,使其成为可能)您可以在代码中构造(实现,构建)抽象数据类型。答案是“ true”:标准面向对象的语言确实允许您在代码中实现和使用抽象数据类型。

您对“虚假”的论点尤其使我感到虚弱。 ADT不仅是理论上的:您可以在代码中实现ADT,而且人们经常这样做。要说它们“仅仅”的概念就是错过这一点。如果我说“锤子允许我通过钉住木头来构建椅子”,然后您回答“错误:椅子的概念只是概念上的”,我们都会看着你很有趣。我认为这里也适用。

面向对象的设计与ADT有关。在您认为面向对象的设计的范围内,建议您构建封装的对象,那么封装基本上意味着您正在构建ADT。

我不建议您在这个问题上提起您的成绩。在您的情况下,请保存您的呼吁。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top