Architecture 是';不变量';属性是抽象定义的一部分吗?

Architecture 是';不变量';属性是抽象定义的一部分吗?,architecture,abstraction,abstract-data-type,invariants,Architecture,Abstraction,Abstract Data Type,Invariants,作为我学习的一部分,我认为我找到的抽象定义的最佳答案(有意义)来自stackoverflow: 除此之外, 作为2006年秋季伯克利cs61B在线课程的一部分,我学习了与上述定义相近的ADT的类似定义,但增加了一个额外的单词“不变量”。我是否认为这个词是对上述定义的推论?或者这个词是定义的一部分 抽象数据类型(ADT)是一个具有定义良好的接口的类,但是它的实现细节对其他类是隐藏的。那样,你 可以在不影响依赖类的程序的情况下更改类的实现。Date类是一个ADT ADT允许您强制执行不变量。 不变

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

除此之外,

作为2006年秋季伯克利cs61B在线课程的一部分,我学习了与上述定义相近的ADT的类似定义,但增加了一个额外的单词“不变量”。我是否认为这个词是对上述定义的推论?或者这个词是定义的一部分

抽象数据类型(ADT)是一个具有定义良好的接口的类,但是它的实现细节对其他类是隐藏的。那样,你 可以在不影响依赖类的程序的情况下更改类的实现。Date类是一个ADT

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

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

我最喜欢的抽象定义之一是Robert C.Martin的,摘自:

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

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

  • 它可以是一个完整的系统
  • 它可以是一个子系统
  • 它可以是消息格式的定义(类似于协议)
  • 它可以是一个函数(如在函数编程中)
  • 它可以是一个抽象基类
  • 它可以是一个接口
  • 它可以是一个具体的类
  • 等等
在中,Bertrand Meyer将类描述为抽象数据类型。本书的思想是,抽象数据类型的描述包括前置条件和后置条件。在Eiffel(书中使用的语言)中,这些被称为断言,但我们也知道它们是不变量

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


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

抽象的含义是,呃,抽象。一般来说,在计算中,它是指“隐藏”不相关细节的某个系统或组件的模型或描述。“不变量”是一种用于记录(以及可能的测试/验证)系统的工具。它基本上是一种对某种情况的陈述,这种陈述总是正确的。我想这有点假设有一些抽象的东西需要描述,但这两个概念并没有紧密联系。FWIW:据我所知,“不变”的概念可以追溯到60年代末或者70年代初,并且是由E.W.迪克斯特拉倡导的(我很确定)。“抽象”的概念也可以追溯到那个时代,但它们最初是独立的概念。Dijkstra深入到“形式验证”和“正确性证明”中,其中说明程序所做操作的方程式(“不变量”)将被写出,并以某种方式进行处理,以“证明”程序的正确性。他从未真正完善过这个概念,但他的许多想法都被纳入了“结构化编程”中。那么马克,你将如何巩固这个定义呢?所以我不能回头再去想定义了。从你的观点:“把不变量看作描述抽象的一种方式是有意义的”你想说抽象只是强制不变量吗?它不仅仅是不变量;好的抽象通常也是一种隐喻。@HotLicks是的,pendantically你通常是对的,我不想回答你的评论。但是你没有笑脸。。。我们没上,我们上得很好。虽然马克的第一语言不是英语,但他的第二语言似乎是软件架构;因此,他并没有松散地使用隐喻这样的术语。一般说来,隐喻是两种修辞类比形式中更强、更具包容性的一种。回到马克的观点,一个好的抽象是一个隐喻。事实上,抽象的主要特点是它隐藏了“不相关”的细节,产生了一个更简单的概念模型来处理。从这个意义上说,如果隐喻模型的细节没有映射到原始界面,那么隐喻可能会分散注意力并产生反作用。在计算中处理的几乎所有事情都是抽象的,但很少有一个映射到隐喻的重要程度。隐喻(和明喻)主要用作教学工具或讨论点,而不是(er)“具体”抽象的严格模型/描述。