UML图的一些自我理解

时间:2023-01-29 17:16:57

本文分为两部分,第一部分为UML关系的理解,第二部分为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. 关系的表示方法

    问题描述:
    某电影院需构建一“网上订票订座”的系统模块,其场景如下:
    1、顾客通过影院主页进入系统;
    2、浏览影视信息后,选择“在线订票”模块;
    3、在列表中选择所需的影片;
    4、进而选择三天之内的影片放映场次;
    5、系统显示电影票的单价,顾客选择订购票的张数;
    6、系统给出总价;
    7、同时显示座位信息(已经订出座位的颜色与空闲座位的颜色不一样);如果已无空位则给出明显提示,顾客可切换放映场次;
    8、如果所有场次的座位都满,则退出订票模块;
    9、顾客根据需要选择所需的位置,同时要求顾客提供手机号码;
    10、系统提示是否确认的信息;
    11、顾客确认后,系统给顾客以短信的方式提供四位的确认码;
    12、系统提示完成订票订座的操作并退出。

问题一:请根据上述场景描述给出用例图,需特别注意基本用例和扩展用例及包含用例的内容,并给出扩展用例和包含用例的用例说明。

问题二:请根据上述内容,给出该场景的领域模型。

问题三:请根据上述场景中的第5和第6条内容以及领域模型,给出该系统消息的顺序图。

这里我们先简单地做一下第一问


基本用例:浏览网站
拓展用例:在线订票
包含用例:填写手机信息

第二问
首先分析概念类都有哪些


 1. 顾客
 2. 影院
 3. 影片
 4. 电影票
 5. 座位
 6. 影片信息(可选)
 7. 订单
 8. 场次

版权声明:本文为博主原创文章,转载请标明出处。