目录
[一. 面向对象基础](#一. 面向对象基础)
[1.1 面向对象基本概念](#1.1 面向对象基本概念)
[1.1.1 对象](#1.1.1 对象)
[1.1.2 消息](#1.1.2 消息)
[1.1.3 类](#1.1.3 类)
[1.1.4 继承](#1.1.4 继承)
[1.1.5 多态](#1.1.5 多态)
[1.1.6 覆盖(重写)](#1.1.6 覆盖(重写))
[1.1.7 函数重载](#1.1.7 函数重载)
[1.1.8 封装](#1.1.8 封装)
[1.1.9 类型与绑定](#1.1.9 类型与绑定)
[1.2 面向对象分析、设计与测试](#1.2 面向对象分析、设计与测试)
[1.2.1 面向对象分析(OOA)](#1.2.1 面向对象分析(OOA))
[1.2.2 面向对象设计(OOD)](#1.2.2 面向对象设计(OOD))
[1.2.3 面向对象程序设计(OOP)](#1.2.3 面向对象程序设计(OOP))
[1.2.4 面向对象测试(OOT)](#1.2.4 面向对象测试(OOT))
[1.3 面向对象设计原则](#1.3 面向对象设计原则)
[二. UML(统一建模语言)](#二. UML(统一建模语言))
[2.1 UML 三要素](#2.1 UML 三要素)
[2.2 UML 的基本构造块](#2.2 UML 的基本构造块)
[2.2.1 事物(模型的核心成分)](#2.2.1 事物(模型的核心成分))
[2.2.2 关系(连接事物的纽带)](#2.2.2 关系(连接事物的纽带))
[2.3 图(聚集相关事物的可视化载体)](#2.3 图(聚集相关事物的可视化载体))
[2.3.1 类图(静态图)](#2.3.1 类图(静态图))
[2.3.2 对象图(静态图)](#2.3.2 对象图(静态图))
[2.3.3 用例图(静态图)](#2.3.3 用例图(静态图))
[2.3.4 序列图(动态图,又称顺序图)](#2.3.4 序列图(动态图,又称顺序图))
[2.3.5 通信图(动态图,又称协作图)](#2.3.5 通信图(动态图,又称协作图))
[2.3.6 状态图(动态图)](#2.3.6 状态图(动态图))
[2.3.7 活动图(动态图)](#2.3.7 活动图(动态图))
[2.3.8 构件图(静态图,又称组件图)](#2.3.8 构件图(静态图,又称组件图))
[2.3.9 部署图(静态图)](#2.3.9 部署图(静态图))
[2.4 总结](#2.4 总结)
一. 面向对象基础
1.1 面向对象基本概念
1.1.1 对象
- 定义:基本的运行实体,为类的实例,封装了数据和行为的整体(如学生、汽车等真实存在的实体)。
- 特性:具有清晰的边界、良好定义的行为和可扩展性。
1.1.2 消息
- 定义:对象之间进行通信的一种构造,是对象交互的媒介,用于触发对象的行为。
1.1.3 类
- 定义:是对象的抽象,定义了一组大体相似的对象结构,包含数据(属性,状态,成员变量)和行为(方法,函数,成员函数)。
- 分类:
- 实体类:用于对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类(如 "用户""订单" 类)。
- 边界类:系统内部与系统外部的业务主角之间进行交互建模的类(如 "登录界面""支付接口" 类)。
- 控制类:用于对一个或几个用例所特有的控制行为进行建模,在用例执行过程中被动出现的特定行为的类(如 "订单处理""权限验证" 类)。
1.1.4 继承
- 定义:父类(基类、超类)和子类(派生类)之间共享数据和方法的机制(子类拥有父类全部非私有化的属性和方法),是类之间的一种核心关系。
- 作用:减少代码冗余,实现代码复用,支持多态的基础。
1.1.5 多态
- 定义:不同的对象收到同一个消息时产生完全不同的反应。
- 分类:
- 参数多态:不同类型参数对应多种结构类型。
- 包含多态:基于父子类型关系(如子类重写父类方法)。
- 过载多态:类似于函数重载,一个名字对应不同含义(同一方法名不同参数列表)。
- 强制多态:通过强制类型转换实现(如将 int 类型强制转换为 double 类型)。
- 支撑机制:多态由继承机制支持,利用类的继承的层次关系,结合动态绑定实现。


1.1.6 覆盖(重写)
- 定义:子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。
- 规则:在子类中重定义一个与父类同名、同参数列表、同返回值类型的方法。
1.1.7 函数重载
- 定义:与覆盖区分,函数重载与子类、父类无关,指同一类中定义多个同名但参数列表不同的方法(参数个数、类型或顺序不同)。
1.1.8 封装
- 定义:一种信息隐蔽技术,目的是使对象的使用者和生产者分离,开发者无需了解组件内部工作机制,只需知道如何使用(通过公开接口)。
- 作用:提高代码安全性、可维护性,降低耦合度。
1.1.9 类型与绑定
- 静态类型:一个对象的类型在编译时就确定。
- 动态类型:对象类型在运行时才能确定。
- 静态绑定(静态分配):基于静态类型,在程序执行前(编译时)方法已被绑定(如静态方法、私有方法的调用)。
- 动态绑定:基于动态类型,运行时根据变量实际引用的对象类型决定调用哪个方法,是多态的核心实现方式。
1.2 面向对象分析、设计与测试
1.2.1 面向对象分析(OOA)
- 目标:确定问题域,理解问题需求。
- 核心活动(五步法):
- 认定对象:按自然存在的实体确定对象(如 "图书馆管理系统" 中的 "图书""读者" 对象)。
- 组织对象:分析对象间的关系,抽象成类(如 "图书" 和 "期刊" 抽象为 "出版物" 类)。
- 对象间的相互作用:描述各对象在应用系统中的交互关系(如 "读者" 借阅 "图书" 的交互)。
- 确定对象的操作:定义对象的行为(如 "图书" 的 "借出""归还" 操作)。
- 定义对象的内部信息:确定对象的属性(如 "图书" 的 "ISBN 号""书名""作者" 属性)。
1.2.2 面向对象设计(OOD)
- 目标:设计分析模型,实现相应源代码,制定问题域的解决方案。
- 核心任务:确定类的结构、接口设计、对象交互流程设计、数据存储设计等。
- 活动:

1.2.3 面向对象程序设计(OOP)
- 目标:用面向对象程序设计语言(如 Java、C++)实现设计方案,编写可执行代码。
- 核心工作:类的实现、对象的创建与交互、继承与多态的代码实现。
1.2.4 面向对象测试(OOT)
- 特点:与普通测试步骤一致,但测试对象聚焦于类、对象及交互关系。
- 测试层次(从低到高):
- 算法层:测试类中定义的每个方法,类似单元测试(如测试 "计算器" 类的 "加法""减法" 方法)。
- 类层:测试同一个类中所有方法与属性的相互作用,是面向对象特有的模块测试(如测试 "订单" 类中 "计算总价""添加商品" 方法的协同)。
- 模板层:测试一组协同工作的类之间的相互作用,类似集成测试(如测试 "购物车""商品""用户" 类的交互)。
- 系统层:类似系统测试,验证整个系统是否满足需求(如测试 "电商系统" 的下单、支付、物流全流程)。
1.3 面向对象设计原则


二. UML(统一建模语言)
UML 是统一建模语言,与程序设计语言无关,用于可视化描述面向对象系统的结构与行为。
2.1 UML 三要素
- UML 的基本构造块 :构成模型的核心元素(事物、关系、图)。
- 支配构造块的规则:构造块的放置、组合规则(如类图中关联关系的表示规则)。
- 公共机制:贯穿整个语言的通用特性(如注释、约束、命名规则)。
2.2 UML 的基本构造块
2.2.1 事物(模型的核心成分)
UML 中有 4 种事物,分别对应模型的静态与动态部分:
| 事物类型 | 定义 | 示例 |
|---|---|---|
| 结构事物 | 模型的静态部分,描述系统的结构成分 | 类、接口、用例、构件、制品、结点 |
| 行为事物 | 模型的动态部分,描述系统的行为动作 | 交互(消息流)、活动(流程步骤)、状态机(状态转换) |
| 分组事物 | 模型的组织部分,用于划分模型结构 | 包(Package),用于归类相关元素 |
| 注释事物 | 模型的解释部分,用于添加说明 | 注释(Comment),依附于元素上的说明文本 |
- 结构事物的具体表示 :
- 类:矩形(包含类名、属性、方法),如 "Person" 类(属性:name/age,方法:eat ()/sleep ())。
- 接口:圆形或带 "<<interface>>" 标识的矩形,定义类的对外服务(如 "Payment" 接口,方法:pay (double amount))。
- 用例:椭圆形,描述参与者与系统的交互(如 "登录系统" 用例)。
- 构件:带 "<<component>>" 标识的矩形,描述系统的物理模块(如 "订单处理构件")。
- 制品:带 "<<artifact>>" 标识的矩形,描述可部署的物理文件(如 "MySQL 数据库""HTML 页面")。
- 结点:立方体,描述系统的物理设备(如 "Web Server""Client" 结点)。

2.2.2 关系(连接事物的纽带)
UML 中有 4 种核心关系,描述事物间的关联方式:
| 关系类型 | 定义 | 表示方式 | 示例 |
|---|---|---|---|
| 依赖 | 一个事物的语义依赖于另一个事物的语义(如 "类 A 调用类 B 的方法,A 依赖 B") | 带箭头的虚线(箭头指向被依赖方) | "订单类" 依赖 "日期工具类"(订单需调用日期工具获取当前时间) |
| 关联 | 结构关系,描述对象间的连接("链" 的集合),分为聚合、组合(均为 "部分 - 整体" 关系), 在关联上可以标注重复度(多重度)和角色 | 实线(聚合:空心菱形 + 实线;组合:实心菱形 + 实线,菱形指向 "整体") | 聚合:"汽车" 与 "轮胎"(轮胎可脱离汽车存在);组合:"公司" 与 "部门"(部门不可脱离公司存在) |
| 泛化 | 一般 - 特殊关系(父类 - 子类),子类继承父类的属性与方法 | 带空心三角的实线(三角指向父类) | "动物" 类泛化为 "猫""狗" 类 |
| 实现 | 一个类元(如接口)指定另一个类元(如实现类)的契约(接口的方法由实现类完成) | 带空心三角的虚线(三角指向接口) | "Payment" 接口由 " |
补充:


2.3 图(聚集相关事物的可视化载体)
UML 包含 9 种核心图,分别对应系统的静态与动态视图:
2.3.1 类图(静态图)
- 作用:为系统的静态设计视图,展现一组对象、接口、协作及它们之间的关系。
- 核心元素:类、接口、关联(聚合 / 组合)、泛化、依赖。
- 示例:"Company" 类(整体)通过聚合关系包含 "Department" 类(部分),"Department" 类泛化为 "HRDepartment""TechDepartment" 类。

- 适用情况:对系统的词汇建模、对简单的协作建模、对逻辑数据库模式建模。

2.3.2 对象图(静态图)
- 作用:展现某一时刻一组对象及它们之间的关系,是类图的 "快照"。
- 特点:在无类图时,对象图可作为静态设计视图;对象需标注属性值(如 "Li:Student" 对象,属性 "age=20""major = 计算机")。

2.3.3 用例图(静态图)
- 作用:展现一组用例、参与者及它们之间的关系,描述系统的功能范围。
- 核心元素:
- 参与者:人、硬件或其他系统的角色(如 "读者""管理员")。
- 用例:参与者完成的一系列操作(如 "借阅图书""归还图书")。
- 关系:包含(<<include>> ,必须执行的用例,如 "借阅图书" 包含 "用户登录")、扩展 (<<extend>> ,可选执行的用例,如 "查询图书" 扩展 "修改图书信息")、泛化 (参与者或用例的一般 - 特殊关系,如 "普通读者" 泛化为 "VIP 读者")。
- 适用情况:对系统的语境建模、对系统的需求建模。



2.3.4 序列图(动态图,又称顺序图)
- 作用:场景的图形化表示,按消息时间顺序描述对象之间的交互活动。
- 核心元素:
- 对象:顶部横向排列,标注对象名(如 "c:Client""p:ODBCProxy")。
- 生命线:对象下方的垂直虚线,标识对象的存在时间。
- 消息:对象间的交互指令,分为:
- 同步消息:实心三角箭头,调用者阻塞等待返回(如 "setAction (a,d,o)")。
- 异步消息:空心三角箭头,调用者不阻塞(如 "destroy")。
- 返回消息:虚线箭头,从被调用者指向调用者(如 "commited message")。
- 对象创建 / 销毁:<<create>> 标识创建,"X" 标识销毁。
- 特征:序列图有生命线、控制焦点。

2.3.5 通信图(动态图,又称协作图)
- 作用:是序列图的替代表示,不强调时间顺序,仅强调接收和发送消息的对象的结构组织、事件之间的通信。
- 核心元素:对象、链(对象间的连接)、消息(标注序号,如 "1:create ()""2:setActions (a,d,o)")。
- 特点:无固定画法,与序列图统称为 "交互图",可互换使用。
- 特征:通信图有路径、顺序号、交互概览图。

2.3.6 状态图(动态图)
- 作用:展现一个状态机 ,它是由状态、转换、事件、活动 组成。强调对象行为的事件顺序。描述单个对象在多个用例中的行为(状态转换)。
- 核心元素:
- 状态:矩形(简单状态如 "Idle""Connected";组合状态如 "Processing" 包含 "Transmitting""Checking" 子状态)。
- 转换:带触发事件的箭头(如 "turnOn [有水]/ 烧水","turnOn" 为触发事件,"[有水]" 为监护条件,"烧水" 为动作)。
- 起点 / 终点:实心圆点(起点)、实心圆点 + 圆圈(终点)。
- 包括简单状态、组合状态、转换。
- 适用情况:对系统的动态方面建模、对反应型对象建模。




2.3.7 活动图(动态图)
- 作用:特殊的状态图,展现系统内从一个活动到另一个活动 的流程(如业务流程、算法步骤),对系统的功能建模非常重要,强调对象间的控制流程。
- 核心元素:
- 活动:圆角矩形(如 "Receive Order""Fill Order")。
- 流:带箭头的实线,连接活动。
- 分岔 / 汇合:水平粗线,分岔表示并发(如 "Fill Order" 与 "Send Invoice" 并行),汇合表示并发结束。
- 分支:带监护条件的箭头(如 "[not complete]""[else]")。
- 起点 / 终点:实心圆点(起点)、实心圆点 + 圆圈(终点)。
- 包括活动状态,动作状态,转换,对象。
- 适用情况 :对工作流(业务)建模、对操作建模。

2.3.8 构件图(静态图,又称组件图)
- 作用:为系统静态实现视图,展现一组构件之间的组织和依赖,通常把构件映射成一个或多个类、接口或协作。
- 核心元素:
- 构件:带 "<<component>>" 标识的矩形(如 "OrderSystem""CustomerRepository")。
- 接口:供接口(带 "<<provide>>" 标识,构件提供的服务)、需接口(带 "<<require>>" 标识,构件依赖的服务)。
- 依赖:虚线箭头,标识构件间的依赖关系(如 "OrderSystem" 依赖 "CustomerLookup" 构件)。

2.3.9 部署图(静态图)
- 作用:为系统静态部署视图,展现物理模块的节点分布(构件与物理设备的映射)。
- 核心元素:
- 节点:立方体,标识物理设备(如 "DB Server""Web Server""User Client")。
- 制品:节点内的物理文件(如 "MySQL""HTML")。
- 依赖:虚线箭头,标识节点间的依赖(如 "User Client" 依赖 "Web Server")。
- 适用情况:用来面向对象系统的物理方面的建模,对系统的静态部署视图进行建模。
- 注意:部署图展现了系统软件和硬件之间的关系在实施阶段。

2.4 总结

| 图类型 | 性质 | 核心作用 | 核心元素 | 适用情况 |
|---|---|---|---|---|
| 类图 | 静态图 | 展现系统静态设计视图,呈现对象、接口、协作及它们之间的关系 | 类、接口、关联(聚合 / 组合)、泛化、依赖 | 1. 对系统的词汇建模;2. 对简单的协作建模;3. 对逻辑数据库模式建模 |
| 对象图 | 静态图 | 展现某一时刻一组对象及关系,是类图的 "快照" | 对象(需标注属性值,如 "Li:Student",age=20、major = 计算机) | 无类图时,可作为静态设计视图 |
| 用例图 | 静态图 | 展现用例、参与者及关系,描述系统功能范围 | 参与者(人、硬件或其他系统角色,如 "读者""管理员")、用例(如 "借阅图书")、关系(包含、扩展、泛化) | 1. 对系统的语境建模;2. 对系统的需求建模 |
| 序列图(顺序图) | 动态图 | 按消息时间顺序,描述对象间交互活动,是场景的图形化表示 | 对象、生命线、消息(同步、异步、返回)、对象创建 / 销毁(<<create>>、"X") | 描述对象按时间顺序的交互场景 |
| 通信图(协作图) | 动态图 | 强调接收和发送消息的对象结构组织,不强调时间顺序,是序列图的替代表示 | 对象、链(对象间连接)、消息(标注序号,如 "1:create ()") | 与序列图互换使用,用于展示对象间通信的结构关系 |
| 状态图 | 动态图 | 展现状态机,描述单个对象在多个用例中的行为(状态转换),强调事件顺序 | 状态(简单、组合)、转换(带触发事件、监护条件、动作)、起点 / 终点(实心圆点、实心圆点 + 圆圈) | 1. 对系统的动态方面建模;2. 对反应型对象建模 |
| 活动图 | 动态图 | 展现从一个活动到另一个活动的流程,强调对象间控制流程,是特殊的状态图 | 活动(圆角矩形)、流(带箭头实线)、分岔 / 汇合(水平粗线)、分支(带监护条件箭头)、起点 / 终点 | 1. 对工作流(业务)建模;2. 对操作建模 |
| 构件图(组件图) | 静态图 | 展现构件间的组织和依赖,将构件映射为类、接口或协作,是系统静态实现视图 | 构件(带 "<<component>>" 标识)、接口(供 "<<provide>>"、需 "<<require>>")、依赖(虚线箭头) | 展现系统静态实现层面的构件关系 |
| 部署图 | 静态图 | 展现物理模块的节点分布,即构件与物理设备的映射,是系统静态部署视图 | 节点(立方体,如 "DB Server")、制品(节点内物理文件,如 "MySQL")、依赖(虚线箭头) | 1. 对面向对象系统的物理方面建模;2. 对系统的静态部署视图建模 |