UML 学习

UML 是理解架构设计或设计模式的基础

himg

UML 基本元素

三个基本模块

  • 事务
  • 关系

四种事务

  • 结构事务: 类, 接口, 协作, 用例, 活动类, 组件, 节点
  • 行为事务: 交互, 状态机
  • 分组事务: 包
  • 注释事务: 注释

四种关系

  • 依赖
  • 关联
  • 实现
  • 泛化

十种图

类图

类图是使用面向对象的社会最流行的 UML 图. 它描述了在一个系统中的对象和他们的关系, 能够让我们在正确编写代码以前对系统有一个全面的认识.

一个单独的类图描述系统的一个具体方面, 收集类图表示整个系统. 基本上, 类图表示系统的静态视图.

类图是唯一可以直接映射到面向对象的语言 UML 图. 因此, 它被广泛应用于开发者社区.

对象图

对象图 (Object Diagram) 描述的是参与交互的各个对象在交互过程中某一时刻的状态. 对象图可以被看作是类图在某一时刻的实例.

在 UML 中, 对象图使用的是与类图相同的符号和关系, 因为对象就是类的实例.

组件图

组件图是一种特殊的 UML 图来描述系统的静态实现视图. 组件图包括物理组件, 如库, 档案, 文件夹等.

此图是用来从实施的角度. 使用一个以上的元件图来表示整个系统. 正向和逆向工程技术的使用, 使可执行文件组件图.

部署图

组件图是用来描述一个系统的静态部署视图. 这些图主要用于系统工程师.

部署图是由节点和它们之间的关系. 一个高效的部署图是应用软件开发的一个组成部分.

用例图

用例图是从用户角度描述系统功能, 并指出各功能的操作者, 用来捕捉系统的动态性质.

一个高层次的设计用例图是用来捕捉系统的要求, 因此它代表系统的功能和流向. 虽然用例图的正向和反向工程是不是一个很好的选择, 但他们仍然在一个稍微不同的方法来模拟它.

包图

状态图

交互图, 用于捕获系统的动态性质.

交互图包括序列图和协作图, 其中: 序列图显示对象之间的动态合作关系, 它强调对象之间消息发送的顺序, 同时显示对象之间的交互; 协作图描述对象间的协作关系, 协作图跟时序图相似, 显示对象间的动态合作关系.

活动图

活动图是 UML 的动态模型的一种图形, 一般用来描述相关用例图, 活动图是一种特殊的状态图.

准确的活动图定义: 活动图描述满足用例要求所要进行的活动以及活动间的约束关系, 有利于识别并行活动. 活动图是一种特殊的状态图, 它对于系统的功能建模特别重要, 强调对象间的控制流程.

序列图

协作图

UML 类图中类元的六大关系

  • Dependency (依赖): A 类使用了 B 类, 对类 B 进行修改会影响到类 A
  • Association (关联): A 类与 B 类有逻辑上的连接, 关联关系用起始于一个对象并指向其所使用 的对象的简单箭头来表示. 类 A 依赖于类 B.
  • Aggregation (聚合): A 类有一个 B 类 (类似数组中的一个元素, 可以移除), 聚合关系使用一端是空心菱形, 另一端指向组件的箭头来表示. 类 A 依赖于类 B.
  • Composition (组合): A 类拥有一个 B 类 (类似人身上的一个器官, 不可移除), 组合与其他关系的区别在于组件仅能作为容器的一部分存在, 组合与聚合关系的符号相同, 但箭头起始处的菱形是实心的. 类 A 依赖于类 B.
  • Realization (实现): B 类实现了接口 A. 类 A 定义的方法由接口 B 声明. 类 A 依赖于类 B.
  • Inheritance (继承): B 类是一个 A 类 (或者 B 类扩展 A 类). 类 A 继承类 B 的接口和实现, 但是可以对其进行扩展. 类 A 依赖于类 B.

关系由若至强

himg

himg

himg

himg

UML 图表示的是类之间的关系

许多人常常在实际想说聚合和组合时使用"组合"这个术语. 其中最恶名昭彰的例子是著名的"组合优于继承" 原则. 这并不是因为人们不清楚它们之间的差别, 而是因为 组合 说起来更顺口(例如"对象组合") .