对于OOP,是不可变的和不变的同义词吗?

时间:2012-10-05 15:48:30

标签: oop immutability invariants

对于OOP,是不可变且不变的同义词吗?

我有一种模糊的感觉,存在差异,但我不确定。

我认为不可变通常应用于对象,而不变通常应用于属性/值。

在这两种情况下,对象或变量都将保持不变,并且" true",因此它们看起来非常相似。

感谢您的任何反馈,因为我正在努力提高对这些术语理解的准确性,我认为我忽略了微妙的差异。

2 个答案:

答案 0 :(得分:5)

不确定这些是否是正确的定义,但对我来说“不可变”意味着数据结构不会改变,而“不变”是一个不变的设定条件并保持为真(但它不是与特定的数据实例有关)

现在使用不可变数据结构有助于确保不变量保持为真,因为它们不会发生变异,它们不会突然破坏之前为真的不变量。

答案 1 :(得分:0)

不可变是指物体在其生命周期内不会发生变化。

  • 不可变的字符串。如果连接,它会创建一个新字符串。原来没有改变。

不变量是指在指定的持续时间内不会更改的保证。它们不必明确地作为属性或值存在。

  • 对象必须始终处于有效状态。
  • 对象必须处于state-X才能执行operation-Y。
  • 如果调用operation-X,则保证对象处于state-X。
  • 实体可以是公司或个人,但不能同时存在。
  • 无法同时打开和关闭文件。