-1

我试图通过使用 ArgoUML 在 UML 中建模来消化大型 Java 应用程序。在 UML 图表工具的属性部分有一个有用的清单,我假设它用于帮助设计好的软件。除了 3 之外,大多数清单项目都是有意义的。

1). Could you write an invariant for this class? 
2). Do all constructors establish the class invariant? 
3). Do all operations maintain the class invariant?

这些问题是什么意思?我是面向对象设计的新手,所以解释会很有帮助。

先感谢您。

4

1 回答 1

2

举一个简单的例子:当你为一个三角形建模时,你想确保角度的总和总是等于 180 度。

class Triangle {
    number angle1, angle2, angle3;
}

这是不变量(应该始终为真的条件):

degrees (angle1 + angle2 + angle3) = degrees 180

现在第二个问题是有道理的:因为构造函数必须确保不构造不变量不成立的对象。

然后,第三个问题询问是否存在可以使不变量无效的操作。例如:

    void setAngle1(number whatever) { angle1 = whatever; }

事实证明,上面的设计并不好。为什么?因为有冗余信息。更好的设计是这样的:

class Triangle {
    number angle1, angle2;   // two angles
    number side;             // and the connecting line
}

我们总是可以从角度 1 和角度 2 计算角度 3。我们只需要执行更简单的不angle1 + angle2 < 180°变量side > 0

于 2013-11-06T16:12:25.137 回答