[杂说] 编译型语言和解释型语言,面向过程与面向对象

 目录:

    一.编译型语言与解释型语言

    二.面向过程以及面向对象

    三.补充


一、编译型语言与解释型语言

    一提到编译型语言就很难想不到 C 与 C++,这两者都是典型的编译型语言,他们工作的原理是通过编译器如 gcc ,g++ ,经过预处理,编译,汇编,链接,这几个步骤形成可执行文件(Windows 中的 .exe 文件或者 Linux 中的 .elf 文件),通过让操作系统运行相应的可执行文件来工作。显而易见的,在不同的系统中需要不同的可执行文件,同一段程序,在 Windows 系统中的 .exe 文件就无法在 Linux 系统中允许,Linux 系统中的 .elf 文件就无法在 Windos 系统中运行,且对于每一个程序都需要生成一个新的可执行文件。虽然编译型语言的可移植性较差,但换来的是相比解释型语言更快的运行速度与运行效率。

    而对于解释型语言,诸如 Python 和 JavaScript ,它们并不需要产生可执行文件,和它们的名字相对应的,它们通过被相应的解释器解释来运行。例如,Python 脚本可以通过 pyhon 交互式解释器运行(可通过在命令提示符当中输入“ python”来观察电脑是否拥有 python 交互式解释器)。容易理解的,解释型语言在运行速度上落后于编译型语言,但换来了更好的可移植性。

image.png

(在电脑环境变量中配置了 python 解释器)

    在编译型语言和解释型语言中间还有一种特殊的类型,即混合型语言,最为典型的就是 Java。它首先需要将 Java 代码 编译成一种叫 “Java 字节码”的中间语言在这点上与编译型语言相同,而后再由 Java 虚拟机(JVM)进行解释,这与解释型语言相通,与之对应的,它兼具了解释型语言和编译型语言的优点,在拥有较强的可移植性的同时还拥有相对于解释型语言较快的运行速度。


二、面向过程以及面向对象

    面向过程语言面向对象语言 这两个词语在我们学习代码的过程中不可避免的会碰到许多次,然而它们之间的区别老师却很少提及(虽然这真的不怎么重要就是了)。它们之间最显著的区别就是有没有使用“类”这个概念。

    在学习面向对象的语言时(如 C++ Pyhon)时,我们不可避免的会学到关于“类”,以及“类的继承”这一概念。“类”最直观的作用就是使得程序员能够在更高维度上思考程序的设计,而减少在底层实现方面的考虑(但学习这方面仍然很重要)。例如,在 socket 编程(一种与计算机网络相关的程序)中如果使用 c 语言来进行编写,那么编写出来的代码将可能会有上百行,从为 socket 分配和ip,再到文件描述符和读取数据,每一步都需要程序员从声明变量和结构体开始,去处理许多细枝末节的问题。而使用 Python 去编程就截然不同了,只需要引用 socket 库(Python 中专门用于 socket 编程的代码库),然后声明一个 socket 变量,然后写一下要连接(或监听)的端口和 ip 地址就好了(如图)。这极大增加了程序员的开发效率,通过引用前人编写的代码库,我们能够用短短几行代码实现面向过程编程里实现起来极为繁琐的功能。

image.png

    现在我们在补充一下关于面向过程编程的内容,用一个很老但很生动的例子来说,当计算机需要模拟一个斜向上抛的小球时该怎么做?我们需要定义它的起始位置,初速度,上抛角度还有重力加速度等等一系列数据,然后再利用公式计算出每时刻小球的位置,然后打印数据。这个过程和面向过程编程极为相似,在面向过程编程时,我们需要关注程序运行过程中每一个需要的变量,作用域,链接,还有生存期......。这一系列是面向过程的程序员所需要考虑的。

    通常来讲,面向对象的语言能够同时进行面向过程的编程,你可以在 C++ 和 Python 中选择不引用相应的库去自己实现 socket,但你没办法在 C 语言里这样做。听起来面向过程编程可以被面向对象编程全方位超越,但实际上在实现类的过程中,各种库的编写者不可避免的需要考虑通用性这一问题,它们需要在库中对进行各种操作,然后库中代码结束前将他们复原,这一过程无可避免的会增加代码的运行时间。此外,从某种意义上讲,面向对象编程就是面向过程编程,只不过在“类”的定义过程已经由先前的程序员完成了。而且通常面向过程编程相比于面向对象编程拥有更快的运行速度和自由度,你可以根据自己的需要自由地改写实现过程中的各个细节,但在面向对象的语言中你最好不要这样做,面向对象的语言中一段代码通常会被多次引用,如果更改可能出现意想不到的错误,且有违面向对象编程的初衷。


三、补充

    这里有几个词语需要注意一下,面向过程的语言,面向对象的语言,以及面向过程编程和面向对象编程,前两个是指具体的语言如 C 语言,Python,后两个是指写代码的思路,你可以在面向对象的语言里使用面向过程编程和面向对象编程的写法,但你无法在面向过程编程的语言里面向对象编程的写法。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    «    2026年2月    »
    1
    2345678
    9101112131415
    16171819202122
    232425262728

    Powered By Z-BlogPHP 1.7.4