本文分为两部分,第一部分为UML关系的理解,第二部分为UML图在领域模型中的应用。
之前曾经读过程杰的《大话设计模式》这本书。看到了这种图, 当时觉得很厉害,一张图就明说了UML的六大主要关系。后来随着自己写过一些面对对象的工程,也接触了Java和C#这样的面对对象的编程语言。才发现原来六大关系并非是一张图片就足以理解。当初的自己其实是管中窥豹了。
任何取巧的方法在日后都是要付出代价的。我一向不喜欢文字,但是这里也不得不这样做了。
我先扔出来总结。
首先,六种关系【继承】【实现】这两者在设计中是没有争议的。所谓没有争议,是说这种关系非常容易确定。在编程中,也使用了明确的extends和implements这样的明确标识。这两个关系,其实也是关联程度最高的关系。剩余的四种关系中【依赖】【关联】【组合】【聚合】的关系强度都要弱于【继承】(【实现】)
而四者,在代码上并没有办法区分。必须从逻辑上去判断。
我分别举一些例子。【依赖】四者中最弱的关系。是弱化的关联。前些天我在编写c#程序的过程中,需要和QT程序使用流进行通信。这个流是QT自带的数据字节流,所以我自己写了一个工具类来Encode和code。这个工具类我在程序中就会调用其method。我认为这就是一个典型的依赖关系。
【关联】这个关系是【聚合】【组合】的一般化,不要将它们割裂开来看待。这个关系体现在代码里,是Class A拥有Class B的一个引用。
【聚合】是【关联的特化】,Class A和Class B之间的关系比单纯的关联多了一层。此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
【组合】是【聚合的特化】,是一种【强聚合】,这个强,主要体现在整体和部分之间的关系更加紧密了。整体和部分的声明周期相同。比如鸟的翅膀,鸟的身体,这些共同构成了鸟,是鸟不可分离的一部分。
【组合】是这四者里面关系强度最高的部分,它距离【继承】最近。
个人认为有点类似于但是弱于【多继承】。UML在领域模型中的应用
主要的难点在于
- 识别概念类
- 识别概念类之间的关系
关系的表示方法
问题描述:
某电影院需构建一“网上订票订座”的系统模块,其场景如下: 1、顾客通过影院主页进入系统; 2、浏览影视信息后,选择“在线订票”模块; 3、在列表中选择所需的影片; 4、进而选择三天之内的影片放映场次; 5、系统显示电影票的单价,顾客选择订购票的张数; 6、系统给出总价; 7、同时显示座位信息(已经订出座位的颜色与空闲座位的颜色不一样);如果已无空位则给出明显提示,顾客可切换放映场次; 8、如果所有场次的座位都满,则退出订票模块; 9、顾客根据需要选择所需的位置,同时要求顾客提供手机号码; 10、系统提示是否确认的信息; 11、顾客确认后,系统给顾客以短信的方式提供四位的确认码; 12、系统提示完成订票订座的操作并退出。
问题一:请根据上述场景描述给出用例图,需特别注意基本用例和扩展用例及包含用例的内容,并给出扩展用例和包含用例的用例说明。
问题二:请根据上述内容,给出该场景的领域模型。
问题三:请根据上述场景中的第5和第6条内容以及领域模型,给出该系统消息的顺序图。
这里我们先简单地做一下第一问
基本用例:浏览网站拓展用例:在线订票包含用例:填写手机信息
第二问
首先分析概念类都有哪些1. 顾客 2. 影院 3. 影片 4. 电影票 5. 座位 6. 影片信息(可选) 7. 订单 8. 场次
版权声明:本文为博主原创文章,转载请标明出处。