10.1.2 对象与类相关概念
对象和类是面向对象的入口概念。对象是具体的,类是抽象的;对象有具体属性值,类定义这些对象应具有哪些属性和方法。
对象、类、实例
| 概念 | 含义 | 例子 |
|---|---|---|
| 类 | 对共同属性和行为的抽象模板 | Student、Account、Order |
| 对象 | 运行时存在的具体个体 | 学生张三、账户 A001、订单 O1001 |
| 实例 | 由类创建出来的对象 | new Student("张三") 的结果 |
| 实例化 | 由类生成对象的过程 | 调用构造函数创建对象 |
类像模具,对象像用模具做出来的具体个体。类定义“应该有什么”,对象保存“具体是什么值”。
属性与方法
| 类中成员 | 面向对象术语 | 作用 |
|---|---|---|
| 数据成员 | 属性、状态 | 描述对象的静态特征 |
| 成员函数 | 方法、操作、行为 | 描述对象能做的动态动作 |
例如 Account 类可以有 balance 属性和 deposit()、withdraw() 方法。不同账户对象可以共享同一套方法定义,但各自保存不同余额。
分析方向与实现方向
字幕里强调了一个方向差异:
| 场景 | 方向 |
|---|---|
| 面向对象分析 | 从现实世界抽象出对象,再从相似对象抽象出类 |
| 面向对象实现 | 先写类,再由类实例化对象 |
这解释了为什么分析时我们先观察业务对象,编码时却先写类文件。
mermaid
flowchart LR
R["现实业务"] --> O["识别对象"]
O --> C["抽象出类"]
C -.编码实现.-> Code["编写类"]
Code --> I["实例化对象"]状态与属性
状态可以理解为对象某一时刻一组属性的具体取值。例如一个账户对象的余额、冻结标志、信用等级共同决定它当前状态。状态不是完全独立于属性的东西,它通常由属性值体现。
| 术语 | 关系 |
|---|---|
| 属性 | 描述对象可能有哪些数据项 |
| 属性值 | 某个对象当前具体取值 |
| 状态 | 一组属性值组合形成的对象当前情况 |
因此考试中若问对象包含什么,属性/状态常可以归入对象内部;消息则更偏对象间交互。
可见性与封装
封装需要访问控制。不同语言细节不同,但软考中常见的访问修饰符可以这样理解:
| 修饰符 | 访问范围 | 记忆方式 |
|---|---|---|
private 私有 | 只有本类内部方法可访问 | 隐私,只给自己看 |
| 默认/包访问 | 同一包内可访问 | 不写修饰符时的常见情况 |
protected 受保护 | 本类、子类或同包可访问,视语言而定 | 给继承体系或包内开放 |
public 公有 | 应用程序中其他对象可访问 | 对外接口 |
考试若出现“所有方法都可以访问”,通常对应 public;“只有本类方法可以访问”,对应 private。
例题
“学生张三”在面向对象中更接近:
若某成员只希望本类内部方法访问,通常应使用:
本节小结
类定义共同属性和方法,对象是类的具体实例。属性描述状态,方法描述行为。面向对象分析从现实到对象再到类,编码实现则先写类再实例化对象。封装通过访问控制隐藏内部细节,对外提供必要接口。