作为我学习的一部分,我认为我发现抽象定义的最佳答案(有意义)来自stackoverflow:
除此之外,
作为当前在线课程cs61B 2006秋季课程的一部分,伯克利,我学会了接近上述定义的类似ADT的定义,但增加了一个额外的词'不变'。我是否应该将这个词视为上述定义的必然结果?或者这个词是定义的一部分吗?
_Abstract_Data_Type_(ADT)是一个具有明确定义的接口的类,但其实现细节却被其他类隐藏。那样,你 可以改变类的实现而不会危及依赖它的程序。 Date类是ADT。
ADT允许您强制执行不变量。
不变是一个关于数据结构的事实,总是正确的(假设代码没有错误),无论外部类调用什么方法。 例如,Date ADT强制执行Date对象始终表示有效日期的不变量。通过仅允许通过方法调用访问某些字段来强制执行不变量。
答案 0 :(得分:3)
我最喜欢的抽象定义之一是Robert C. Martin的书,Agile Principles, Patterns, and Practices:
抽象是消除不必要的和必要的放大。
基于该定义,抽象可以采用多种形式,在许多不同的层面上:
在Object-Oriented Software Construction中,Bertrand Meyer将类描述为抽象数据类型。本书中的想法是抽象数据类型的描述包括前置和后置条件。在Eiffel(本书中使用的语言)中,这些被称为断言,但我们也将它们称为不变量。
Meyer关于面向对象设计的观点包括不变量。在详细的(类/对象/函数)级别,我同意将不变量视为描述抽象的方式是有意义的。
另一方面,如果你的抽象是对高级架构的描述,那些类型的不变量是没有意义的。尽管如此,即使在较高的层次上,定义前置条件和后置条件通常也很有价值(例如“系统A必须响应才能使系统B正常工作”),因此考虑不变量是有意义的。与抽象的关系。