勿忘初心做自己 发表于 2022-9-16 17:21:37

软件工程 统一建模语言(Unified Modeling Language UML) 第4篇随笔

4.1、统一建模语言(Unified Modeling Language UML)

是一种可视化的语言


[*]规约系统的制品
[*]构造系统的制品
[*]建立系统制品的文档
UML应用范围

[*]可用于对象方法和构件方法
[*]可用于所有应用领域和不同的平台
1.面向对象方法术语/符号
主要有两类术语:

[*]一种是表达结构化事物的术语
[*]一种是表达关系的术语
2. UML 术语表
一种是表达结构化事物的术语

[*]对象:是系统中用来描述客观事物的一个实体。一个对象由一组属性和对这组属性进行操作一组方法组成。
[*]类:是具有相同属性、操作、关系和语义的一组对象集合
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150213684-1396495529.png
[*]属性:描述了对象的具体特征,属性具有属性名和属性值(属性状态)
语法:可见性 属性名:类型 = 缺省值 {性质串}
可见性:public(+)、protected(#)、private(-)、包内的(~)
[*]操作(方法):一个操作抽象了一个对象所要做的事情,并且该类的其它对象也要做这件事
语法:可见性操作名(参数表):返回类型{性质串}
可见性:public(+)、protected(#)、private(-)、包内的(~)
[*]接口: 是操作的一个集合,其中每个操作描述了类、构件或子系统的一个服务
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150236144-148557604.png
[*]协作:是一个交互,涉及交互的三要素:交互各方、交互方式以及交互内容
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150305691-1051739711.png
[*]用况:对一组动作序列的描述,系统执行这些动作应产生对特定参与者有值的、可观察的结果
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150322240-19409749.png
[*]主动类(类似java中的主启动类的main方法):至少具有一个进程或线程的类。
表示:两条竖线
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150336087-311572874.png
[*]构件:系统设计中的一种模块化部件,通过外部接口隐藏了它的内部实现
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150350287-1958117647.png
[*]制品:系统中包含物理信息、可替代的物理部件
[*]结点:运行时存在的物理元素,通常表示一种具有记忆能力和处理能力的计算机资源
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150408414-1495122751.png
[*]多态性(Polymorphism):是指一般了中定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为
多态性实现的方法:

[*]泛化
[*]定义一个抽象类或接口类

[*]细化:是类目之间的语义关系,其中一个类目规约了保证另一类目执行的契约
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150424121-2110139029.png
[*]包:是模型元素的一个分组,一个包本身可以被嵌套在其他包中,并且可以含有子包和其他类型的模型元素
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150437586-2061509928.png
一种是表达关系的术语

[*]关联:反映了类与类之间的静态关系

[*]关联名(name):关联可以有一个名字
[*]角色(role):一个类参与一个关联时,有一个特定的角色
[*]多重性(multiplicity):类中对象参与一个关联的数目
[*]聚合(aggregation):一种特殊形式的关联,表达一种“整体/部分“关系,一个类是另一个类的一部分
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150454918-1514731251.png
[*]组合(composition):是聚合的一种特殊形式
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150508320-1446519784.png
[*]限定符:一个限定符是一个关联的属性或属性表,这些属性的值将对该关联相关的对象集做了一个划分
[*]关联类:一种模型元素,它有关联和类的特性
[*]约束

[*]泛化/继承:特殊类(子类)的对象拥有其一般类(超类)的全部属性和服务,称作特殊类对一般类的继承

[*]子类可继承父类的属性和操作,并可有更多的属性和操作
[*]子类可以替换父类的生明
[*]若子类的一个操作的实现覆盖了父类同一个操作的实现,这就是多态性,但两个操作必须具有相同的名字和参数
[*]一个类可以有0个、1个或多个父类。没有父类且最少有一个子类的类被称为根类或基类;没有子类的类称为叶子类
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150520674-581824639.png

[*]依赖:是一种使用关系,用于描述一个类目使用另一类目的信息和服务
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150533835-1207236521.png

[*]绑定(bind):表明源的实例化是使用目标给定的实际参数来达到的
[*]导出(derive):表明可以凑够目标推导出源
[*]允许(permit):表明目标对源而言是可见的
[*]实例(instanceOf):表明源的对象是目标的一个实例
[*]实例化(instantiate):表明源的实例是由目标创建
[*]幂类型(powertype):表明源的目标的幂类型
[*]精化(refine):表明源比目标更精细
[*]使用(use):表明源的公共部分的语义依赖于目标的语义

[*]实现(realization):是类目之间的一种语义关系,其中一个类目规约了保证另一个类目执行的契约
3.静态模型表达工具 -- 类图
类图是给出一组类、接口、协作以及它们之间关系的图
作用:

[*]可用于可视化地表达系统的静态模型
[*]是构件图和部署图的基础
类图的内容:类、接口、依赖、泛化、关联
类图的一般用法
类图主要用于对系统的静态设计视图(投影)进行建模,支持表达系统的功能需求,即系统提供给最终用户的服务。


[*]对系统中的词汇建模
当需要决策:使用哪些类目和UML关系,作为系统的组成部分;哪些类目和UML关系,处于系统之外。
[*]对简单协作进行建模
当需要一组类来表达系统中的某一事物语义时,可使用类图详细描述这组类以及它们之间的关系
[*]对逻辑数据库模式建模
当需要给出数据库概念设计的指导,可对要在数据库中存储的信息,采用类图相应的数据库模式进行建模
系统行为(交互)的建模工具 -- 顺序图
顺序图是一种交互图,即由一组对象以及这些对象之间的关系组成,其中还包含这些对象之间被发送的消息
顺序图包含的内容:

[*]交互各方:角色或对象
[*]交互方式:通信或链
[*]交互内容:消息
5点说明:

[*]顺序图包含了一些由时间定序的消息

[*]如果消息是异步的,用枝行箭头线表示:
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150554543-175456346.png
[*]如果消息是同步的,
则用实心三角箭头线表示:
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150607699-977577797.png同步消息的回复用虚线枝行箭头线表示:
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150618781-702492786.png

[*]对象生命线,用于表示一个对象在一个特定的时间段中的存在
[*]控制焦点,表达一个对象执行了一个动作的时间段
[*]时序,一条生命线上的时序是非常重要的,使消息集合形成了一个偏序关系,建立了一个因果链
[*]顺序图中的结构控制
常见的控制类型:

[*]选择执行(Optional execution):一种结构控制类型,标签为opt
[*]条件执行(Conditional execution):一个结构控制类型,标签为alt
[*]并发执行(Parallel execution):一个结构控制类型,标签为par
[*]迭代执行(iterative execution):一个结构控制类型,标签为loop

系统行为(生存周期)的建模工具 -- 状态图
状态图是显示一个状态机,其中强调了从一个状态到另一个状态的控制流
状态图包含:

[*]简单状态和组合状态
[*]事件
[*]转换
状态:
一个状态是类目的一个实例(简称对象)在其生存周期的一种条件(condition)或情况(situation),该期间该对象满足这一条件,执行某一活动或等待某一消息
表示:
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150632918-251506531.png状态的分类:

[*]初态:表达状态机默认的开始位置,用实心圆来表示:
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150646183-195313945.png
[*]终态:表达状态机的执行已经完成,用内含一个实心圆的圆来表示:
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150658678-919382780.png
[*]正常状态(中间态):既不是初态又不是终态
https://img2022.cnblogs.com/blog/2745283/202208/2745283-20220830150709863-1985848539.png
状态的规约:

[*]名字:是一个标识状态的文本串
[*]进入/退出效应(effect)

[*]entry:该标号在进入该状态时所需要执行的、由相应动作表达式规定的动作,称为进入动作
[*]exit:该标号在退出该状态时所需要执行的、由相应动作表达式规定的动作,称为退出动作

[*]状态的内部转移:值没有导致该状态改变的内部转移;动作标号“do”
[*]子状态:如果一个状态机中引入了另一个状态机,那么背引入的状态机称为子状态机

[*]非正交子状态机(顺序子状态机)
[*]正交子状态机(并发子状态机)

事件:
一个事件是对一个有意义的发生的规约,该发生有其自己的时空


[*]内部事件:是在系统内对象之间传送的事件
[*]外部事件:是在系统和它的参与者之间传送的事件
可模型化的4种事件

[*]信号(signal):是消息的一个类目,是消息的类型
[*]调用(call):一个调用事件表示对象接受到一个操作调用的请求

[*]可以使用在类的定义中的操作定义来规约调用事件
[*]该事件或触发状态机中的一个状态转换,或调用目标对象的一个方法
[*]”信号“是一种异步事件,而”调用“一般是同步事件,但调用可以规约为异步调用

[*]时间事件和变化事件

[*]时间事件:是表示推移一段时间的事件
[*]变化事件:是表示一个条件得到满足或表示状态的一个变化

[*]发送事件和接受事件

[*]发送事件:表示一个实例发送一个调用事件或信号事件
[*]接受事件:表示类的一个实例接受一个调用事件或信号事件

状态转换:
一个状态转换是两个状态间的一种关系
状态转换的规约,5个部分:

[*]源状态:引发该状态转换的那个状态
[*]转换触发器:在源状态中由对象识别的事情,并且一旦满足其监护条件,则使状态发生转换
[*]监护条件:一个布尔表达式,当某个转换器触发器接受一个事件时,如果该表达式有值为真,则触发一个转换;值为假,则不发生状态转换,并且此时如果没有其它可以被触发的转换,那么该事件就要丢失
[*]效应:一个可执行的行为
[*]目标状态:状态完成后所处的那个状态

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 软件工程 统一建模语言(Unified Modeling Language UML) 第4篇随笔