### UML参考手册知识点概述
#### 一、UML基础知识概览
**统一建模语言**(Unified Modeling Language, **UML**)是一种图形化的标准建模语言,主要用于软件系统的建模和文档化。它提供了一套丰富的符号系统来描述软件系统的结构、行为以及系统构建过程中的各种元素。
#### 二、UML术语大全
- **抽象**: 抽象是UML中的一个重要概念,用于描述不能被直接实例化的类、用例等元素。抽象元素通常代表一种模板或者模式,它自身不直接参与系统运行,而是通过其派生的具体元素发挥作用。
- **抽象类**: 不可直接实例化的类,通常用于定义一组共有的特性和行为。
- **抽象操作**: 没有具体实现的操作,需要由子类来具体化。
- **具体操作**: 已经具有实现的操作,可以在所有子类中使用而不需改变。
- **具体类**: 可以直接实例化的类,通常已经包含了所有必要的特性和行为。
- **抽象用例**: 定义了行为片段,自身不能单独使用,但可以通过泛化、包含或扩展关系参与到具体用例的定义中。
#### 三、UML标准元素
- **类(Class)**: 用于表示现实世界中的对象或抽象概念,具有属性和操作。
- **接口(Interface)**: 描述了一组操作的集合,可以被多个类实现。
- **关联(Association)**: 表示类之间的关系,分为单向和双向。
- **聚合(Aggregation)**: 特殊形式的关联,表示“has-a”关系,表明整体与部分之间的一种弱关系。
- **组合(Composition)**: 也是特殊形式的关联,表示“contains-a”关系,表明整体与部分之间的一种强关系。
- **依赖(Dependency)**: 表示一个事物的变化会影响另一个事物。
- **泛化(Generalization)**: 表示继承关系,子类继承父类的特性和行为。
#### 四、UML元模型
UML元模型是指UML本身的模型,它描述了UML语言本身是如何构成的,包括UML中的基本元素、它们之间的关系以及如何使用这些元素来构建模型。
#### 五、抽象类与具体类
**抽象类**与**具体类**的区别在于抽象类不能直接实例化,而具体类则可以直接创建对象。抽象类通常用于定义一组共有的特性和行为,而具体类则是在抽象类的基础上进行具体实现。
- **表示法**: 抽象类或抽象操作的名字通常用斜体字表示。
- **示例**:
- 图13-1展示了一个抽象类`Account`,它有一个抽象操作`computeInterest`和一个具体操作`deposit`。`Account`有两个具体子类,因为子类是具体的,所以它们各自都必须实现`computeInterest`操作。
- **讨论**: 类的状态可能随着设计的发展而变化,例如,原本具体类可能会被建模成抽象类,或者抽象类会变成具体类。
#### 六、抽象超类规则
- **抽象超类规则**: 所有的非叶类必须是抽象的,除非是为了以后说明的抽象叶类外,所有的叶类必须是具体的。
- **目的**: 减少模型中的模糊性和复杂度。
- **案例分析**:
- 图13-2展示了一个具体超类`Letter`的例子,它有一个`getNextSentence`操作和一个`resetCursor`操作。由于`Letter`是一个具体超类,因此无法区分普通`Letter`类和`EncryptedLetter`子类中操作的不同实现。
- 图13-3展示了遵循抽象超类规则的情况。这里`Letter`是一个抽象类,`getNextSentence`是一个抽象操作,而`resetCursor`是一个具体操作。这种设计更对称,更容易理解和维护。
#### 七、总结
通过对UML术语、标准元素和元模型的深入理解,我们可以更好地利用UML来进行软件系统的建模和文档化工作。抽象类与具体类的概念及其在设计中的应用对于理解和构建复杂的系统结构至关重要。抽象超类规则有助于优化模型设计,减少不必要的复杂性,并提高代码的可维护性和可扩展性。