“不变”属性是抽象定义的一部分吗?

时间:2014-03-05 01:09:37

标签: architecture abstraction abstract-data-type invariants

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

What is abstraction?

除此之外,

作为当前在线课程cs61B 2006秋季课程的一部分,伯克利,我学会了接近上述定义的类似ADT的定义,但增加了一个额外的词'不变'。我是否应该将这个词视为上述定义的必然结果?或者这个词是定义的一部分吗?

_Abstract_Data_Type_(ADT)是一个具有明确定义的接口的类,但其实现细节却被其他类隐藏。那样,你 可以改变类的实现而不会危及依赖它的程序。 Date类是ADT。

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

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

1 个答案:

答案 0 :(得分:3)

我最喜欢的抽象定义之一是Robert C. Martin的书,Agile Principles, Patterns, and Practices

  

抽象是消除不必要的和必要的放大。

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

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

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

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

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