跳转至

编程范式

编程范式 说明了编程语言的不同特点;分类依据包括语言的代码组织方式、运行时模型、语法风格等,其特点为 “按照代码组织方式进行分类”。

抽象

计算机代码编程是由最初的机器码发展到现在的高级编程语言的,其发展过程就是一种 抽象

抽象是指编程语言从 贴近计算机行为 到 接近人类思考方式 的变化。抽象程度低的语言(如机器码、汇编语言)贴近计算机底层行为,性能高且更加细节,但是远离人类思考模式,不易于编写;抽象程度高的编程语言更加易读易写,但是会损失一部分性能。

下面是一段程序在不同编程语言下的代码,从上到下抽象程度逐渐变低:

C/C++:使用if else实现了完整的代码块。

1
2
3
4
5
6
7
a = 6;
b = 7;
if (a < b) {
    print(b);
} else {
    print(a);
}

BASIC:早期编程语言使用了if等语句,但是未能实现代码块,而是使用goto进行跳转。

1
2
3
4
5
6
7
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语言代码,然后再得到可执行程序。