EA&UML日拱一卒-关联(进阶篇)

来源:互联网 发布:淘宝实木花架中式图片 编辑:程序博客网 时间:2024/04/29 03:50

昨天的基本篇算是关联的基本内容,不大好理解,但是非常有用。对于面向对象的建模,识别类当然是第一步,接下来就是要识别类之间的关系,也就是关联。可能会觉得有点虚,但是这同时也是设计向上游发展的表现,请务必好好体会。


当某个关联端的多重度被指定为一个以上时,并没有强调这些对象是不是有序的,也没有明确对象的值是不是可以重复。在有些(很多?)时候是需要明确这些信息的。


下面就以一个事件处理系统为例来说明。


首先是按照事件发生时间先后来处理事件的情况,这时候时间是按照发生的先后次序排列(Ordered=True)的,又因为同样的事件可能多次发生,所以队列中的值是可以重复(Allow Duplicates=True)的。这种情况UML称之为{sequence},类图是下面这样的。




当然也存在按照优先级来处理时间的情况。这时候需要两方面的信息。一个是保存发生事件的EventHandler,它所管理事件是无序(Ordered=False)的,允许重复(Allow Duplicates=False)的;另一个是优先级信息队列EventPriorityQueue,这个队列管理的事件是有序(Ordered=True)的,不允许重复(Allow Duplicates=False)的。EventHandler通过EventPriorityQueue决定事件处理的次序。前一种情况UML称之为{bag},后一种情况UML称之为{ordered}。以下是类图。




接下来说明这两种信息的设定方法。首先进入关联端的设定界面后,然后通过下图红框中的项目,分别设定是否有序和是否允许重复的选项。有一点需要注意的是,只有在指定了多重度以后,设定结果才会在类图中表示出来。




两个设定项目,四种组合,归纳起来就是下面这张图。



你一定注意到左下角的空白,UML并没有像其他三种情况一样给以个说法。其原因应该UML认为不存在这种情况吧。反正我是没想到,你呢?

无论什么时候,都要尽量精确地设计和实现。做正确的事不需要问理由。

如果阅读本文能给您带来些许收获,欢迎分享给更多的朋友!

阅读更多新文章,请扫描下面二维码,关注公众号【面向对象思考】





1 0
原创粉丝点击