使用 UML 面向对象分析和设计 课堂笔记(二)

目录

一.静态建模

1.静态建模基本概念

2.确定类和对象

3.类关系图

二.深入了解静态建模

1.类分类

2.类之间的关系补充

3.继承元素

4.接口

三.动态建模

1.动态建模概念

2.交互关系图

3.序列关系图

4.通信关系图

四.深入了解动态建模 

1.状态机关系图

2.活动关系图



一.静态建模

1.静态建模基本概念

  • 创建类关系图:标识类、接口、协作及其关系
  • 创建对象关系图:表示类的特定实例的属性值 以及 对象之间的关系
  • 创建 类和对象关系图 是为了 对软件系统的静态结构建模

2.确定类和对象

  • 从以下方面了解软件系统的类和对象,并对系统静态结构进行建模:
  1. 用例:
  2. 软件系统的职责:
  3. SRS 文档:

3.类关系图

  • UML 为类的属性和操作提供以下可见性:
  1. +:表示 属性或操作 对其他类 可见
  2. -:表示 属性或操作 对其他类 不可见
  3. #:表示 基类中的属性或操作 对派生类 可见
  4. ~:表示 属性或操作 对同一个包里的类 可见
  • 对象引用的类,必须已经存在:
  • 对象关系图:表示对象的名称和属性,还包含类名以及特定实例的属性值
  • 类和对象之间的 关系 如下:
  1. 关联:表示两个类的对象间的静态关系,关联是双向 或 单向的
  2. 依赖:一个类的属性和操作的变化 会影响 另一个类的属性和操作
  3. 泛化:超类(基类)和子类(派生类)如何相关
  4. 实现:组件会指定另一个组件实现的协定,这两个类关系图的组件就是 共享实现关系
     
  • 关联关系:
  • 关联关系:
  • 关联关系分类:
  • 聚合:如果类 A 是类 B 的一部分,而类 A 可以 独立存在,类 A 和 B 是 共享聚合关系
  • 复合:如果类 A 包含类 B 并 控制 类 B 的生存期,类 A 和 B 是 共享复合关系
  • 依赖关系:
  • 泛化关系:
  • 实现关系:
  • 类的对象之间可能存在以下几类 多重性 关系:
  1. 一个 (1)
  2. 一或零个 (0..1)
  3. 多个 (0..*)
  4. 一或多个 (1..*)
 

二.深入了解静态建模

1.类分类

  • 抽象类 参数化类 工厂类 自我链接类

1.1 抽象类

  • 抽象类没有直接实例,定义了一组子类的公共特征及行为
  • 抽象类的 UML 表示法与简单类相同,但是,抽象类的名称 是斜体的
  • 车是抽象类,又可以分成 公交车、出租车等具体类

1.2 参数化类

  • 参数化类提供一种 机制,使我们可以用 操作和类 来操作不同的 数据类型
  • 不能创建参数化类的对象
  • 要使用参数化类中定义的函数,需要通过 使用类 来实现参数化类
  • 类型参数的数据类型 在 实现参数化类的类中 定义

1.3 工厂类

  • 一个类的多个对象具有相同属性值,那么这个类就称为工厂类

1.4 自我链接类

  • 类的对象可能会满足多个角色,这种类称为自我链接类
  • Employee 类中的 Stevens 既是雇员又是项目主管,因此是自我链接类

2.类之间的关系补充

  • 除了泛化关系、依赖性关系和关联关系,还可以表示类和对象之间的关系:递归聚集、受限关联

2.1 递归聚集

  • 同一个类的两个对象之间的关联关系
  • 对象关系图中的递归聚集:
  • 类关系图中的递归聚集:

2.2 受限关联

  • 将类的一个对象与其他类的一个特定对象或一组对象相关联

3.继承元素

  • 派生元素:从相同类型的 一个或多个元素 派生一个元素
  • 派生元素包括:派生属性(从其他属性值生成值的属性)、派生关联(关联可从类关系图的其他关联中推导出)

