目录
一.静态建模
1.静态建模基本概念
- 创建类关系图:标识类、接口、协作及其关系
- 创建对象关系图:表示类的特定实例的属性值 以及 对象之间的关系
创建 类和对象关系图 是为了 对软件系统的静态结构建模2.确定类和对象
- 从以下方面了解软件系统的类和对象,并对系统静态结构进行建模:
- 用例:
- 软件系统的职责:
- SRS 文档:
3.类关系图
- UML 为类的属性和操作提供以下可见性:
- +:表示 属性或操作 对其他类 可见
- -:表示 属性或操作 对其他类 不可见
- #:表示 基类中的属性或操作 对派生类 可见
- ~:表示 属性或操作 对同一个包里的类 可见
- 对象引用的类,必须已经存在:
对象关系图:表示对象的名称和属性,还包含类名以及特定实例的属性值- 类和对象之间的 关系 如下:
- 关联:表示两个类的对象间的静态关系,关联是双向 或 单向的
- 依赖:一个类的属性和操作的变化 会影响 另一个类的属性和操作
- 泛化:超类(基类)和子类(派生类)如何相关
- 实现:组件会指定另一个组件实现的协定,这两个类关系图的组件就是 共享实现关系
- 关联关系:
- 关联关系:
- 关联关系分类:
- 聚合:如果类 A 是类 B 的一部分,而类 A 可以 独立存在,类 A 和 B 是 共享聚合关系
- 复合:如果类 A 包含类 B 并 控制 类 B 的生存期,类 A 和 B 是 共享复合关系
- 依赖关系:
- 泛化关系:
- 实现关系:
类的对象之间可能存在以下几类 多重性 关系:
一个 (1) 一或零个 (0..1) 多个 (0..*) 一或多个 (1..*)
二.深入了解静态建模
1.类分类
- 抽象类 参数化类 工厂类 自我链接类
1.1 抽象类
- 抽象类没有直接实例,定义了一组子类的公共特征及行为
- 抽象类的 UML 表示法与简单类相同,但是,抽象类的名称 是斜体的
- 车是抽象类,又可以分成 公交车、出租车等具体类
1.2 参数化类
- 参数化类提供一种 机制,使我们可以用 操作和类 来操作不同的 数据类型
- 不能创建参数化类的对象
- 要使用参数化类中定义的函数,需要通过 使用类 来实现参数化类
- 类型参数的数据类型 在 实现参数化类的类中 定义
1.3 工厂类
- 一个类的多个对象具有相同属性值,那么这个类就称为工厂类
1.4 自我链接类
- 类的对象可能会满足多个角色,这种类称为自我链接类
- Employee 类中的 Stevens 既是雇员又是项目主管,因此是自我链接类
2.类之间的关系补充
- 除了泛化关系、依赖性关系和关联关系,还可以表示类和对象之间的关系:递归聚集、受限关联
2.1 递归聚集
- 同一个类的两个对象之间的关联关系
- 对象关系图中的递归聚集:
- 类关系图中的递归聚集:
2.2 受限关联
- 将类的一个对象与其他类的一个特定对象或一组对象相关联
3.继承元素
- 派生元素:从相同类型的 一个或多个元素 派生一个元素
- 派生元素包括:派生属性(从其他属性值生成值的属性)、派生关联(关联可从类关系图的其他关联中推导出)
4.接口
- 接口:操作集合,表示类或组件提供的服务
- UML 提供了以下表示法来实现接口:
棒棒糖表示法:不会显示接口或类中包含的操作的详细信息 虚线箭头表示法:提供接口和类的操作的详细信息
三.动态建模
1.动态建模概念
- 帮助开发人员描述系统 应采取什么行为 来表示静态成分行为 进而满足所需的需求
- 动态建模有助于理解:对象间的交互、对象状态
2.交互关系图
- 交互关系图有以下几类:顺序、通信、时序、交互概览
- 交互关系图:显示协作对象之间的交互,包括 协作、交互
- 协作可以具有以下类型的角色:
- 分类器角色:描述 可形成部分协作 的对象
- 关联角色:描述 可形成部分协作 的链接
- 一个对象调用另一个对象的方法时,它们之间会有一系列 消息 流过
- 消息类型:
- 创建交互关系图时,决定类的职责
- 类的方法表示类的职责,类的职责可以由一个或多个方法一起实现
3.序列关系图
- 将对象沿 X 轴排列
- 交互中对象发送和接收的消息 按时间升序 沿 Y 轴排列
4.通信关系图
- 通信关系图 以 消息的形式 表示对象间的交互
四.深入了解动态建模
1.状态机关系图
1.1 事件和转换
对象通过 显示事件状态的更改 响应状态机(反应对象) 要绘制状态机(反应对象),就要创建状态机关系图 描述反应对象需要(状态关系图各种元素包括): 状态(简单状态、复合状态)、转换、事件、操作 状态:对象位于 内存 时具有的条件,每个对象都有 初始状态 和 最终状态 状态关系图:用于描述 发生事件 而更改的 对象的各种状态 可以 更改状态 的各类事件:调用事件、信号事件、时间事件 可能导致对象状态转换的发生的组件:事件触发器 入口操作:当对象输入特定状态时,它需要执行一组操作 出口操作:当对象退出特定状态时,它需要执行一组操作 对象在特定状态,执行特定活动 ,用 do关键字 下图显示 document 对象处于 Displaying Document 状态时 会一直刷新,直到发生事件 有些事件 只会导致 执行某些 内部操作,这类事件描述为 “内部转换” 下图显示了在 document 对象处于 Displaying Document 状态时 单击超链接 对象会一直显示同一个文档 状态分为:简单状态(不包含子状态)、复合状态(包含一个或多个子状态) 延迟事件:对象进入特定状态之前,这件事是延后的,进入特定状态才能响应这件事1.2 创建状态机关系图
- 确定用例的协作。
- 标识每个对象的开始和最终状态。您还需要标识每个对象开始状
- 态和最终状态的前置条件和后置条件。
- 通过考虑所有前置条件和后置条件来标识每个对象的稳定状态。
- 标识导致对象状态发生更改的事件。
- 将操作与每个转换和状态相关联。
- 使用循序和并发子状态来简化状态关系图。
- 检查对象是否达到您已标识的状态。
- 确保对象不会获得无法转换为其他状态的状态。
- 检查状态关系图是否准确地描绘了事件的顺序及其响应。
1.3 子状态机
- 带有子状态机的状态关系图:
- 对象进入子状态机,可能获得子状态机 初始状态之外的 状态
用子状态机引用 状态内的 桩状态 来指示:对象转换为子状态机初始状态之外的其他状态 桩状态:1.4 桩转换和复杂转换
桩转换:将对象的状态从 简单状态 更改到 子状态机(桩)状态桩转换:
- 复杂转换 具有 多个源状态 或 目标状态
- 如果转换的 源 为 并发子状态,则将使用 汇合 来描述转换
- 如果转换的 目标 为 并发子状态,则将使用 分岔 来描述转换
- 如果 源状态和目标状态 均为 并发子状态,则其 汇合 表示为 并行控制线程的同步
2.活动关系图
- 使用活动关系图中的 操作和活动状态,要识别并描述 过程的 工作流和操作
2.1 确定流、分区、指针
- 流或边 表示 两个操作间的关系,包括:
- 控制流:表示活动与活动的 I/O 对象之间的关系
- 对象流:表示对象或数据可经过的路径
- 分区会创建活动状态逻辑组,以便 每个组 都表示 特定类的职责
- 使用 对活动进行分类并描述活动流的泳道 来执行分区
- 在线交易系统的活动关系图:
- 信号:发生在过程外的事件,但仍然对过程有影响
- 使用 <<signal>> 关键字 在 类中(类关系图) 声明信号
- 活动关系图 可同时描述 发送和接收信号
- 在线交易系统的活动关系图中,系统保持 wait状态 直到产品可用
- 因此,当收到 产品可用的信号,就要对 使用产品 进行建模
- 指针:能够在活动关系图中表示 活动状态的输入和输出参数
- 出站操作状态的 输出参数类型 应与 入站操作状态的 输入参数类型 相匹配
转换:执行特定操作的控制流,会将 出站操作的输出参数类型 转换为 所需的入站操作的参数类型2.2 描述扩展区域、流结束和汇合规范
- 扩展区域:表示多次执行的一组操作,可以使用以下 模式 来实现扩展区域:
- 并发:这些操作在每个输入值上 同步执行
- 迭代:以 输入值进入扩展区域的 顺序 在 输入值上 执行操作
- 流:在输入值上以 随机顺序 执行操作
- 流结束:描述 没有任何传出转换的 特定操作状态
- 活动关系图中可能有并行流,可以用 分岔和汇合 来描述这类并行流
2.3 创建活动关系图
- 标识活动关系图的作用域,作用域包括识别需要描述的流程,可以是用例、部分用例、一组用例或类的操作,应在活动关系图顶部的注释中,提供建模元素的简短描述以及一个唯一标识符
- 添加开始和结束状态
- 添加操作状态和对象状态,
- 识别角色需要为处理活动而启动的操作和子活动,在关系图中绘制这些操作状态
- 在操作或子活动之间添加转换,标识要执行的首个操作状态
- 从开始状态向首个操作状态添加转换以显示控制流的方向
- 添加其他操作状态的所有转换
- 从最后一个操作状态向结束状态添加转换以显示流和活动的结束
- 添加判定点
- 添加分支并合并构造以分组和合并转换,从而显示流方向的更改,此外,使用转换各自的警戒条件标记转换
标识流的结束,标识可能先于活动结束的流,将这些流建模为流结束 标识并发操作并使用分岔和汇合对其建模2.4 小结
- 描述控制流并使用活动关系图识别各用例间的依赖性
- 要使用活动关系图中的操作和活动状态,需要识别并描述过程 的工作流和操作
- 用活动关系图的基本元素(如转换)来对控制流建模
- 分支和合并元素用于对决策(如 if 条件)建模
- 泳道能根据活动状态的职责对其进行分组
- 指针能将出站操作的参数转换为入站操作
- 转换将出站参数的参数转换为入站参数
- 扩展区域元素描述用三种模式处理输入元素的循环:并发、序列和流
- 扩展区域还可以充当筛选器来过滤输入集合以生产输出集合
- 流结束元素用于对流结束(如活动中发生的异常)建模
- 分岔和汇合元素用于对并行流建模并维护并发
- 要创建活动关系图,需要识别要建模的过程、操作和信号以及并行流