Skip to content
难度基础(★)
建议时长45分钟

10.1.1 面向对象基本概念介绍

面向对象基本概念在上午题中常以 2 到 4 分的形式出现,考得比较零散,但很容易拿分。它不是复杂算法题,主要考“概念名称和描述是否能配上”:对象、类、封装、继承、泛化、多态、动态绑定等。

面向过程与面向对象

结构化开发更偏面向过程:把问题分解成步骤,按过程一步一步求解。面向对象则先思考现实世界中有哪些“对象”,这些对象有什么属性、能做什么行为,然后让对象之间通过消息协作。

思维方式关注点典型问题
面向过程步骤、算法、控制流程“先做什么,再做什么”
面向对象对象、职责、状态、行为、协作“系统里有哪些对象,它们如何配合”

两者不是简单的好坏替代。面向过程适合清晰流程和算法表达;面向对象更适合把复杂系统组织成稳定的对象结构,提高复用、扩展和维护能力。

从现实世界到对象

面向对象常说“万物皆对象”。这句话不是说程序里真的把所有东西都照搬进来,而是说现实世界中的事物可以被抽象成程序对象。

抽象对象时,通常抓三部分:

组成含义例子
对象标识/对象 ID唯一识别这个对象编号、名称、唯一主键
属性/状态/数据静态特征颜色、年龄、余额、状态值
行为/操作/方法动态能力叫、移动、付款、查询

对象不是只有数据,也不是只有函数,而是把数据和操作封装成一个整体。对象 ID 用来区分“这一只”和“另一只”;属性描述它当前是什么样;行为描述它能做什么。

mermaid
flowchart LR
  R["现实世界事物"] --> A["抽象静态特征<br/>属性/数据"]
  R --> B["抽象动态特征<br/>行为/操作"]
  R --> ID["给出唯一标识<br/>对象ID"]
  A --> O["对象"]
  B --> O
  ID --> O

封装是什么

封装是把对象的属性和行为组织在对象内部,对外只暴露必要接口。它带来两个效果:

  1. 信息隐藏:外部不需要知道对象内部如何保存数据、如何实现操作。
  2. 访问控制:外部只能通过允许的接口使用对象,减少误用和耦合。

可以把封装理解为“对外给接口,对内藏细节”。这会提高安全性和可维护性,因为外部代码不直接依赖内部实现。

从对象到类

如果每创建一个对象都从头定义一遍属性和行为,会非常低效。因此要把一组相似对象的共同特征再抽象成“类”。

层次含义
对象具体个体,有具体属性值
一组相似对象的抽象模板
实例化由类创建具体对象的过程

分析时常从现实世界出发:现实事物 -> 对象 -> 类。实现时方向相反:先写类,再由类实例化对象。

考试提醒

题干关键词对应概念
具有属性、行为、唯一标识的运行实体对象
一组相似对象的抽象模板
数据和操作放在一起,隐藏内部细节封装
对象之间请求服务或调用方法消息
类创建对象实例化

容易错的一点:消息是对象之间的通信或方法调用,不是对象的组成部分。对象的组成更常表述为对象 ID、属性/状态、行为/操作。

例题

单选
一组相似对象的抽象描述通常称为:
单选
下列通常不属于对象组成部分的是:

本节小结

面向对象把系统看成对象之间的协作。对象由标识、属性和行为构成;封装把数据和操作放在一起并隐藏内部细节;类是一组相似对象的模板,实例化则由类创建具体对象。考试重点是概念配对和边界辨析。