序言
UML:统一建模语言
软件开发的最高目标:满足人的需要
模型:对现实的简化,对事物的一种抽象
为什么建模:为了更好地理解复杂的系统
建模目的:
(1)帮助我们按照需要对系统进行可视化
(2)允许我们详细说明系统地结构和行为
(3)给出了一个指导我们构造系统的模板
(4)对我们所做出的决策进行文档化
建模的四项基本原理:
(1)选择创建什么模型:不同的模型启发能力是不一样的
(2)每一种模型可以再不同的精度级别上表示(纸飞机——>无人机)
(3)最好的模型是与现实相关联的
(4)单个模型是不充分的,对每一个重要系统最好用一组几乎独立的模型去处理(不全面:盲人摸象)
UML 构建模块的所有要素,UML 的构建块的定义如下:
(1)事物
(2)关系
(3)图
1. UML 构建模块的所有要素
内容来源:UML构建模块_w3cschool
1.1.事物
事物是实体抽象化的最终结果,是 UML 构建块最重要的组成部分,事物的分类如下:
结构事物
行为事物
分组事物
注释事物
1.1.1.结构事物
结构事物是模型中的静态部分,用以呈现概念或实体的表现元素,是软件建模中最常见的元素,接下来是对结构化物件的简要描述:
A 类(class)
类是指具有相同属性、方法、关系和语义的对象的集合;
B 接口(interface)
接口是指类或组件所提供的服务(操作),描述了类或组件对外可见的动作;
C 协作(collaboration)
协作定义元素之间的相互作用;
D 用例(use case)
用例定义了执行者(在系统外部和系统交互的人)和被考虑的系统之间的交互来实现的一个业务目标;
E 组件(component)
组件描述物理系统的一部分;
F 节点(node)
一个节点可以被定义为在运行时存在的物理元素;
1.1.2.行为事物
行为事物指的是 UML 模型中的动态部分,代表语句里的 “动词”,表示模型里随着时空不断变化的部分,包含两类:
A 交互:
交互被定义为一种行为,包括一组元素之间的消息交换来完成特定的任务。
B 状态机:
状态机由一系列对象的状态组成,它是有用的,一个对象在其生命周期的状态是很重要的。
1.1.3.分组事物
可以把分组事物看成是一个"盒子",模型可以在其中被分解。目前只有一种分组事物,即包(package)。结构事物、动作事物甚至分组事物都有可能放在一个包中。包纯粹是概念上的,只存在于开发阶段,而组件在运行时存在。
包:
封装是唯一一个分组事物可收集结构和行为的东西。
1.1.4.注释事物
注释事物可以被定义为一种机制来捕捉UML模型元素的言论,说明和注释。注释是唯一一个注释事物。
注释:
注释用于渲染意见,约束等的UML元素。
1.2.关系
关系是另一个最重要的构建块UML,它显示元素是如何彼此相关联,此关联描述的一个应用程序的功能,UML中定义了四种关系:
1.2.1.依赖关系
依赖是两件事物之间的语义联系,其中一个事物的变化也影响到另一个事物。
1.2.2.协作
一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系);
1.2.3.泛化(继承关系)
泛化可以被定义为一个专门的元件连接关系与一个广义的元素,它基本上描述了在对象世界中的继承关系,是一种一般化-特殊化的关系;
1.2.4.实现关系
类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
1.2.5.关联关系
1.3.UML图
UML 图的整个讨论的最终输出所有要素,关系用于使一个完整的UML图,图中表示的系统。
UML 图的视觉效果是整个过程中最重要的部分。
图是事物集合的分类,UML 中包含多种图:
类图: 类图描述系统所包含的类、类的内部结构及类之间的关系;
对象图:对象图是类图的一个具体实例;
用例图: 用例图从用户的角度出发描述系统的功能、需求,展示系统外部的各类角色与系统内部的各种用例之间的关系;
顺序图: 顺序图表示对象之间动态合作的关系;
协作图:协作图描述对象之间的协作关系;
活动图: 活动图描述系统中各种活动的执行顺序。
状态图: 状态图描述一类对象的所有可能的状态以及事件发生时状态的转移条件;
部署关系图:部署关系图定义系统中软硬件的物理体系结构;
组件图:组件图描述代码部件的物理结构以及各部件之间的依赖关系;
1.4.常用符号
2.用例模型(需求分析阶段)
用例模型 是软件开发人员分析客户业务流程的结果,是面向对象分析的结果
2.1.参与者(执行者)
参与者位于系统之外,并和系统进行交互的一类事物(人、物【参与者】、其他软件子系统【构造型】)
寻找参与者:
(1)操作系统的人
(2)不同的参与者角色
2.2.用例
系统为响应参与者引发的一个事件而执行的一系列的处理/动作。
例如:ATM
(1)取钱
(2)存钱
(3)修改密码
2.3.寻找用例
根据以下问题来识别用例:
(1)参与者希望系统提供什么功能
(2)系统是否存储和检索信息
(3)当系统状态改变时,是否通知参与者
(4)是否存在影像系统的外部事件,是哪个参与者通知系统这些外部事件
(5)哪个参与者触发了活动
用例名称需要是短小精悍的动名词
2.4.用例图中的关系
(1)参与者与用例之间:实现(关联关系)
(2)参与者与参与者之间:泛化关系
(3)用例和用力之间的关系:包含关系(<<include>>
)或扩展关系(<<extend>>
)或泛化关系(例如“下订单”和“网上下订单”)
2.5.用例描述
仅有用例图还不够,还需要详尽的文字描述
一个事件流通常包含一个主事件流和多个异常事件流(可选事件流)
描述模板(包含内容):
(1)总结:用例大概有哪些功能
(2)参与者:用例大概有哪些参与者
(3)前置条件:在什么情况下使用用例,用例能够运行(例如:取钱的前置条件:ATM能够正常工作)
(4)描述:对用例的描述(例:取钱:第一步,把卡插进去;第二步,输入密码…)
(5)后置条件:用例执行完后,用例应该处于哪种状态(例如:取完钱后,银行账户上会扣掉对应数量的钱)
(6)异常情况:用例执行过程中出错后可能出现的情况(例如:取500,卡里只有400)
3.活动图(需求分析阶段)
3.1.活动图定义:
(1)活动图描述了在一个过程中,顺序的/并行的活动及其之间的关系
(2)活动图是顶点和弧的集合(活动节点(动作) / 流(分支/转移/分叉/会合) / 对象值 / 注解和约束 / 泳道等)
(3)活动图与用例图互为补充,主要用于 需求分析 阶段
3.2.活动图基本建模元素
4.类图(系统设计阶段)
4.1.类图定义
4.1.1.类class的定义
(1)具有相同属性、操作、方法、关系或者行为的一组对象的表述符
(2)类是真实世界事物的抽象
(3)问题域的类:在对系统建模时,将会涉及到如何识别业务系统中的事物,这些事物构成了整个业务系统。在UML中,把所有的这些事物都建模为类
4.1.2.对象Object的定义
(1)当这些事物存在于真实世界中时,它们是类的实例,并被称为对象
(2)同一类的各对象具有:相同的属性(但属性值可以不同)、提供相同的操作、哟相同的语义
4.1.3.把类相关的元素画在一起,即为类图
4.2.类图基本建模元素
4.3.类图的产生
为了能够很清楚的标识清楚类、属性、操作、关系
4.4.类图的表示
4.5.类图的命名
(1)类的命名:每个单词的第一个字母大写:Student
(2)操作名:除第一个词外,每个单词首字母大写:selectCourse()
(3)属性名:除第一个词外,每个单词首字母大写:myAddress
5.顺序图(设计阶段)
是一种动态视图,在编代码之前检验类模型的可行性
5.1.案例视图(赤壁之战)
从上到下的时间顺序:
5.2.相关概念
(1)交互:对象之间为实现某一功能二必须实施的协作过程、动态行为,称为交互。
(2)消息:对象间的协作和交流表现为一个对象以某种方式启动另一个对象的活动,这种交流在UML中被定义为消息。
(3)建模元素:对象(角色)、参与者、消息(同步、异步)
5.3.结构化控制
(1)可选执行(标签:opt),条件满足则执行表内操作
(2)条件执行(标签:alt)
(3)并行执行(标签:par)
(4)循环(迭代)执行(标签:loop),例:loop(1,3):表格内的循环1次到3次
6.状态图
6.1.状态图的概念
状态图针对的是单个对象 的不同状态,而交互图、活动图则是对给共同工作的对象群体 行为建模
6.1.1.状态(state)
(1)是对象的生命期中的一个条件或状况
(2)例如:灯有几种状态(灯亮,灯灭,灯坏了…)
6.1.2.状态机(state machine)
(1)是一种行为
(2)说明对象在它的生命期中,响应事件所经历的状态序列 以及它们对每个事件的响应
6.1.3.状态图(state diagram)
(1)状态机可以用状态图来可视化
(2)状态图显示了一个状态机,它强调从状态到状态的控制流
6.1.4.状态组成
(1)名称
(2)进入/退出动作(进入或退出时需要进行的额外的动作)
(3)内部迁移
(4)子状态
(5)延迟事件
例如车内灯的状态有两种:亮或灭,事件例如按下按钮,则会使灯的状态从亮迁移到灭;汽车有两种状态开或者停:
视频学习来源:中国大学慕课《面向对象分析与设计》by华东师范大学