博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UML图的一些自我理解
阅读量:5753 次
发布时间:2019-06-18

本文共 1590 字,大约阅读时间需要 5 分钟。

本文分为两部分,第一部分为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. 场次

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

转载于:https://www.cnblogs.com/fridge/p/4861928.html

你可能感兴趣的文章
Swift 学习 用 swift 调用 oc
查看>>
第三章 Python 的容器: 列表、元组、字典与集合
查看>>
微信小程序开发 -- 点击右上角实现转发功能
查看>>
问题解决-Failed to resolve: com.android.support.constraint:constraint-layout:1.0.0-alpha7
查看>>
与MS Project相关的两个项目
查看>>
[转载]ASP.NET MVC Music Store教程(1):概述和新项目
查看>>
使用 SharpSvn 执行 svn 操作的Demo
查看>>
js函数大全
查看>>
iOS app exception的解决方案
查看>>
Mongodb启动命令mongod参数说明
查看>>
TCP&UDP压力测试工具
查看>>
oracle 导入数据
查看>>
首个5G智慧机场落地广州 速度是4G的50倍
查看>>
Android 最简单的自定义Dialog之一
查看>>
磨刀不误砍柴 - 配置适合工作学习的桌面环境
查看>>
Java笔记-反射机制(一)
查看>>
redux v3.7.2源码解读与学习之 applyMiddleware
查看>>
【React】为什么我不再使用setState?
查看>>
Git原理与高级使用(3)
查看>>
从JDK源码看Writer
查看>>