软件设计师知识点总结:面向对象技术(面向对象基础+UML)

目录

[一. 面向对象基础](#一. 面向对象基础)

[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)
  • 目标:确定问题域,理解问题需求。
  • 核心活动(五步法):
    1. 认定对象:按自然存在的实体确定对象(如 "图书馆管理系统" 中的 "图书""读者" 对象)。
    2. 组织对象:分析对象间的关系,抽象成类(如 "图书" 和 "期刊" 抽象为 "出版物" 类)。
    3. 对象间的相互作用:描述各对象在应用系统中的交互关系(如 "读者" 借阅 "图书" 的交互)。
    4. 确定对象的操作:定义对象的行为(如 "图书" 的 "借出""归还" 操作)。
    5. 定义对象的内部信息:确定对象的属性(如 "图书" 的 "ISBN 号""书名""作者" 属性)。
1.2.2 面向对象设计(OOD)
  • 目标:设计分析模型,实现相应源代码,制定问题域的解决方案。
  • 核心任务:确定类的结构、接口设计、对象交互流程设计、数据存储设计等。
  • 活动
1.2.3 面向对象程序设计(OOP)
  • 目标:用面向对象程序设计语言(如 Java、C++)实现设计方案,编写可执行代码。
  • 核心工作:类的实现、对象的创建与交互、继承与多态的代码实现。
1.2.4 面向对象测试(OOT)
  • 特点:与普通测试步骤一致,但测试对象聚焦于类、对象及交互关系。
  • 测试层次(从低到高):
    1. 算法层:测试类中定义的每个方法,类似单元测试(如测试 "计算器" 类的 "加法""减法" 方法)。
    2. 类层:测试同一个类中所有方法与属性的相互作用,是面向对象特有的模块测试(如测试 "订单" 类中 "计算总价""添加商品" 方法的协同)。
    3. 模板层:测试一组协同工作的类之间的相互作用,类似集成测试(如测试 "购物车""商品""用户" 类的交互)。
    4. 系统层:类似系统测试,验证整个系统是否满足需求(如测试 "电商系统" 的下单、支付、物流全流程)。

1.3 面向对象设计原则


二. UML(统一建模语言)

UML 是统一建模语言,与程序设计语言无关,用于可视化描述面向对象系统的结构与行为。

2.1 UML 三要素

  1. UML 的基本构造块 :构成模型的核心元素(事物、关系、图)。
  2. 支配构造块的规则:构造块的放置、组合规则(如类图中关联关系的表示规则)。
  3. 公共机制:贯穿整个语言的通用特性(如注释、约束、命名规则)。

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. 对系统的静态部署视图建模
相关推荐
lapiii3582 天前
14天极限复习软考-day5 软件工程 、UML
软件工程·uml
CappuccinoRose7 天前
UML学习文档(二)
uml·类图·序列图·状态图·类的关系
静心观复10 天前
drawio画java的uml的类图时,class和interface的区别是什么
java·uml·draw.io
weixin_456904271 个月前
数据库设计与UML图
数据库·uml
希赛网1 个月前
软考软件设计师常考知识点:(一)计算机组成与体系结构
软考·uml·编程语言·计算机基础·软件设计师
rolt1 个月前
[pdf、epub]320道《软件方法》强化自测题业务建模需求分析共279页(202509更新)
产品经理·ddd·架构师·uml·领域驱动设计
攻心的子乐1 个月前
软考 UML类图 泛化继承 实现 聚合 组合(最强) 依赖(最弱
uml
攻心的子乐1 个月前
软考 UML 用例图 extend扩展关系 include包含关系 泛化继承inherit关系
uml
「QT(C++)开发工程师」2 个月前
UML | 最好的类图设计工具结合CSDN天启呈现-领路架构师
数据库·uml·类视图