编程范式
编程范式 说明了编程语言的不同特点;分类依据包括语言的代码组织方式、运行时模型、语法风格等,其特点为 “按照代码组织方式进行分类”。
抽象
计算机代码编程是由最初的机器码发展到现在的高级编程语言的,其发展过程就是一种 抽象 。
抽象是指编程语言从 贴近计算机行为 到 接近人类思考方式 的变化。抽象程度低的语言(如机器码、汇编语言)贴近计算机底层行为,性能高且更加细节,但是远离人类思考模式,不易于编写;抽象程度高的编程语言更加易读易写,但是会损失一部分性能。
下面是一段程序在不同编程语言下的代码,从上到下抽象程度逐渐变低:
C/C++:使用if else实现了完整的代码块。
| a = 6;
b = 7;
if (a < b) {
print(b);
} else {
print(a);
}
|
BASIC:早期编程语言使用了if等语句,但是未能实现代码块,而是使用goto进行跳转。
| 10 let a = 6
20 let b = 7
30 if a < b goto 60
40 print(a)
50 goto 70
60 print(b)
70 end
|
x86汇编:详细编程了各个变量的存放和使用,利用jump等指令跳转实现函数的调用和分支结构
| section .data ; 数据段
a dd 6 ; 定义变量 a,值为 6
b dd 7 ; 定义变量 b,值为 7
section .text ; 代码段
global _start ; 定义程序入口点
_start:
mov eax, [a] ; 将变量 a 的值加载到寄存器 eax
mov ebx, [b] ; 将变量 b 的值加载到寄存器 ebx
cmp eax, ebx ; 比较 eax 和 ebx 的值
jl print_b ; 如果 a < b (即 eax < ebx),跳转到 print_b
; 如果 a >= b,继续执行下面的代码
call print_a ; 调用 print_a 函数,输出 a 的值
jmp end ; 跳转到程序结尾,防止继续执行 print_b
print_b:
call print_b_val ; 调用 print_b_val 函数,输出 b 的值
end:
mov eax, 1 ; 系统调用号 1 (exit)
xor ebx, ebx ; 设置返回值为 0
int 0x80 ; 发出中断,结束程序
; 下面是模拟的打印函数
print_a:
; 假设这是一个自定义函数,用来打印变量 a
; 实际汇编语言中可能需要通过系统调用或特定库来实现输出
ret
print_b_val:
; 假设这是一个自定义函数,用来打印变量 b
ret
|
从三种语言的对比不难看出抽象的作用。
C++
面向对象程序设计(OOP, Object-Oriented Programming) 是C++包含的一种编程范式。
C++对C语言使用的结构化编程进行了进一步抽象,使用了 类 等概念,同时扩展了C语言中的数据结构。
C++最初的设计理念是在进一步抽象化C语言的情况下不增加消耗的性能,同时期望让其尽可能的使用C语言的编译工具。
现在的C++生成程序的过程是先从C++预处理,编译产生C语言代码,然后再得到可执行程序。