Fork me on GitHub

UML(2)

面向对象系统分析与设计(2)

引子

统一建模语言 UML:

- 特点:可视化、实践性强、面向对象的工业标准、多视角多结论、
- 前提:软件系统能被视为相互关联对象的集合
- 误解:
    1. 被认为等同于过程或者理论
    2. 被认为等同于面向对象的分析与设计
    3. 被认为等同于设计指南
- 结构:
    1. 基础模块(Building blocks):物、表、关系等
    2. 相同的机理(Common mechanisms):要求、修饰、划分、可扩展性
    3. 体系(Architecture):用例、过程、实现、部署等
- 使用 UML 的优势:提高质量、更高效。

为什么建模?

- 从现实中抽象:获得必要的细节,过滤掉非必要的细节
- 有助于设计人员处理复杂问题:人类在处理复杂问题时存在局限性
- 集中在关键问题上
- 有助于理解需求、简捷设计、稳定系统的提升

为什么面向对象?

- 更精准地反映现实
- 缩小现实与模型之间的语言鸿沟
- 定位现实的改变
  • 可以将现实建模成一系列相互关联的对象。

关键词区分

建模

建模就是从概念实现的过程

概念

  • conceptual
  • 关注与问题相关的对象的定义
  • 不关心对象的任何实现

规范/特定化/专业化

  • specification
  • 关注对象是如何促进问题的解决的
  • 关注对象的相互关系
  • 不关注对象内部的关系

实现

  • implementation
  • 关注怎么为一个对象写 code
  • 关注对象内部、对象之间的方方面面

抽象

  • 是一个物理过程,选择一些属性或特点,排除掉一些不相关的属性。

特点:

  • 抽象总是基于某种目的
  • 一件事物可以有不同种的抽象
  • 任何抽象,都无法完全描述现实

不追求完美描述,建模够用就行

抽象也有几种类型,分类、聚合、概括等

分类

  • classification
  • 按照相同属性的对象实例,分成组
  • 具有 member 的关系

聚合

  • aggregation
  • 忽略 parts 之间的差异,组成一个整体,类图中父类一侧采用空心菱形
  • 具有 part 的关系
  • 如果两者存在同生共死的关系,称为 composition,用实心菱形表示
  • 当在 aggregation 和 association 之间难以抉择时,选 association

概括/泛化

  • generalization
  • 反义词:specialization 专业化
  • 按照对象的某种相同属性(discriminator 有侧重的、片面的、非全面的),分组
  • Van、Car、Truck 可以根据 vehicle-type 泛化成 Vehicle。
    • 前者是 subclass,后者是 superclass,根据 discriminator
  • 具有 sub/super 的关系
继承
  • 通常对一些相似的属性或操作进行继承,可以减少不必要的描述,提升描述的使用率,但要注意:
    • 只在一个地方对属性和行为下定义(理解:子类多次定义,不如父类一次解决)
    • 允许子类对象替代父类对象
继承以外
  • 子类可以增加新的属性、覆盖父类方法
  • 继承时(比如多重继承)如果出现冲突(比如两栖车同时继承了陆车的size和水车的size,但含义分别是载重量和排水量,此时就是 name conflict),可以采用多种办法解决:
    1. 用户自定义命令;
    2. 预定义命令;
    3. 重定义名称(only 属性)

抽象类

  • abstract class
  • 没有自身的实例
  • 在 UML 中用斜体表示

覆盖

  • coverage
  • 有以下几种情况:
    • 部分重叠 overlapping:比如父类:运动员,子类:网球运动员、足球运动员。父类实例可以属于多个子类。
    • 互斥 disjoint:比如父类:人,子类:男人、女人。父类实例最多只能属于一个子类。
    • 完全 complete:任一父类都能在子类中找到归属。
    • 不完全 incomplete:存在某些父类,在子类中无法找到归属。
  • 重叠且不完全,比如上面运动员的例子。
  • 重叠且完全,比如父类:课程,子类:毕业生课程、在校生课程。
  • 互斥且完全,比如父类:大学生,子类:毕业生和在校生。
  • 互斥且不完全,比如父类:树,子类:橡树、椰子树等。

1

上文是抽象,下文是实现

对象

  • object
  • 是一种概念/抽象/事物,具有鲜明的边界和行为(来自别处的 request,要做出的某些操作)。
  • 例如:张三的银行账户

接口

  • interface
  • 描述对象能表现出的操作

特性

  • properties
  • 对象具有 identity、state、behavior 三种特性

对象的抽象

  • encapsulation
  • 在外部接口和内部实现之间,划分了一个明显的界线
    • 隐藏不必要的实现、确保模块化;
    • 具有可见的 public 接口和隐藏的 private 实现
    • public 接口对外提供服务

  • class
  • 定义:一系列具有共同点的对象的描述
    • 共同点:state、behavior、relationships、semantics(语义)
  • 提供了一个创建对象的 template。
  • class 是一个工厂,object 是一个实例。
  • class 可以理解为一种松耦合、高内聚的模块

属性

  • attribute
  • 数据的一种描述
  • 基础属性和衍生属性:出生日期和年龄(后者可以通过前者计算得到)

操作

  • operation
  • 对象在 class 中可能会用到的操作
  • 副作用:方法的执行可能会改变某个类的状态(read 操作不会产生副作用)

方法

  • method
  • 是 operation 的实现
  • 一个 operation 可以有多种 method

作用范围

  • scope
  • 一般的属性或操作是单对象实例作用范围的
  • 有一些属性或操作可以被类的所有对象所共享,称为类属性,在 UML 中带下划线

连接

  • link
  • 对象实例们之间的物理或理论上的联系
  • link 允许彼此间的通信
  • 例如:Person worksFor one Organization,Person teaches one Course

联结

  • association
  • 具有相同语义的一系列 links 集合的描述
  • 类图中用直线或带箭头的直线表示
    • 能显示连通性
    • 能显示清晰、可读性
  • class 之间或者 class 与自身,都有多种不同的联结方式
  • 度:存在一元(一元联结时建议赋予不同角色)、二元(应用最多)、多元联结
  • 具有多重性

qualifier

  • qualifier
  • 将 N-M 关系浓缩成 1-N 的关系

2

约束

  • constraints
  • 有:ordering、subset、general 三类
    • ordering:顺序的,如has
    • subset:自己的,比如:Chair-of 是 1-N 关系,但 Member-of 是 M-N 关系,Chair-of 是 Member-of 的子集。
-------------The End-------------