Unified Modeling Language (UML)又称统一建模语言或标准建模语言,,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,构造和配置等。是捕获商业流程、促进沟通、管理复杂性、定义软件架构,促进软件复用的重要途径!
目录
- UML简介
- 一、UML静态建模—用例图
- 建立用例模型
- (1)发现用例者
- (2)获取用例
- (3)执行者间关联
- (4)用例间关联
- 1、泛化关系
- 2、扩展关系
- 3、包含关系
- 二、对象模型中的类图
- 类图的定义
- 属性的语法
- 方法的语法
- 类与类之间的关系
- 1、关联关系
- 重数
- 角色
- 单向关联和双向关联
- 2、聚集关系
- 共享聚集
- 组合聚集
- 3、泛化(继承)
- 4、细化(实现)
- 5、依赖
- 三、动态建模机制—状态转换图
- 1、状态
- 2、状态转换
- 3、判定
- 4、历史状态
UML简介
UML是图示化、说明、构造一个软件系统并生成其文档的标准语言。
UML独立于开发过程,可与大多数面向对象开发过程配合使用。
UML独立于程序设计语言,可用C++、Java等任何一种面向对象程序设计语言实现。
.
其中UML建模中最常用的三种图是:用例图、类图、状态转换图。
那么接下来大灰狼就来和大家分别聊一聊这三种图的基本建模方法
.
一、UML静态建模—用例图
用例图描述外部执行者(actor)与系统的交互,表达系统的功能,也可以说是系统提供的服务。
它的主要元素是:“用例”和“执行者”
用例:执行者与计算机的一次典型交互,代表系统某一完整的功能。
用椭圆表示:
执行者:描述与系统交互的人或物,代表外部实体(如用户、硬件设备或其他软件系统)。
用UML中的小人表示:
建立用例模型
建立用例模型一般需要分为4步:
(1)发现用例者
在这里有几个发现用例者的技巧可以参考:
①谁使用该系统
②谁改变系统的数据
③谁从系统获取信息
④谁需要系统的支持以完成日常工作任务
⑤谁负责维护、管理并保持系统正常运行
⑥系统需要应付哪些硬件设备
⑦系统需要和哪些外部系统交互
⑧谁对系统运行产生的结果感兴趣
(2)获取用例
向执行者提出问题获取用例以下几个方法,同样获取用例需要知道:
①执行者需要获取何种功能,需要作什么?
②执行者需要读取、产生、删除、修改或存储系统中的某种信息
③系统发生事件和执行者间‘是否需要通信’
(3)执行者间关联
执行者之间存在泛化关系
如下面企业团体、客户、与个人之间的关系
(
(4)用例间关联
用例之间存在泛化关系、扩展关系和包含关系,这三个关系中的每一个用例之间都存在相应的联系。
1、泛化关系
即一般和特殊的关系
如:
有父用例的行为,可出现在父用例出现的任何地方添加自己的行为。
2、扩展关系
允许一个用例扩展另一用例的功能,与泛化关联类似,有更多的规则限制。
基本UseCase必须声明若干“扩展点”,扩展UseCase只能在扩展点上增加新行为。
如下:
.
3、包含关系
一个基本UseCase行为包含另一个UseCase行为。
.
二、对象模型中的类图
类图的定义
描述类的信息及类与类之间的关系
如下面这个图就是一个类图:
类的图形符号
在UML中,类的图形符号为长方形
如图所示:
从上到下每一个长方形依次表示:
- 上:类的名字
- 中:类中的属性
- 下:类中的服务(方法)
下面这就是一个完整的User类:
熟悉了类的基本构造,接下来就是类中的属性和方法语法了。
.
属性的语法
【可见性】属性名【:l类型】【= 初值】
属性的可见性同样是有三种:
- 公有(+)public
- 私有(-)private
- 保护(#)protect
方法的语法
【可见性】方法名【(参数列表)】【:返回类型】
与属性的可见性一样,方法也是有公有、私有、保护三种可见性。
我们在作程序开发的时候,不可能只有一个类,而是很多个类相互关联的结果。
那么接下来大灰狼和大家聊一聊类与类之间的关系。
类与类之间的关系
类与类之间的关系有以下五种:
- 关联
- 聚集
- 泛化
- 细化
- 依赖
每一种关系也都有它特定的表示和含义:
1、关联关系
表示两个类之间存在某种语义上的联系。
符号:箭头
如下面“程序员类”和“计算机类”,程序员使用计算机,则他们之间存在一定的关
联,
表示如下:
重数
同时在关联关系中还存在一个名称叫做“重数”
关于重数的定义是:
表示该类有多少个对象与对方的对象连接
书写位置:写在表示关联的实线箭头两端
注意:如果不写的话默认重数为1
如程序员和计算机这两个类
一名程序员可以使用多台计算机,一台计算机可以由多名程序员使用,所以这两个类之间就是一对多的关系。表示如下:
角色
还有一个名词叫“角色”
显式的标明角色名有助于被人理解类图
如程序员对计算机是使用的关系,所以在计算机类处就应该有所标明。
如下:
单向关联和双向关联
同时,还分为单向关联和双向关联
如程序员使用计算机就是一个单向关联,因为计算机不会使用程序员
对于双向关联由叫自关联
如丈夫和妻子
2、聚集关系
聚集关系是一种特殊的关联关系,描述的类与类之间的关系是整体与部分的关系。
如陈述需求中使用的“包含”、“组成”、“分为…部分”等字句,意味着存在聚集关系。
例如:一个教室当中有多个学生,教室与学生之间就属于聚集关系。
同样,聚集关系也可以分为共享聚集和组合聚集
共享聚集
如果在聚集关系中处于部分方的对象可参与多个处于整体方对象的构成,则该聚集成为共享聚集。
共享聚集的特点是:部分方对象不随整体方对象的消亡而消亡。
共享聚集符号:空心菱形
例如上面说的教室和学生类,
组合聚集
如果部分类完全隶属于整体类,部分与整体共存,则该聚集称为组合聚集
组合聚集的特点是:整体不存在了部分也会随之消失(或失去价值了)
组合聚集符号:实心菱形
例如:一个窗口类由多个文本框类组成,窗口类和文本框类就属于组合聚集
3、泛化(继承)
类与类之间存在“一般—特殊”关系
符号:空心三角形
例:宠物类与狗类、狗类与斗牛犬类就属于泛化关系
4、细化(实现)
当对同一个事物在不同抽象层次上描述时,这些描述间具有细化关系
符号:虚线空心三角形
5、依赖
A类使用到了B类,B类本身是一个独立的类,而这种使用关系是具有偶然性的、临时性的、非常弱的,B类的变化也会影响到A类,这样就说A类依赖B类,A、B两个类是依赖关系。
值得注意的是,依赖和关联具有如下的区别:
通常情况下,A类使用B类的对象作为它的成员变量或操作函数。
在关联关系中,A类使用B类的对象作为它的全局变量。
依赖的符号表示:使用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。
例:有个动物类,动物要呼吸,需要氧气类,动物类和氧气类就属于依赖关系。
.
三、动态建模机制—状态转换图
表示一个对象(或模型元素)的生存史,显示触发状态转移的事件和因状态改变导致的动作。
1、状态
活动:活动名/动作表达式
Entry入口活动、exit出口活动、do内部执行活动
组合状态:包含嵌套的子状态
2、状态转换
事件说明(守卫条件)/动作表达式~发送子句
事件说明: 事件名(参数表)
守卫条件: 事件发生且守卫条件为真状态转换
动作表达式:状态转换开始、执行的表达式
发送子句: 动作特例,在状态转换期间发送消
3、判定
工作流按保安条件取值发生分支
4、历史状态
转移到组合状态的历史状态,对象恢复上次离开组合状态的最后一个子状态
以上就是UML三种基本图形的绘制方法,掌握UML图形的绘制,是进行软件开发设计的首要条件,之后大灰狼还会继续更新软件开发设计中动态模型的绘制要领。
觉得不错记得 “点赞关注” 哟!
同时你也可以关注我的微信公众号 “灰狼洞主” 获取更多软件开发设计的技术分享。公众号回复 “python笔记” 即可获取Python入门到精通全套电子书籍和常用函数速查手册!
大灰狼期待与你一同进步!