所在位置:答疑 - 内容   
FizzBuzz的UML类图和序列图
 

lyning 2019-3-14 22:40:

最近在学习 UML,请问一下,UML 交互图中的 play 方法画得有没有问题呢?

创建游戏和玩游戏都在 Teacher 的 play 方法中调用,那么 play 方法在 UML 交互图中画得有没有问题呢?


UMLChina潘加宇:

简答如下:

(1)左侧的标注是错误的。

OOA和OOD的区别,也就是分析和设计的区别,在于是否涉及到非核心域的知识,而不是用了什么图。

上半部的类图和下半部的序列图,都只涉及到核心域的知识,都属于OOA。

(2)这两个图给出的分析并无太大意义,复杂度依然藏在某个操作里(估计是match),这样的面向对象和面向过程并无区别,遗憾的是,绝大多数人的"面向对象"只能做到这样,包括这两张图的作者。

系统之所以能够输出符合条件的数字,原因不是记住了Game和Rule的关系,实际上系统根本不需要Teacher类和Game类。Rule可以留下来。

可参见《软件方法》第8章 8.1.6.4里提到的错误,类图长得像用例图,以及图8-52和图8-53。

必须把规则显式化,封装在实体类中,而不是藏在什么"算法"里面。长长的"算法"中定义的变量,往往才是候选的实体类。合适的类应该是"数字"、"特殊数字"、"匹配规则"等。

(3)2018年有一本新书也举了这个例子,但是还是一样,作者自以为面向对象,实际上还是假面向对象。