【问题标题】:Is 'invariant' property part of the definition of Abstraction?“不变”属性是抽象定义的一部分吗?
【发布时间】:2014-04-06 20:21:41
【问题描述】:

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

What is abstraction?

除此之外,

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

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

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

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

【问题讨论】:

  • 抽象的意思是,呃,抽象。通常,在计算中,它意味着“隐藏”不相关细节的某些系统或组件的模型或描述。 “不变量”是用于记录(并可能测试/验证)系统的工具。它基本上是对某些始终为真的条件的陈述。我想它有点假设要描述一些抽象,但这两个概念并没有紧密联系。
  • FWIW:据我所知,“不变”的概念可以追溯到 60 年代末或 70 年代初,并且由 E. W. Dijkstra 倡导(我很确定)。 “抽象”的概念也起源于那个时代,但它们最初是独立的概念。 Dijkstra 深入研究“形式验证”和“正确性证明”,其中说明程序所做工作的方程式(“不变量”)将被写出并以某种方式处理以“证明”程序正确。他从未真正完善过这个概念,但他的许多想法都融入了“结构化编程”中。

标签: architecture abstraction abstract-data-type invariants


【解决方案1】:

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

抽象是对无关紧要的消除和对本质的放大。

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

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

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

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

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

【讨论】:

  • so mark,你将如何巩固定义?这样我就不能回头再想这个定义了。
  • 从您的观点来看:“将不变量视为描述抽象的一种方式是有意义的”您是否想说抽象只不过是强制执行不变量?
  • 不仅仅是不变量;一个好的抽象通常也是一个隐喻。
  • @HotLicks 是的,你通常可能是正确的,我会留下你的评论。但是你没有笑脸......我们不在english.stackexchange.com - 我们在SO。虽然 Mark 的第一语言不是英语,但他的第二语言通常看起来是软件架构。因此,他不会松散地使用像隐喻这样的术语。 en.wikipedia.org/wiki/Simile一般来说,隐喻是两种修辞类比形式中更强、更包容的。 所以,回到 Mark 的观点 - 一个好的抽象 一个 比喻.
  • 实际上,关于抽象的主要事情是它隐藏了“不相关”的细节,产生了一个更简单的概念模型来处理。从这个意义上说,如果隐喻模型具有未映射到原始界面的细节,则隐喻可能会分散注意力并适得其反。您在计算中处理的几乎所有事情都是抽象的,但很少有一个映射到任何重要程度的隐喻。主要是隐喻(和明喻)作为教学工具或讨论点很有用,而不是作为(呃)“具体”抽象的严格模型/描述。
猜你喜欢
  • 2014-07-12
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多