4.接口

  • 接口:操作集合,表示类或组件提供的服务
  • UML 提供了以下表示法来实现接口:
  • 棒棒糖表示法:不会显示接口或类中包含的操作的详细信息  
  • 虚线箭头表示法:提供接口和类的操作的详细信息  

三.动态建模

1.动态建模概念

  • 帮助开发人员描述系统 应采取什么行为 来表示静态成分行为 进而满足所需的需求
  • 动态建模有助于理解:对象间的交互、对象状态

2.交互关系图

  • 交互关系图有以下几类:顺序、通信、时序、交互概览
  • 交互关系图:显示协作对象之间的交互,包括 协作、交互
  • 协作可以具有以下类型的角色:
  1. 分类器角色:描述 可形成部分协作 的对象
  2. 关联角色:描述 可形成部分协作 的链接
  • 一个对象调用另一个对象的方法时,它们之间会有一系列 消息 流过
  • 消息类型:
  • 创建交互关系图时,决定类的职责
  • 类的方法表示类的职责,类的职责可以由一个或多个方法一起实现

3.序列关系图

  1. 将对象沿 X 轴排列
  2. 交互中对象发送和接收的消息 按时间升序 沿 Y 轴排列

4.通信关系图

  • 通信关系图 以 消息的形式 表示对象间的交互

四.深入了解动态建模 

1.状态机关系图

1.1 事件和转换

  • 对象通过 显示事件状态的更改 响应状态机(反应对象)
  • 要绘制状态机(反应对象),就要创建状态机关系图
  • 描述反应对象需要(状态关系图各种元素包括): 状态(简单状态、复合状态)、转换、事件、操作
  • 状态:对象位于 内存 时具有的条件,每个对象都有 初始状态 和 最终状态
  • 状态关系图:用于描述 发生事件 而更改的 对象的各种状态
  • 可以 更改状态 的各类事件:调用事件、信号事件、时间事件
  • 可能导致对象状态转换的发生的组件:事件触发器
  • 入口操作:当对象输入特定状态时,它需要执行一组操作
  • 出口操作:当对象退出特定状态时,它需要执行一组操作
  • 对象在特定状态,执行特定活动 ,用 do关键字
  • 下图显示 document 对象处于 Displaying Document 状态时 会一直刷新,直到发生事件
  • 有些事件 只会导致 执行某些 内部操作,这类事件描述为 “内部转换”
  • 下图显示了在 document 对象处于 Displaying Document 状态时 单击超链接 对象会一直显示同一个文档
  • 状态分为:简单状态(不包含子状态)、复合状态(包含一个或多个子状态)
  • 延迟事件:对象进入特定状态之前,这件事是延后的,进入特定状态才能响应这件事

1.2 创建状态机关系图

  1. 确定用例的协作。
  2. 标识每个对象的开始和最终状态。您还需要标识每个对象开始状
  3. 态和最终状态的前置条件和后置条件。
  4. 通过考虑所有前置条件和后置条件来标识每个对象的稳定状态。
  5. 标识导致对象状态发生更改的事件。
  6. 将操作与每个转换和状态相关联。
  7. 使用循序和并发子状态来简化状态关系图。
  8. 检查对象是否达到您已标识的状态。
  9. 确保对象不会获得无法转换为其他状态的状态。
  10. 检查状态关系图是否准确地描绘了事件的顺序及其响应。

1.3 子状态机

  • 带有子状态机的状态关系图:
  • 对象进入子状态机,可能获得子状态机 初始状态之外的 状态
  • 用子状态机引用 状态内的 桩状态 来指示:对象转换为子状态机初始状态之外的其他状态
  • 桩状态:

1.4 桩转换和复杂转换

  • 桩转换:将对象的状态从 简单状态 更改到 子状态机(桩)状态
  • 桩转换:

    • 复杂转换 具有 多个源状态 或 目标状态
    • 如果转换的 并发子状态,则将使用 汇合 来描述转换
    • 如果转换的 目标并发子状态,则将使用 分岔 来描述转换
    • 如果 源状态和目标状态 均为 并发子状态,则其 汇合 表示为 并行控制线程的同步
     

