3

作为我学习的一部分,我认为我发现的抽象定义的最佳答案(有意义)来自stackoverflow:

什么是抽象?

除此之外,

作为当前在线课程 cs61B 2006 年秋季伯克利的一部分,我学习了与上述定义相似的 ADT 的以下定义,但添加了一个额外的词“不变”。我应该认为这个词是上述定义的必然结果吗?或者这个词是定义的一部分吗?

_Abstract_Data_Type_ (ADT) 是一个具有良好定义接口的类,但它的实现细节对其他类是完全隐藏的。这样,您可以更改类的实现,而不会危及依赖它的程序。Date 类是一个 ADT。

ADT 允许您强制执行不变量。

变量是关于始终正确的数据结构的事实(假设代码没有错误),无论外部类调用什么方法。例如,Date ADT 强制执行 Date 对象始终表示有效日期的不变量。通过只允许通过方法调用访问某些字段来强制执行不变量。

4

1 回答 1

3

我最喜欢的抽象定义之一是 Robert C. Martin 的,来自《敏捷原则、模式和实践》一书:

抽象是对无关事物的消除和对本质的放大。

基于该定义,抽象可以在许多不同的级别上采用多种形式:

  • 它可以是一个完整的系统
  • 它可以是一个子系统
  • 它可以是消息格式的定义(类似于协议)
  • 它可以是一个函数(如函数式编程)
  • 它可以是一个抽象基类
  • 可以是接口
  • 它可以是一个具体的类
  • 等等

面向对象的软件构建中,Bertrand Meyer 将类描述为抽象数据类型。本书的想法是抽象数据类型的描述包括前置条件和后置条件。在 Eiffel(书中使用的语言)中,这些称为断言,但我们也将它们称为不变量

Meyer 对面向对象设计的看法包括不变量。在详细的(类/对象/函数)级别上,我同意将不变量视为描述抽象的一种方式是有意义的。

另一方面,如果您的抽象是对高级架构的描述,那么这些不变量就没有意义。尽管如此,即使在高层次上,定义前置条件和后置条件通常也很有价值(例如,“系统 A 必须响应才能使系统 B 正常工作”),因此考虑不变量是有意义的与抽象的关系。

于 2014-03-05T08:00:23.030 回答