“UML及形式化建模”学习笔记


  1. 建模
  • 软件开发的最高目标是“满足人的需要”。
  • 建模的目标之一,就是减少时间和精力去理解和解决问题。
  • 建模一般是针对相对复杂的系统。
  • 建模的过程就是认识现实世界。
  • 模型没有对错,只有符合建模人目的的多少之分。
  • 为什么要建模?
    • 不能完成地理解一个复杂的系统,所以要对它建模
    • 建模是为了成功开发复杂的软件项目
  • 最好的模型是与现实相关联的。
  • 模型是对现实的简化,但是简化过程不能省略重要的细节。

UML 建模工具

StarUML

使用教程,可以参考【链接

简介

UML

UML 有三部分构成:

  • 事物
    • 结构事物
    • 行为事物
    • 分组事物
    • 注释事物
  • 关系
    • 依赖
    • 关联
    • 泛化
    • 实现
    • 类图、顺序图、通信图、构件图、活动图、包图、用例图、部署图等

UML 是统一建模语言,即 Unified Modelling Language 。

  • 语言由语法(syntax)和语义(semantics) 组成
  • UML 适用于软件开发全生命周期(SDLC)
  • UML 促进了形式化的本质(formal nature)的表达

建模通过五个方面考虑(“4+1” view)

  • 用例视图
  • 设计视图
  • 实现视图
  • 交互视图
  • 分布视图

四种关系的形状

  • 关联关系:实线。两个事物之间是一种组织、结构的关系;
  • 依赖关系:虚线箭头。是不稳定的,时间相对比较短;
  • 继承(泛化)关系:实线空心箭头。一般食物与特殊食物之间的关系;
  • 实现关系:虚线空心箭头。接口与具体实现事物之间的关系。

Use Case

Use Case 能将 需求、分析与设计、实现、测试 捆绑子一起。

  • 需求分析:分为功能性需求和非功能性需求。
  • 系统边界:通过用户和开发者两个角度来分析。
  • 参与者:代表位于系统之外并和系统进行交互的一类事物。
    • 软件系统的使用者(只需要定义一个参与者就可以代表所有的用户)
    • 直接和软件系统交互的软件系统赖以运行的软/硬件
    • 与软件系统有信息交换的计算机外部设备
  • 用例:系统为响应参与者引发的一个事件而执行的一系列的处理/动作,而这些处理应该为参与者产生一种有价值的结果
    • 用例是软件系统的功能划分
    • 用例在 UML 中是椭圆形的
  • 事件流:用例代表系统和系统参与者之间发生的一系列事件,这些事件流构成了用户对系统功能的一次使用
    • 分为主事件流和次要事件流

类的定义:具有相同属性(或者数据、信息、状态)、相同行为(或者方法、操作)的一组对象的描述符。

类是真实世界事物的抽象。

类分为:

  • 主动类
  • 一般类