2.活动关系图

  • 使用活动关系图中的 操作和活动状态,要识别并描述 过程的 工作流和操作

2.1 确定流、分区、指针

  • 流或边 表示 两个操作间的关系,包括:
  1. 控制流:表示活动与活动的 I/O 对象之间的关系
  2. 对象流:表示对象或数据可经过的路径
  • 分区会创建活动状态逻辑组,以便 每个组 都表示 特定类的职责
  • 使用 对活动进行分类并描述活动流的泳道 来执行分区
  • 在线交易系统的活动关系图:
  • 信号:发生在过程外的事件,但仍然对过程有影响
  • 使用 <<signal>> 关键字 类中(类关系图) 声明信号
  • 活动关系图 可同时描述 发送和接收信号
  • 在线交易系统的活动关系图中,系统保持 wait状态 直到产品可用
  • 因此,当收到 产品可用的信号,就要对 使用产品 进行建模
  • 指针:能够在活动关系图中表示 活动状态的输入和输出参数
  • 出站操作状态的 输出参数类型 应与 入站操作状态的 输入参数类型 相匹配
  • 转换:执行特定操作的控制流,会将 出站操作的输出参数类型 转换为 所需的入站操作的参数类型

2.2 描述扩展区域、流结束和汇合规范

  • 扩展区域:表示多次执行的一组操作,可以使用以下 模式 来实现扩展区域:
  • 并发:这些操作在每个输入值上 同步执行
  • 迭代:以 输入值进入扩展区域的 顺序 在 输入值上 执行操作
  • 流:在输入值上以 随机顺序 执行操作
  • 流结束:描述 没有任何传出转换的 特定操作状态
  • 活动关系图中可能有并行流,可以用 分岔和汇合 来描述这类并行流

2.3 创建活动关系图

  • 标识活动关系图的作用域,作用域包括识别需要描述的流程,可以是用例、部分用例、一组用例或类的操作,应在活动关系图顶部的注释中,提供建模元素的简短描述以及一个唯一标识符
  • 添加开始和结束状态
  • 添加操作状态和对象状态,
  • 识别角色需要为处理活动而启动的操作和子活动,在关系图中绘制这些操作状态
  • 在操作或子活动之间添加转换,标识要执行的首个操作状态
  • 从开始状态向首个操作状态添加转换以显示控制流的方向
  • 添加其他操作状态的所有转换
  • 从最后一个操作状态向结束状态添加转换以显示流和活动的结束
  • 添加判定点
  • 添加分支并合并构造以分组和合并转换,从而显示流方向的更改,此外,使用转换各自的警戒条件标记转换
  • 标识流的结束,标识可能先于活动结束的流,将这些流建模为流结束
  • 标识并发操作并使用分岔和汇合对其建模

2.4 小结

  • 描述控制流并使用活动关系图识别各用例间的依赖性
  • 要使用活动关系图中的操作和活动状态,需要识别并描述过程 的工作流和操作
  • 用活动关系图的基本元素(如转换)来对控制流建模
  • 分支和合并元素用于对决策(如 if 条件)建模
  • 泳道能根据活动状态的职责对其进行分组
  • 指针能将出站操作的参数转换为入站操作
  • 转换将出站参数的参数转换为入站参数
  • 扩展区域元素描述用三种模式处理输入元素的循环:并发、序列和流
  • 扩展区域还可以充当筛选器来过滤输入集合以生产输出集合
  • 流结束元素用于对流结束(如活动中发生的异常)建模
  • 分岔和汇合元素用于对并行流建模并维护并发
  • 要创建活动关系图,需要识别要建模的过程、操作和信号以及并行流
  •  

发布了29 篇原创文章 · 获赞 21 · 访问量 1645

猜你喜欢

转载自blog.csdn.net/Lyrelion/article/details/105402096