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



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

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

提前谢谢你。

举一个简单的例子:当你对三角形建模时,你要确保角度的总和总是加起来是 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

最新更新