考点频率:★★★★★(年年必考,选择题的“送分题”也是“送命题”)
难度:⭐
建议:死磕“对象三要素”和“类与对象的区别”,这是你面向对象大厦的“地基钢筋”
1️⃣ 咱们先别背定义,来认识三个“同事”
假设咱们要开发一个“线上食堂订餐系统”,老板让你用面向对象的思想来设计。
这时候,面向过程的人会去想“先点餐、再支付、然后出票”这三个步骤。但咱们是面向对象的人,咱们得先看看这系统里有谁。
你发现系统里有这么几位“同事”:
- 小明(一位具体的同学):他有名字、有余额、有想吃的菜。
- 宫保鸡丁套餐(一份具体的菜):它有价格、有辣度、有图片。
- 点餐机:它负责接收指令,处理逻辑。
请注意!当我们在写代码的时候,电脑里跑着的“小明”不是真人,而是占据了一块内存的“数据集合”。这块内存区域里记录着“小明”的属性(余额),并且知道“小明”能干嘛(支付)。
这块内存区域,在面向对象的世界里,就叫做——对象(Object)。
2️⃣ 对象(Object):内存里的“活雷锋”
定义:对象是系统中用来描述客观事物的一个实体,它是构成系统的基本单位。它由一组属性和方法(操作)组成。
一个对象之所以能被人认出来,是因为它具备三要素(软考选择题高频考点):
| 要素 | 含义 | 打个比方(小明同学) |
|---|---|---|
| 属性(状态) | 对象拥有的数据,描述“它是什么样子的” | 余额:50元,菜名:宫保鸡丁 |
| 方法(行为) | 对象能执行的操作,描述“它能做什么” | 支付(),选择菜品() |
| 标识(唯一性) | 每个对象在内存中都有独一无二的地址 | 学号 001(哪怕有两个叫小明的,电脑也分得清谁是谁) |
记住一句话:对象 = 属性 + 方法 + 标识。
3️⃣ 类(Class):对象的“模具”和“施工图”
现在问题来了。全公司不止小明一个人点餐,还有小红、小刚、小李。如果每次来一个新同事,咱们都得在电脑里给他开辟一块内存,重新写一遍“姓名、余额、支付方法”,程序员的头发早就掉光了。
这时候,类(Class)就出场了。
定义:类是一组具有相同属性和相同方法的对象的抽象或模板。
打个比方:
- 类:就是“同学”这张报名表(模板)。上面写着“姓名、学号、余额”,但具体内容空着。
- 对象:就是根据这张报名表具体填写出来的纸质文件(实例)。上面写着“小明、001、50元”。
核心区别(软考必考死穴):
| 对比维度 | 类(Class) | 对象(Object) |
|---|---|---|
| 本质 | 抽象的,是概念、是模板 | 具体的,是实例、是实体 |
| 存在时间 | 编译时(写代码的时候)存在 | 运行时(程序跑起来)才在内存里分配空间 |
| 存储位置 | 方法区/代码区 | 堆内存(Heap) |
| 关系 | 类是对象的蓝图 | 对象是类的实例(Instance) |
一句话:你定义的是类,你new(创建)出来的是对象。没有类,你就造不出对象;没有对象,类就只是一堆躺在硬盘上的字符。
4️⃣ 消息(Message):对象间吵架的“标准话术”
有了类,有了对象,系统怎么跑起来呢?总不能各干各的吧。
定义:消息是对象之间进行通信的请求。一个对象要想让另一个对象干活(调用它的方法),唯一的办法就是给它发送一条消息。
消息的三要素(软考常考点):
- 接收者:消息发给谁?(比如:把消息发给“点餐机”对象)
- 操作名:让对方做什么?(比如:“下单”)
- 参数:做这件事需要什么附加信息?(比如:{“菜品”: “宫保鸡丁”, “数量”: 1})
唯一性:面向对象中,消息传递是对象间唯一的交互方式。如果你不让A发消息给B,A就绝对不能直接去改B的余额(这就叫封装,咱们下篇细讲)。
5️⃣ 它们仨怎么配合工作的?(经典流程)
假设咱们写的程序跑起来了,咱们用代码逻辑理一遍:
- 定义类:程序员写了一行代码
class Student { 余额; 支付() }。(此时只是一个概念) - 创建对象:程序运行到
小明 = new Student(),电脑在内存里划了一块地,把“余额=50”填进去。(此时对象活了) - 发送消息:程序执行到
点餐机.下单(小明, "宫保鸡丁")。点餐机是接收者。下单是操作名。小明和宫保鸡丁是参数。
6️⃣ 经典例题(对着答案看解析,别跳!)
例题1:以下关于面向对象中“对象”的叙述中,正确的是( )。
A. 对象是属性和方法的抽象
B. 对象的标识是动态的,可以随时改变
C. 对象的三要素是属性、方法和标识
D. 类是对对象的封装
解析:A说反了,类才是属性和方法的抽象;B大错特错,标识是唯一的,一旦生成不能改变,就像你的身份证号;C正确;D说反了,对象是类的实例。选C。
例题2:在面向对象系统中,对象之间进行通信的唯一方式是( )。
A. 函数调用
B. 消息传递
C. 共享内存
D. 全局变量
解析:面向对象强调封装,对象不能直接访问另一个对象的内部数据,只能通过发送消息(调用方法)来交互。选B。
7️⃣ 记忆口诀
对象三要素,标识属性和方法。
类做模板存硬盘,对象实例在堆上。
对象通信靠消息,接收操作带参数。
8️⃣ 小测验(评论区对答案)
下面关于类和对象的说法中,错误的是( )。
A. 类是对象的模板,对象是类的实例
B. 一个类只能实例化一个对象
C. 对象在程序运行时才分配内存
D. 类是对具有相同属性和方法的对象的抽象
🔔本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #面向对象 #类与对象 #消息 #软考备考