设计模式系列-面向对象葵花宝典-UML

本文介绍UML(统一建模语言)的基础概念及其在软件需求分析与设计阶段的应用,包括用例图、类图、接口、类关系图及动态图等内容。

设计模式系列-面向对象葵花宝典-UML

声明:本系列为面向对象葵花宝典一书学习总结内容,原作者博客链接


10. UML

10.1.UML简介
UML,Unified Modeling Language,中文翻译为“统一建模语言”

10.2. UML 只是语言
最常见的误解是:掌握 UML,就掌握了设计;设计就是画 UML 图。
UML 是一种用在面向对象建模领域的语言,是一种“表达”和“交流”的方式。
只有设计出来后,再用 UML 进行表达 ,UML != 设计。

10.3. UML 应用
用 UML 的根本目的是为了表达你的设计思想。
对于普通人来说,UML 复杂和严格的规范,并不是需要我们每个人都精确的掌握。

10.4. 需求分析阶段

10.4.1. 用例图
用例图(Use Case Digram),是软件开发过程中第一个 UML 图。
用例图最大的作用是将复杂的用户需求通过图形清晰的表达出来。
站在客户角度观察到的, 直观的描述系统对外提供的功能。
用例图包含三个主要的元素:角色、系统、用例
这里写图片描述
角色:图中的小人即角色
系统:图中的边框即系统
用例:图中的椭圆即用例

如何识别角色?
笼统的讲:只要和系统有交互的外部实体都是角色,并非只是真实的人。

常见的角色
使用者:使用系统服务的人和系统      以微博为例:微博用户就是使用者
维护者:维护和管理系统的人和系统      以微博为例:运维人员、微博小秘书等都是维护者
监管者:监控和约束系统的人和系统      以微博为例:安全部门、政府人员、绿网
依赖者:依赖系统存在的人和系统      以微博为例:其它网站、基于微博 API 开发的 APP

用例图的关系
角色和用例的关系 无关系、关联关系 上图中“学生”和“查看分数”有关联关系

用例和用例的关系
继承,子用例是父用例的一个特殊实现。
在 UML 用例图中,泛化是通过带三角箭头的连接线表示的,箭头指向的一端是父用例,另一端是子用例。(后续如何记忆这些不同的标识会单独说明)
这里写图片描述
包含,就是某一个用例又包含更多的小用例。
在 UML 用例图中,包含是通过一个带箭头的虚线表示的,并且会有一个关键标识“<>”,箭头所指的用例是小用例,另一端是大用例。
这里写图片描述
扩展,指在原有用例功能上的一个扩展和延伸。
在 UML 图中,扩展的表示方式和包含类似,通过一个带箭头的虚线表示,并且有一个关键标识
“extend”,箭头所指的用例是基础用例,另一端是扩展用例。
这里写图片描述

依赖,指某个用例功能必须依赖另外一个用例才能完成。
这个关系不是 UML 标准的关系,但其实在实际应用中是很常见的,例如:发微博之前要登录。
这里写图片描述

10.5. 设计阶段

类图
类图主要包含两部分:类定义和类关系
类定义:用来表示某个类
类关系:用来表示类之间的关系。
类定义图包含三部分:类名称、属性区、方法区,正好与代码层面的类结构一一对应。
(+ public -private # protected)
这里写图片描述

public class Student {
public int number; //学号
public String name; //姓名
public int grade; //年级
private int age; //年龄
/**
* 学习
*/
public void study(){
}
/**
* 考试
*/
public void test(){
}
/**
* 玩耍
*/
public void play(){
}
/**
* 谈恋爱
*/
public void love(){
}
}

接口
接口的表现方法有点令人惊讶:只是一个圆圈而已,而且给了一个很可爱的名字:棒棒糖!
>![这里写图片描述](https://img-blog.youkuaiyun.com/20171124125556835?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3dsY3NkbjAwMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
UML 更早的版本中,是通过一个 interface 的标记来表示的
这里写图片描述

类关系图
继承
在 UML 图中,是通过一个带空心三角形箭头的连接线来表示继承,三角形指向的一端是父类,另一端是子类。
这里写图片描述

实现
实现是“继承”的一种特殊实现,即:当一个类继承某个接口的时候,我们称为实现。
UML 中通过一个虚线带一个空心三角箭头来表示实现,和继承的差别仅在于一个是实线,一个是虚线。(旧版)
这里写图片描述

新版的棒棒糖表示
这里写图片描述

关联
关联,就是指两个类之间有联系(主被动结构)(主宾结构)
你和公司签订了劳动合同,那么合同类、公司类、员工类就有关联关系了
公司属于合同内容之一 员工属于合同内容之一
这里写图片描述

依赖
依赖是比关联更强的一种关系,一个类“依赖”了另外一个类,就意味着一旦被依赖的类发生改变,则依
赖类也必须跟着改变。(A调用B A依赖B)
这里写图片描述
Supplier 中文翻译为“供应商”,我觉得非常贴切的形容了依赖关系。既然是供应商,总得供应一些什么东
东吧。要么供应服务(对应方法调用),要么供应内容(对应数据),甚至供应 Supplier 本身

组合 && 聚合
聚合和组合关系是一种“整体 - 部分”的关系。(ABC组成了D)
依赖关系可以形象的描述为“没有你,我寸步难行”,而聚合和组合则可以形象的描述为“没有你,我将不存在”。
那为何又分为聚合和组合两种呢?
聚合:是一种“has a”的关系,即:某个类包含另外一个类,但并不负责另外类的维护,且两个类的对
象生命周期是不一样的,“整体”销毁后,“部分”还能继续存在。
组合:是一种“owns a”的关系,即:某个类包含另外一个类,且还要负责另外类的维护,且两个类的对
象生命周期是一样的,“整体”销毁后,“部分”同样被销毁了。
在 UML 中,聚合是通过一个带空心菱形的连接线来表示的,菱形所在的一端是“整体”,另一端是“部分”。组合的表达方式和聚合基本一致,只是菱形由空心改为实心的。
这里写图片描述
这里写图片描述
这里写图片描述

动态图
类图、类关系图结合起来,已经向我们完整的描述了一个系统的静态结构。但一个系统要能够运行起来,
光有静态结构肯定是不行的。
UML 中使用动态图来描述一个系统的动态行为,包含“状态图”、“序列图”、“协作图”、“活动图”4 种。

状态图
状态图主要用于描述一个对象的生命周期内的状态变化。有了状态图,我们就能够详细的了解某个关键对
象的状态变化,以及触发这些变化的因素。
UML 的状态可以分为 3 类:初始态、终止态、中间态。
如下图:实心圆圈代表初始态,圆角方框代表中间态,实心圆环代表终止态,箭头表示状态转换。
这里写图片描述

活动图
活动图主要用于描述一个工作流程或者计算流程。其关注点是在完成某项工作的过程中,系统中的哪些对
象承担了什么样的任务、做了什么处理,以及这些对象之间的先后交互关系。
这里写图片描述

序列图
序列图主要用于描述对象按照时间顺序组织的消息交互过程,其关键特征是强调按照“时间顺序”来组织
对象的交互,所以序列图有时又称为“时序图”或者“顺序图”。
序列图具有非常明显的一个特征:时间线,或者叫做生命线。
这里写图片描述
协作图
协作图主要用于描述按照对象之间的关联来组织的消息交互过程,其关键特征是强调“对象关系”来组织
对象的交互。
序列图具有非常明显的一个特征:时间线,或者叫做生命线。
这里写图片描述
后续的设计模式分析内容会有单独的UML类图的识别练习以及记忆方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值