需要解释UML建模工具询问的软件设计问题清单

时间:2013-11-06 14:54:59

标签: java java-ee invariants argouml

我试图通过使用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?

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

提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

class Triangle {
    number angle1, angle2, angle3;
}

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

degrees (angle1 + angle2 + angle3) = degrees 180

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

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

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

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

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

我们总是可以从angle1和angle2计算angle3。我们只需要强制执行angle1 + angle2 < 180°side > 0

这个更简单的不变量