面向对象和面向过程的区别
关于面向过程与面向对象的两大类语言你怎么看
可能很多初学者和我一样第一的反应就是,面向过程语言的执行效率以及对资源的消耗肯定是比面向对象的要低的。
诸如此类的对比回答:
⾯向过程 : ⾯向过程性能⽐⾯向对象⾼。 因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源,所以当性能是最重要的考量因素的时候,⽐如单⽚机、嵌⼊式开发、 Linux/Unix 等⼀般采⽤⾯向过程开发。但是, ⾯向过程没有⾯向对象易维护、易复⽤、易扩展。
⾯向对象 : ⾯向对象易维护、易复⽤、易扩展。 因为⾯向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是, ⾯向对象性能⽐⾯向过程低。
上面的回答其实是没错的,只是不够细致。
对于面向过程的语言,这里就拿 Java 与 C 语言做一个比较:
我们都知道的一点就是:
C 语言的编译后的文件程序是不可以跨平台(Win平台编译后在Linux平台执行或x86系统编译在ARM平台执行)执行的也就是说,一个 C 源码可以在不同的平台使用指定的 GCC 编译器对源码编译,生成机器码直接运行。
Java 语言有一特性 一次编译,随处运行 ,这一切都是归功于 Java 语言的机制中 JVM 虚拟机的存在,Java 源程序在任意的平台上只要通过 JDK 进行编译生成可以有 JVM 识别并执行的 .class 字节码文件,并就可以将该字节码文件拿到随意的有 JRE 环境的平台上即可运行。而 .class 文件是无法被机器直接识别的,需要 JVM 进行解释执行。这也就是解释了 Java 为什么是半编译型语言。
从上面的两种语言的分析中可以看出来的一点就是,C语言编译后直接就是可以被机器识别的机器码,可以直接运行。但 Java 语言在编译后,需要 JVM 对编译后的字节码文件进行解释执行。
所以从整体宏观的感觉来看,Java 好像是比 C 语言的执行效率更高。但实际却并非如此,在 GitHub 上有一讨论是关于 面向对象性语言与面向过程性语言直接执行效率的分析:
所以说,面向过程的执行效率高于面向对象? 这样的问题是不好具体回答的,在没有实际的场景下,两种语言的执行效率不可以直接的去给出一个标准。