UML
参考
- https://www.yuque.com/saodai/ss8tp9
- B站视频
- 我这里只是个记录,最好还是看上边文章中记载的内容,有图好理解
- UML 概念: 统一建模语言
- UML词汇表包含三种构造块:事务(对模型中最具代表性的成分抽象)、关系(把事务结合在一起)、图(聚集相关的事务)
- UML 事务:
- 结构事务:模型的静态部分,名词,描述概念或物理元素,包括 类、接口、用例、构件等
- 行为事务:模型的动态部分,动词,描述跨越时间空间的行为,包括交互、状态机、活动等
- 分组事务:模型的组织部分,最主要的分组事务是包,结构事务、行为事务或者其他分组事务都可以放在包里
- 注释事务:模型的解释部分,用来描述、说明、标注,注解是最主要的注释事务
- UML 关系
- 依赖关系:是两个事务之间的语义关系,一个事务(独立事务)发生变化,会影响另一个事务(依赖事务)的语义;
- 图形上通过虚线+箭头实现
- A(依赖事务) ·······> B(独立事务) A 依赖于 B,B 事务的变化会引起 A 事务的语义变化 - 关联关系:是一种结构关系,描述了一组链,链是对象之间的链接,通常分为聚合关系和组合关系,描述了整体和部分之间的关联
- 单向关联:实线+箭头 A() ——————> B() ,它使得一个类知道另一个类的属性和方法,A类依赖于B对象,并把B作为A的一个成员变量,则A,B存在关联关系,关联可以是单向的也可以是双向的(双向关联不用箭头)
- 双向关联: 实线 A —————— B ,关联多重度位于实线的上方,表示一个 A类实例可以关联多少个B类实例,一个B类实例又可以关联多少个 A类实例,通常多重度可以用 (1 *)(1 1…*)等表示, 多对多的双向关联,一般可以将关联关系提取出一个“关联类”
- 聚合关系: 实线+空菱形 A(部分) ——————<> B(整体) 整体的生命周期与部分不同步,整体消失,部分依然可以存在
- 组合关系:实线+实心菱形 A(部分) ——————<+>(实心菱形不好画,用<+>代替) B(整体) 整体生命周期与部分同步,整体消失,部分也消失 - 泛化关系:是一种 “特殊” 和 “一般” 之间的关系,特殊元素(子)的对象可以替代一般元素(父)的对象,子元素共享了父元素的结构和行为
- 图形上通过 实线+空心三角箭头
- A(特殊、子) ———————|> B(一般、父) - 实现关系:是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约
- 通常的使用情况: 1. 接口和实现他们的类或构件之间;2. 用例和实现他们的协作之间
- 图形上通过 虚线+空心三角箭头
- A(类) ········|> B(接口) - UML 类图(静态)
- 类图:展现了一组对象、接口、协作和他们之间的关系,类图中可以包含注解和约束,也可以有包或子系统
- 类图对静态设计视图建模的三种方式
1. 对系统词汇建模
2. 对简单的协作建模
3. 对逻辑数据库模式建模 - 类图中类的组成:分为三层,第一层
类名, 第二层属性名(属性名1: 属性的类型) , 第三层方法名(方法名1(): 方法返回值类型),其中属性名和方法名前可以有修饰符+public 公有的;-private 私有的;#protected 受保护的; - 对象图(静态)
- 对象图:展现了某一时刻,一组对象及他们之间的关系
- 对象图中对象与类图中类的区别:对象分为两层,第一层是
对象名(对象名:类名), 第二层属性
- 用例图(静态)
- 用例图:展现了一组用例、参与者、以及他们之间的关系
- 参与者:参与者是与系统交互的外部实体,可以是使用者或者参与系统交互的外部系统,基础设备等
- 用例:是从用户角度描述的系统行为,用例是一个类,代表了一类功能,而不是该功能的某一个具体实现
- 包含关系:用例与用例之间的关系,图形上使用虚线+箭头+《include》表示:A(基本用例) ···《include》···> B(被包含用例) ,箭头指向被包含的用例, A用例包含B用例,则A执行用例B一定也会被执行
- 扩展关系:用例与用例之间的关系,图形上使用虚线+箭头+《extend》表示:A(扩展用例) ···《extend》···> B(被扩展用例) , 箭头指向被扩展的用例,被扩展后的用例B在执行时可能会遇到特殊的情况或者可选的情况,这个时候就可以用 扩展用例
- 包含关系与扩展关系区分:
- 区分包含关系:使用某个用例,必然会使用另外一个用例
- 区分扩展关系:当执行某个用例,不一定要去执行另外一个用例
- 用例图:展现了一组用例、参与者、以及他们之间的关系
- 序列图(动态)
- 序列图,描述了以时间顺序组织的对象之间的交互活动,序列图是对一个用例进行详细过程的分解
- 图形上,参与交互的对象放在图的上方,沿水平方向排列,发起交互的对象放左边;然后把对象间发送和接收的消息,按照时间顺序由上到下排列
- 对象生命线:由对象起始的一条垂直向下的虚线,表示对象在一段时间内存在
- 控制焦点:对象生命线之上的一段瘦高的矩形,表示对象执行一个动作所经历的时间段
- 调用消息用实线+箭头表示,返回消息用 虚线+箭头表示
- 调用消息所要执行此消息方法的是箭头指向的对象
- 通信图(动态)
- 通信图也成协作图,强调收发消息对象的结构组织
- 通信图与序列图的不同,在于通信图有路径、通信图有顺序号,延同一个链可以展示许多消息,每个消息都有唯一的顺序号
- 通信图与顺序图是同构的,可以相互转换
- 通信图展现了对象间的消息流及其顺序
- 状态图(动态)
- 状态图展现了一个状态机,它由状态、转换、事件和活动组成
- 状态图对系统的动态方面建模
- 当对系统、类或用例的动态方面建模时。通常是对反应型对象建模
- 状态:任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式
- 状态分为初态(实心圆)终态(实心圆外再加一层圆)和中间状态
- 状态图中的状态是一个圆角矩形,第一层是状态名,中间一层时状态变量(可以没有),最后一层为活动表(也可以没有)
- 状态之间用带箭头的线表示 “转换(迁移)” 箭头线上的事件发生时,转换开始
- 一个状态图只能有一个初态,可以有多个终态或者没有终态
- 活动:由 “事件名/动作表达式” 组成 位于状态的活动表中,有如下三种标准事件
- entry: 入口动作,进入状态,立即执行
- do: 内部活动,占用有限时间,可以中断工作
- exit:出口动作,退出状态,立即执行
- 事件:某个特定时刻发生的时间,它是对引起系统做动作,和一个状态转换成另一个状态的事件的抽象
- 转换由 “事件(监护条件)/ 动作” 组成
- 转换包括两个状态
- 事件触发转换
- 活动(动作)可以在状态内执行也可以在状态转换时执行
- 监护条件是一个 boolean 表达式
- “事件”发生且“监护条件为真”状态转换才发生,状态转换开始后才会执行“动作”
- 组合状态:一组状态转换作用矩形包围,作为另一个状态图中的一个状态存在
- 组合状态中的所有子状态完成,才会走组合状态外的其他状态
- 活动图(动态)
- 活动图展现了系统从一个活动到另外一个活动的流程,对系统的功能建模很重要,强调了对象间的控制流程
- 活动图有起始、终止、圆角矩形组成的活动、实线+箭头组成的流、并发分叉、并发汇合、分支、分支上的监护表达式组成
- 用活动图来对工作流建模、对操作建模
- 并发分叉后直接相连的活动可同时执行
- 构件图(静态)
- 构件图也称为组件图,展现了一组构件之间的组织和依赖
- 与类图相关,通常把构件映射为一个或多个类、接口或者协作
- 构件图有特殊的标记,构件图之间通过 供接口(空心圆)和 需接口(圆弧)对接,供接口提供相应的方法实现,需接口来调用这个方法
- 部署图
- 部署图用来对系统物理层面建模
- 部署图立体图形,《artifact》表示制品
- 部署图展现了系统软件和硬件间关系,在实施阶段使用
- 部署组件之间的关系类似包依赖
- 总结
- 静态建模:类图、对象图、用例图
- 动态建模:序列图、通信图、状态图、活动图
- 物理建模:构件图、部署图
- 交互图:序列图(顺序图、时序图)、通信图(协作图)
本文介绍了UML的基本概念,包括统一建模语言中的事务、关系和图。详细解析了UML的各种关系,如依赖、关联、泛化等,并阐述了类图、对象图、用例图等静态建模方式,以及序列图、状态图、活动图等动态建模方式。
1304

被折叠的 条评论
为什么被折叠?