属性的可见性:

  • Public (+)
  • Private (-)
  • Protected (#)
  • Implementation (~)

多重性(关系两端数量的关系):

  • 0..1 一个或者零个
  • 1 正好一个
  • 0..* 零个或者更多
  • 1..6 一到六个

聚合:整体有管理部分特有的职责,用空菱形表示,空菱形与整体类相连。

  • 例如 大学 与 学生 是聚合关系

组合:整体拥有部分的生命,用带端点的实菱形表示,实菱形与整体类相连。

  • 例如 手 与 手指 是组合关系
  • 例如 树 与 树叶 是组合关系

关联类是一个特殊的关联关系,用来表述一个关系,同时也是一个类。

实例

抽象概念的具体存在,被称为实例。

  • 一个抽象概念可以有多个实例
  • 任何一个实例可以与一个或多个抽象概念相对应

实例的命名

  • [名称]:[类型]
  • 名称是一个带有下划线的字符串
    • 没有类型的实例为 孤体实例
    • 没有类型名的实例为 匿名实例

交互

对象间的协作与交流表现为

  • 一个对象以某种方式启动另一个对象的活动
  • 这种交流在 UML 被定义为消息
  • 消息的形式有
    • 调用(call):启动某个对象的操作
    • 返回(return):操作向调用者返回一个值
    • 发送(send):当一个对象发送一个消息
    • 创建(create):此消息的发送导致目标对象被创建
    • 销毁(destroy):此消息的发送导致目标对象被销毁
  • 服务由接受消息的对象提供
  • 进程/线程实例必须是主动类
  • 消息的标志
    • 同步消息:实心箭头
    • 异步消息:枝状箭头
    • 返回消息:虚线箭头
  • 连接是关联的实例
  • 交互图分为
    • 顺序图
      • loop 的框表示循环,循环次数在 括号内
      • opt 的框表示可以选择
      • par 的框表示并行执行
    • 通信图

活动图

  • 活动与动作
    • 一个活动是一个业务过程中进行的,非原子的执行单元
    • 活动的执行最终延伸为一些独立动作的执行
      • 动作是原子的
      • 动作不能被分解
    • 每个动作将导致系统状态的改变或消息传送
  • 用 同步棒(粗直线)来说明并行控制流的分岔和汇合
    • 分支:用于描述基于某个条件的可选择路径
    • 分岔:表示把一个单独的控制流分成两个或多个并发的控制流
    • 汇合:表示两个或多个并发控制流的同步发生
  • 泳道
    • 将一个活动图中的活动分组,每一组表示某个业务组织负责的活动集
    • 每个组成为一个泳道
    • 泳道是 package 的一种

状态图

考察单个实体的动态行为时,用状态图建模。

  • 状态
    • 是对象的生命期中的一个条件或状况
    • 在此期间,对象可以响应事件、执行某活动等
    • 状态的组成部分
      • 名称
      • 进入/退出动作
      • 内部迁移
      • 子状态
      • 延迟事件
    • 图形
      • 圆角矩形
      • 开始的是 黑心圆
      • 结束的事 空心圆内套黑心小圆
    • 高级状态
      • 进入/推出做动作
      • 子状态
        • 非正交子状态:状态不相交,一次只能处于一个子系统
        • 正交(并发)子状态:在一个语境中,并发地执行两个或多个状态机
        • 分岔和汇合
          • 分岔:从一个外部状态直接迁移到一个或多个正交状态
  • 事件
    • 是对一个在时间和空间上占有一定位置的、有意义的事情的描述
    • 在状态机的语境中,一个事件是一个激励的发生,它能够触发一个状态迁移
    • 时间事件
      • after 后面跟着时间表达式
      • at 表示某个绝对时间点上发生的时间
    • 变化事件
      • when 后跟一个布尔表达式
  • 迁移
    • 在状态 A 发生事件并满足一定条件,转到状态 B
    • 组成部分
      • 源状态
      • 事件触发器
      • 触发条件
      • 效应
      • 目标状态
    • 特殊的迁移
      • 自身迁移
      • 内部迁移
    • 格式
      • 事件名称[条件]
      • 动作
  • 状态机
    • 是一种行为
    • 说明对象在它的生命期中,响应事件所经历的状态序列以及它们对每个事件的响应
  • 状态依赖
    • 对象的当前行为依赖于过去或者它的行为必须响应异步消息
  • 状态无关

高级类

  • 类目
    • 类目是一种描述行为特征和结构特征的模型元素,是 UML 中更一般的结构块。
    • 类目的种类包括:类、关联、借口、数据类型、信号、构件、节点、子系统以及用例
  • 作用域
    • 定义了类目的每一个实例是否都有自己的特征值,还是类目的所有实例都共同拥有的一个特征值
    • 如果类构成的名字下面加了下划线就是类作用域,否则就是具有实例作用域
  • 抽象类
    • 抽象类没有直接实例的类
    • 抽象类的名字用斜体字拼写
  • 抽象操作
    • 抽象类里的方法可以是未定义的
    • 斜体拼写的操作就是抽象操作
  • 多态性
    • 是指在泛化关系的层次结构中,处于不同层次的导出类的相同署名的操作,可以有不同的动态行为
  • 叶子类
    • 叶子类是没有任何导出的类
  • 根类
    • 根类是没有任何基类的类
  • 类的多重性
    • 对象的可同时存在的对象数目加以限制,称为类的多重性
  • 属性的完整语法
    • [可见性]名字[多重性][:类型][=初始值][{特性串}]
    • [可见性]名字[类型][多重性][=初始值][{特性串}]
      • 特性串是一个约束
        • [{readonly}]
  • 操作的完整语法
    • [可见性]名字([参数表])[:返回类型][{特性串}]

关系

  • 依赖关系
    • 源指向目标
    • 绑定关系
      • 箭头的起始端是一个实例化的类,标明源类是目标类的实例化
    • 导出依赖
      • 《derive》
      • 标明一个类或对象可以从另一个计算得出
    • 允许
      • 《permit》
      • 标明源从目标获得特定的可见性
    • 使用 use
      • 标明源类使用了目标类
  • 对象之间的交互
    • 发送:源类发送目标事件
    • 跟踪:标明目标是源的早期开发阶段祖先
  • 泛化关系上的约束
    • 完全
      • 泛化模型中子类已经完全列出,不可以再增加子类
    • 不完全
      • 泛化模型中子类没有完全列出,可以再增加子类
    • 互斥
      • 父类的对象最多给子类的一个子类作为类型
    • 重叠
      • 父类的对象可能以给定的子类中的一个以上子类作为类型

接口

  • 构件
    • 构件化的形式类建产品,是某一工业领域成熟化的标志
    • 系统的一个物理可替换的部分,它遵从一组接口的要求,并提供对这些接口的实现
    • 由类、子构件组成的,能够完成相对独立的子功能
  • 接口
    • 用接口对系统中的接缝建模
    • 为类或构件设定一个外部行为特性的规范,对类或构件的修改不改变这个行为规范,就可以保证其他与之关联的部分、乃至整个系统能正常工作
    • 是一系列操作的集合,它制定了一个类或者一个构件所能提供的服务
    • 接口只能拥有操作,不能拥有属性
    • 命名以大写的 I 作为开头
    • 供接口 线箭头(闭合圆圈、空心三角形)虚线
    • 需接口 空心箭头(开口、双线箭头)虚线

  • 是 UML 用来组织建模元素的机制
  • 一个元素只能被一个包拥有
  • 模型包必须包含一个名字

主动类

  • 是一个类,其实例是主动对象,拥有一个或者多个进程/线程
  • 主动类也是一种类,只不过它的实例与其他实例之间有并发行为
  • 进程
    • 是一个能用与其他进程并发执行的重量级的流
  • 线程
    • 是一个能与同一进程中的其他线程并发执行的轻量级的流
  • 控制流
    • 纯顺序系统,只有一个控制流
    • 并发系统,存在着多个控制流

构件

  • CBD
    • Componet-based Development
  • 构件
    • 定义了良好接口的物理实现单元,它是系统中可替换的部分
    • 每个构件体现了系统设计中特定类的实现
    • 图形表示
      • 用一边有两个小矩形的一个长方形表示
      • 构件名称::路径名字
    • 分为以下三个类型
      • 实施构件
      • 工作产品构件
      • 执行构件
  • 构件图用于描述软件构件以及构件之间的组织和依赖关系
  • 构件图基本组成
    • 构件
    • 接口
    • 关系
    • 还可以包含包和子系统
  • 构件和类的差异
    • 类表示逻辑抽象,而构件表示存在于计算机中的物理抽象
    • 构件表示的是物理模块而不是逻辑模块,与类处于不同的抽象级别
    • 类可以直接拥有属性和操作;而一般情况下,构件仅拥有只能通过其接口访问的操作
  • 构件的主要成分
    • 部件 part
      • 基本的实现单元,如计算、存储
      • 有名字和类型
      • 在其所在构件内有多重性
    • 端口 port
      • 被封装的构件的特定窗口,遵循指定接口的构件通过它来收发消息
    • 连接件
      • 是一种规则,知道有端口的构件之间互连,以构成构件的内部结构
      • 连接的方式:直接连接、通过接口方式互连
  • 关系
    • 构件图中最常见的是依赖和实现关系

部署图

  • 部署图则用于描述系统硬件的物理拓扑结构以及在此结构上运行的软件
    • 如果需要同时描述系统的软硬件及其关系,则需要部署图和构件图
  • 部署图展示运行时进行处理的节点和在节点上生存的制品的配置
  • 构成部署图的元素主要是
    • 节点 node
      • 可以包含对象和构件实例
      • 可以分为两类
        • 处理器
        • 设备
      • 用带有节点名称的立方体表示
      • 和构件的关系
        • 构件是参与系统执行的事物,而节点是执行构件的事物
        • 即构件是被节点执行的事物
        • 构件表示逻辑元素的物理模块,而节点表示构件的物理部署
    • 构件 component
    • 关系 relationship
    • 注释、约束、包、子系统

对象图

  • 类图
    • 描述的是系统的静态结构和关系
  • 交互图
    • 顺序图、通信图
    • 描述系统的动态特性
  • 对象图
    • 描述在某一个时间点上一组对象的状态以及它们之间的关系
    • 对象图定义:包含了在某一时间点上,一组对象的状态及它们之间的关系
    • 组成部分
      • 对象
      • 链接 Link
      • 注解
      • 约束
  • 正向工程
    • 对对象图进行正向工程在理论上是可行的,但在实际中价值不大
  • 逆向工程
    • 对象图的逆向工程对软件系统的构建,有着较大的意义
    • 对象图的逆向工程意味着在软件系统的运行过程中
      • 捕获参与交互的诸多对象的状态及相互连接并通过对象图为其建模

制品

  • 制品
    • 一种有形的信息部件,在业务过程或开发过程中使用或产生
    • 制品包括
      • 需求说明、体系结构
      • 设计、源代码、项目计划、测试
    • 制品的分类
      • 部署类制品
      • 工作产品类制品
      • 执行类制品
    • 与类
      • 类与制品都是类目
      • 类是一个概念,把类用 java 表述以后,形成一个 java 文件,就是一个制品
      • 制品代表在实现平台上占有一定的存储空间
    • 与构件
      • 制品为一个或者多个构件提供物理承载
      • 制品本身可以包含更多的其他制品
      • 制品也可以依赖求他的制品

协作

  • 协作
    • 为一个既包括动态方面、又包含静态方面的概念组块建模
    • 协作命名了一个由类、接口、其他元素组成的群体,它们共同工作,提供了比各个部分总和更强的合作行为

You may also like

LEAVE A COMMENT

Statistics

  • 0
  • 59,101

Categories

Archive

Comments