【面向对象】复习日:面向对象基础 + UML + 设计原则(整理对比表 + 板块总结)
适合读者:软考中级备考同学
阅读时间:6分钟
内容:面向对象基础、UML、设计原则三大模块核心对比表、易错点、记忆口诀汇总
一、板块内容概览
“面向对象技术”板块共完成16篇文章,覆盖以下知识模块:
| 知识模块 | 篇数 | 核心内容 |
|---|---|---|
| 面向对象基础 | 5篇 | 面向对象概述、类与对象、三大特性(封装/继承/多态)、抽象类与接口 |
| UML建模 | 7篇 | 概述、类图(六大关系)、对象图/构件图/部署图、用例图、顺序图、活动图、状态图 |
| 设计原则 | 2篇 | SOLID五大原则、迪米特法则、组合重用原则 |
| 设计模式 | 2篇 | 设计模式概述、三大分类及23种模式速览 |
二、核心对比表
2.1 面向对象三大特性
| 特性 | 核心作用 | 实现方式 | 软考关键词 |
|---|---|---|---|
| 封装 | 信息隐藏,隔离变化 | private属性 +public方法 | 访问控制、数据隐藏 |
| 继承 | 代码复用,建立 is-a 关系 | extends(单继承) / 多重继承(C++) | 子类父类、泛化、复用 |
| 多态 | 一个接口,多种实现 | 重载(编译时)+ 覆盖(运行时) | 重载/覆盖、参数多态/包含多态 |
多态分类对比:
| 分类 | 绑定时机 | 实现手段 | 软考关键词 |
|---|---|---|---|
| 重载(Overload) | 编译时 | 同一类中,方法名相同参数列表不同 | 静态多态 |
| 覆盖(Override) | 运行时 | 子类重写父类方法 | 动态多态 |
| 参数多态 | 编译时 | 泛型/模板 | 编译时多态 |
| 包含多态 | 运行时 | 继承 + 接口 | 运行时多态 |
2.2 抽象类 vs 接口
| 对比项 | 抽象类 | 接口 |
|---|---|---|
| 关键字 | abstract class | interface |
| 方法实现 | 可有具体方法 | 所有方法抽象(传统) |
| 成员变量 | 可有各种类型 | 只能public static final |
| 构造器 | 可有 | 无 |
| 继承/实现 | 单继承 | 多实现 |
| 语义 | is-a(是什么) | can-do(能做什么) |
2.3 UML类图六大关系(符号速查)
| 关系 | 符号 | 箭头方向 | 关系强度 |
|---|---|---|---|
| 依赖 | 虚线箭头------> | 指向被依赖者 | 最弱 |
| 关联 | 实线箭头———> | 指向被持有者 | 弱 |
| 聚合 | 空心菱形实线◇——— | 整体→部分 | 中 |
| 组合 | 实心菱形实线◆——— | 整体→部分 | 强 |
| 泛化 | 实线空心三角———▷ | 子类→父类 | 强 |
| 实现 | 虚线空心三角---▷ | 实现类→接口 | 中 |
高频易混辨析:
| 易混组 | 区分方法 |
|---|---|
| 依赖 vs 关联 | 依赖是方法参数/局部变量(用完就扔);关联是成员变量(长期持有) |
| 聚合 vs 组合 | 聚合部分可独立存在(车和轮胎);组合部分同生共死(公司和部门) |
| 泛化 vs 实现 | 看目标端是类(泛化)还是接口(实现) |
2.4 UML图分类速查
| 分类 | 图名称 | 核心用途 | 考频 |
|---|---|---|---|
| 结构图 | 类图 | 系统静态结构 | ★★★★★ |
| 对象图 | 某一时刻对象实例快照 | ★★☆☆☆ | |
| 构件图 | 软件构件组织与依赖 | ★★★☆☆ | |
| 部署图 | 软件在硬件上的物理部署 | ★★★☆☆ | |
| 行为图 | 用例图 | 系统功能与外部参与者 | ★★★★★ |
| 顺序图 | 对象间消息时间顺序 | ★★★★★ | |
| 活动图 | 业务流程与并行行为 | ★★★★☆ | |
| 状态图 | 对象生命周期状态变化 | ★★★★☆ |
2.5 用例图关系辨析(高频考点)
| 关系 | 符号 | 语义 | 关键词 |
|---|---|---|---|
| 包含(include) | 基础用例 → 被包含用例 | 必然执行 | “必须”、“总是” |
| 扩展(extend) | 扩展用例 → 基础用例 | 有条件触发 | “如果…则”、“可选” |
| 泛化 | 子用例 → 父用例 | 继承关系 | “是一种” |
答题技巧:题干出现“必须验证”、“总是检查” →包含;出现“当…时”、“可选的”、“特殊情况下” →扩展。
2.6 活动图 vs 状态图
| 对比项 | 活动图 | 状态图 |
|---|---|---|
| 关注对象 | 业务流程/操作流程 | 单个对象的生命周期 |
| 圆角矩形含义 | 活动(做一件事) | 状态(处于某个阶段) |
| 核心概念 | 分叉/汇合(并行)、判断/合并(分支) | 事件触发、状态转换 |
| 关键词 | “流程”、“顺序”、“并行” | “状态”、“事件”、“转换” |
2.7 SOLID五大原则速查
| 原则 | 核心要点 | 软考关键词 |
|---|---|---|
| 单一职责(SRP) | 一个类只有一个职责 | 一个变化原因 |
| 开闭原则(OCP) | 对扩展开放,对修改关闭 | 不修改原有代码 |
| 里氏替换(LSP) | 子类可替换父类且行为不变 | 子类替换父类 |
| 接口隔离(ISP) | 胖接口拆成小接口 | 不依赖不需要的方法 |
| 依赖倒置(DIP) | 依赖抽象,不依赖具体 | 面向接口编程 |
2.8 迪米特法则 vs 组合重用原则
| 对比项 | 迪米特法则(LoD) | 组合重用原则(CRP) |
|---|---|---|
| 核心问题 | 模块之间怎么通信 | 代码怎么复用 |
| 核心要求 | 只跟直接朋友通信 | 优先用组合而非继承 |
| 违反标志 | 链式调用(a.getB().getC()) | 为了复用代码随意继承 |
| 共同目标 | 降低耦合 | 降低耦合 |
三、设计模式分类速查
| 分类 | 数量 | 模式清单 | 记忆口诀 |
|---|---|---|---|
| 创建型 | 5种 | 单例、工厂方法、抽象工厂、建造者、原型 | 单工抽建原 |
| 结构型 | 7种 | 适配器、桥接、组合、装饰器、外观、享元、代理 | 适桥组装外享代 |
| 行为型 | 11种 | 观察者、模板方法、命令、状态、策略、职责链、访问者、迭代器、中介者、备忘录、解释器 | 观模命状策,职访迭中备解 |
设计模式四要素:名称、问题、解决方案、效果
四、易错点汇总
| 易错点 | 正确理解 |
|---|---|
| 封装就是私有化属性 | ❌ 私有化是手段,封装的目的是隔离变化、保护数据 |
| 继承可以随意使用 | ❌ 滥用继承会破坏封装,优先用组合 |
| 重载和覆盖是一回事 | ❌ 重载在同一类内(编译时),覆盖在父子类间(运行时) |
| 参数多态是运行时多态 | ❌ 参数多态(泛型)是编译时多态 |
| 包含和扩展方向相同 | ❌ 包含:基础→被包含;扩展:扩展→基础(方向相反) |
| 活动图和状态图是一回事 | ❌ 活动图关注流程,状态图关注对象的生命周期 |
| 接口可以实例化 | ❌ 接口不能实例化,只能被实现 |
| 聚合和组合可以互换 | ❌ 聚合部分可独立,组合部分同生共死 |
| 迪米特法则禁止所有链式调用 | ❌ 不是禁止,而是要求通过封装避免“长链式调用”暴露内部结构 |
| 组合重用原则完全否定继承 | ❌ 说的是“优先”用组合,继承在 is-a 关系中仍然合理 |
五、记忆口诀
面向对象三大特性:
封装隐藏保安全,继承复用建层次,多态接口多实现。
类与对象:
类是模板对象实例,属性方法标识三要素。
UML六关系:
依赖虚线关联实,聚合空心组合实。实线三角是泛化,虚线三角是实现。
用例图:
包含必须箭头指,扩展可选反着画。
活动图 vs 状态图:
活动图画流程图,状态图画变形记。
SOLID:
单开里接依——单一职责、开闭、里氏替换、接口隔离、依赖倒置。
设计模式分类:
创建单工抽建原,结构适桥组装外享代,行为观模命状策,职访迭中备解来。
六、板块总结表
| 板块 | 完成篇数 | 状态 |
|---|---|---|
| 1. 计算机系统知识 | 28篇 | ✅ 已完成 |
| 2. 程序语言与编译 | 16篇 | ✅ 已完成 |
| 3. 操作系统 | 28篇 | ✅ 已完成 |
| 4. 软件工程 | 24篇 | ✅ 已完成 |
| 5. 面向对象技术 | 16篇 | ✅ 已完成 |
| 6. 数据结构与算法 | 30篇 | 即将开始 |
七、下期预告:板块6 – 数据结构与算法
预计更新30篇,时间:7.31 – 8.17(共18天)
数据结构与算法在软考中占8-15分,是上午选择题的核心得分区。主要内容:
| 知识模块 | 核心内容 |
|---|---|
| 基础概念 | 逻辑结构与物理结构、ADT、时间复杂度与空间复杂度 |
| 线性结构 | 顺序表、链表、栈、队列、串(含KMP算法) |
| 树与二叉树 | 二叉树性质与遍历、二叉排序树、平衡二叉树、哈夫曼树 |
| 图 | 邻接矩阵/邻接表、DFS/BFS、最小生成树、最短路径 |
| 查找与排序 | 顺序查找/折半查找、哈希表、八大排序算法总结 |
特别注意:时间复杂度分析、二叉树遍历、排序算法是选择题最集中的得分点,写文章时会重点讲解计算方法。
从下一篇文章开始,我们将进入数据结构与算法板块。这个板块内容多、计算量大,建议每天按时跟进,多做计算练习。请持续关注本专栏,每日更新,陪你一起拿下软考中级!
🔔本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #面向对象技术 #UML #设计模式 #板块总结 #数据结构与算法
