【发布时间】:2014-04-06 20:21:41
【问题描述】:
作为我学习的一部分,我认为我发现的抽象定义的最佳答案(有意义)来自stackoverflow:
除此之外,
作为当前在线课程 cs61B 2006 年秋季伯克利的一部分,我学到了与上述定义相似的 ADT 的以下类似定义,但添加了一个额外的词“不变”。我应该认为这个词是上述定义的必然结果吗?或者这个词是定义的一部分吗?
_Abstract_Data_Type_ (ADT) 是一个具有良好定义接口的类,但它的实现细节对其他类是完全隐藏的。这样,你 可以更改类的实现,而不会危及依赖它的程序。 Date 类是一个 ADT。
ADT 允许您强制执行不变量。
不变量是关于数据结构的事实,无论外部类调用什么方法,它总是正确的(假设代码没有错误)。 例如,Date ADT 强制执行 Date 对象始终表示有效日期的不变量。通过只允许通过方法调用访问某些字段来强制执行不变量。
【问题讨论】:
-
抽象的意思是,呃,抽象。通常,在计算中,它意味着“隐藏”不相关细节的某些系统或组件的模型或描述。 “不变量”是用于记录(并可能测试/验证)系统的工具。它基本上是对某些始终为真的条件的陈述。我想它有点假设要描述一些抽象,但这两个概念并没有紧密联系。
-
FWIW:据我所知,“不变”的概念可以追溯到 60 年代末或 70 年代初,并且由 E. W. Dijkstra 倡导(我很确定)。 “抽象”的概念也起源于那个时代,但它们最初是独立的概念。 Dijkstra 深入研究“形式验证”和“正确性证明”,其中说明程序所做工作的方程式(“不变量”)将被写出并以某种方式处理以“证明”程序正确。他从未真正完善过这个概念,但他的许多想法都融入了“结构化编程”中。
标签: architecture abstraction abstract-data-type invariants