作为我学习的一部分,我认为我发现的抽象定义的最佳答案(有意义)来自 stackoverflow:
什么是抽象? https://stackoverflow.com/questions/7028242/what-is-abstraction
除此之外,
作为伯克利分校 2006 年秋季在线课程 cs61B 的一部分,我学到了下面类似的 ADT 定义,接近上面的定义,但添加了一个额外的词“不变”。我应该将这个词视为上述定义的推论吗?或者这个词是定义的一部分吗?
_Abstract_Data_Type_ (ADT) 是一个具有定义良好的接口的类,但其实现细节对其他类是严格隐藏的。这样,你
可以更改类的实现,而不会危及依赖于该类的程序。 Date 类是一个 ADT。
ADT 允许您强制执行不变量。
An 不变的是关于数据结构的事实,无论外部类调用什么方法,该事实始终为真(假设代码没有错误)。
例如,Date ADT 强制规定 Date 对象始终表示有效日期。通过仅允许通过方法调用访问某些字段来强制执行不变量。
我最喜欢的抽象定义之一是 Robert C. Martin 在书中的定义敏捷原则、模式和实践 http://amzn.to/19W4JHk:
抽象是消除不相关的内容并放大本质的内容。
根据该定义,抽象可以在许多不同的层面上采取多种形式:
- 它可以是一个完整的系统
- 它可以是一个子系统
- 它可以是消息格式的定义(类似于协议)
- 它可以是一个函数(如函数式编程)
- 它可以是一个抽象基类
- 它可以是一个接口
- 它可以是一个具体的类
- etc.
In 面向对象的软件构建 http://amzn.to/1claOin,Bertrand Meyer 将类描述为抽象数据类型。本书的想法是抽象数据类型的描述包括前置条件和后置条件。在埃菲尔(书中使用的语言)中,这些被称为断言,但我们也知道它们是不变量.
迈耶关于面向对象设计的观点包括不变量。在详细的(类/对象/函数)级别上,我同意将不变量视为一种方法是有意义的describe一个抽象。
另一方面,如果您的抽象是高层架构的描述,those某种不变量没有意义。尽管如此,即使在较高的层次上,定义前置条件和后置条件通常也是有价值的(例如“系统 A 必须做出响应才能使系统 B 正常工作”),因此考虑以下不变量确实有意义与抽象的关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)