欢迎来到程序语言的世界!

你有没有想过,为什么世界上会有这么多种程序语言?为什么我们不能只用一种语言来解决所有问题呢?在本指南中,我们将探讨不同的编程范式(Paradigms,即风格),以及计算机究竟是如何理解我们编写的指令。别担心,如果有些术语听起来很“高深”,我们将通过简单的类比把它们拆解开来!

1. 编程范式

范式简而言之就是一种“思维方式”或编程风格。不同的问题需要不同的工具。举例来说,你不会拿螺丝刀来敲钉子,对吧?

为什么我们需要不同的范式?
有些语言被设计为追求极致速度,有些则设计为易于人类阅读,还有一些是专门为了处理海量数据而构建的。

过程式编程 (Procedural Programming)

这是最常见的范式之一。它将程序视为一系列循序渐进的指令。你需要明确地告诉计算机如何完成一项任务。

关键特性:
• 使用序列 (Sequences)选择 (Selection)(如 if 语句)和迭代 (Iteration)(如循环)。
• 将大型任务拆解为较小、易于管理的区块,称为过程 (Procedures)函数 (Functions)
• 数据与处理该数据的代码通常是分开存放的。

类比:想象一张烤蛋糕的食谱。你必须按照顺序执行步骤:(1) 打鸡蛋,(2) 搅拌面粉,(3) 烘烤。这正是过程式代码的运作方式!

快速复习:过程式重点

过程式编程的核心在于逻辑和指令的顺序。这就像是编码界的“待办事项清单”。

2. 汇编语言与小人计算机 (LMC)

计算机真正能理解的只有机器码(0 与 1)。然而,对于人类来说,编写二进制码简直是天方夜谭!汇编语言 (Assembly Language) 是一种“低阶”语言,它就像是一座桥梁,使用称为助记符 (Mnemonics) 的简短文字代码来代表机器指令。

小人计算机 (Little Man Computer, LMC)

为了帮助你理解汇编语言的工作原理,OCR 使用了一个名为小人计算机 (LMC) 的模型。想象一个小人在邮寄室(即 CPU)里工作,他在邮箱(即内存 RAM)和计算器(即累加器 Accumulator)之间搬运写着数字的纸条。

需要记住的常见 LMC 助记符:
ADD:将值加到累加器中。
SUB:从累加器中减去一个值。
STA:将累加器中的值存储到指定的内存地址。
LDA:从内存地址加载一个值到累加器。
INP:获取用户的输入。
OUT:输出累加器中当前的值。
HLT:停止程序。

你知道吗?
汇编语言至今仍被广泛用于智能手表或汽车引擎等领域,因为它允许程序员直接控制硬件,并使代码运行得极其迅速!

3. 内存寻址模式 (Modes of Addressing Memory)

在汇编语言中,当我们要从内存获取数据时,有不同的方式来“寻址”或寻找该数据。这可能会有点复杂,让我们用邮政信箱来做类比。

1. 立即寻址 (Immediate Addressing):
指令本身就包含了你要使用的实际数值,无需去别的地方寻找!
例子:“加 5”。你直接加上 5 就可以了。

2. 直接寻址 (Direct Addressing):
指令提供了一个内存地址。你直接前往该地址并使用里面找到的数值。
例子:“前往 10 号邮箱,使用里面的数字。”

3. 间接寻址 (Indirect Addressing):
指令提供了一个地址,但该地址里面存放的是另一个地址!你必须先前往第一个地址,才能找到“真正”的数据储存在哪里。
例子:你打开 10 号邮箱,里面写着一张纸条:“真正的数据在 50 号邮箱里。”

4. 索引寻址 (Indexed Addressing):
你取一个“基址”,并加上一个“偏移量”(存储在索引寄存器 Index Register 中的数字)来找到最终位置。这对于遍历列表或数组非常有用。
公式:\(最终地址 = 基址 + 索引寄存器\)。

记忆小撇步:“I-D-I-I”技巧

Immediate (立即):It's right here (就在这儿)。
Direct (直接):Drive to the address (开车前往该地址)。
Indirect (间接):Inside is another address (里面是另一个地址)。
Indexed (索引):Increment the base address (递增基址)。

4. 面向对象编程 (OOP)

OOP 是一种现代范式,它专注于对象 (Objects) 而非单纯的动作。我们不再编写一长串的指令清单,而是建立代表现实世界事物的“对象”。

OOP 关键概念:

类 (Classes) 与对象 (Objects):
类 (Class) 是一个蓝图(例如:一张通用汽车的设计图)。对象 (Object) 是根据该蓝图制造出来的实体(例如:你邻居那辆红色的丰田汽车)。
属性 (Attributes):对象拥有的数据(例如:颜色、最高时速)。
方法 (Methods):对象可以做的事情(例如:驾驶 drive()、鸣喇叭 honk())。

封装 (Encapsulation):
这意味着“隐藏”对象内部的数据。你只能通过特定的方法来修改属性。这能保护数据,避免程序中其他部分不小心更动到它们。

继承 (Inheritance):
“子类”可以获取“父类”的所有属性和方法。例如,“卡车”类可以继承自“车辆”类,并增加自己特有的功能,例如“拖曳能力 (TowingCapacity)”。

多态 (Polymorphism):
字面意思是“多种形式”。它允许同一个方法根据对象的不同而表现出不同的行为。
例子:“makeSound()”方法会让“狗”对象发出“汪汪”,但会让“猫”对象发出“喵喵”。

常见错误,记得避开!

学生经常混淆对象。记住:你无法驾驶一张汽车“蓝图”,你只能驾驶“实体车”。类是计划,对象是结果。

总结清单

在继续学习之前,确保你能回答以下问题:
• 你能解释过程式面向对象方法的区别吗?
• 你知道 4 种寻址模式及其不同之处吗?
• 你能编写一个简单的 3 行 LMC 程序来相加两个数字吗?
• 你理解继承如何通过重用代码来帮助程序员节省时间吗?

继续加油!你做得很好。编程范式是你所有喜爱软件运作的基石!