粉红:代表“瞬间事件”。在模型中,瞬间事件往往封装了我们最感兴趣的方法(method),这些方法和系统将来
的功能有直接的联系,它们可以说是模型的灵魂。它们也是最容易变的,因此选用了最活跃的粉红色代表。
黄色:代表“角色”。瞬间事件的发生,往往会牵涉到多个角色,角色具体由“人-物-地点”来扮演。角色意味着
在特定场景下的责任,它们也是比较容易变化的,但比起瞬间事件还是要稳定些,所以用比较活泼的黄色代表。
绿色:代表“人-物-地点”。业务领域不同,会牵涉到不同的人、物、地点。它们都比较稳定,用安静的绿色表
示。
蓝色:代表“描述”。最后为人、物、地点引入更抽象一级的描述元素,这些描述元素可以被多个不同的“人-物-
地点”所共享。比如Date就是描述元素,人可以有生日,汽车可以有生产日期,等等。描述是最为稳定的一类模
型元素,用稳定得几乎忧郁的蓝色代表。
好了,举个例子吧。下图是网管软件领域建模时的模型之一角。Ping是瞬间事件元素,其涉及两个角色元素:
Pinger和Pingee。这两个角色都由IPDevice来扮演,IPDevice属于“人-物-地点”元素。IPDevice拥有零到多个
IPAdress,IPAdress是描述元素。当然,IPDevice和其四个子类Router、Switch、Server和Host都是“人-物-地
点”元素。
Edward R. Tufte在其经典著作《Envisioning Information》中指出,颜色在信息设计中的基本作用有四:
分类
度量
模仿
装饰
彩色建模方法充分利用了颜色的分类和度量功能(当然经过颜色装饰的模型也比原来更赏心悦目):它不仅利用
了四种颜色来为图元分类,而且粉红、黄、绿、蓝四种颜色分别代表不同等级的“易变程度”,具有度量意义。
由于篇幅所限,以上只是对彩色建模方法的简单介绍,感兴趣的朋友还是找书来看看吧。
四、着色边
在上文中,我们对经典图论进行了小小扩充,并且体会了这种扩充的应用价值。接下来,我们对边的概念进行类
似的扩充——着色边。
边具有的与之相关的颜色,称为着色(color);该边称为着色边。
五、着色边的UML应用——标识良性依赖与恶性依赖
合理处理依赖关系,是“拥抱变化”的关键所在。在《拥抱变化:敏捷设计从理论到实践》(《程序员》2004年第
11期)一文中,笔者阐述了敏捷设计的理解基础:良性依赖原则。不会“在实际中”造成危害的依赖关系,都是良性依
赖;依赖的“理论危害”不一定成为“实际危害”,反之亦然。这就是良性依赖原则。
那么,如果能使用着色边的方法,将依赖的良、恶性可视化,对软件设计人员无疑是大有裨益的。我们规定:
良性依赖用绿色表示;
恶性依赖用红色表示。
例如,敏捷设计大师们提倡的“通过重构得到设计模式”,在着色边方法的帮助下,变得易于理解,并且极具可操作
性;其步骤如下:
1. 使用最简单的设计,完成当前的功能。此时,往往是类之间的直接调用,但由于功能需求也简单,所以类之间
的依赖关系也往往是良性依赖。