编程范式(四)--- 面向对象优势

75 阅读5分钟

面向对象编程相比面向过程编程优势

  1. OOP更加能够应对大规模复杂程序的开发

    OOP组织代码结构的方式不一样。

    对于简单程序的开发,面向过程和面向对象编程差别确实不会很大,甚至面向过程反倒更有优势。因为需求足够简单,整个流程只有一条主线,很容易被划分成顺序执行的几个步骤。

    但对于大型复杂程序开发,整个流程错综复杂,还是按照面向过程梳理,会是一个网状结构,对于程序拆解就会比较吃力。

    而面向对象编程是以类为思考对象。先思考如何给业务建模,如何将需求翻译为类,如何给类之间建立交互关系。然后再像搭积木一样,按照处理流程,将类组装起来形成整个程序。这种开发模式、思考问题的方式,在应对复杂程序开发的时候,思路更加清晰。

    此外,面向对象编程还提供了一种更加清晰的、更加模块化的代码组织方式。将函数,数据结构分门别类的组织成不同类,这样看起来也不凌乱。

    像C语言这种面向过程的编程语言,也可以按照功能不同组织到不同的文件,实现模块化。只不过是面向对象编程本身提供了类的概念,强制你做这件事情,而面向过程编程并不强求。这也算是面向对象编程相对于面向过程编程的一个微创新吧。

  2. OOP风格的代码更易复用、易扩展、易维护

    面向过程编程是一种非常简单的编程风格,并没有像面向对象编程那样提供丰富的特性。而面向对象编程提供的封装、继承、多态这些特性,能极大地满足复杂的编程需求,能方便我们写出更易复用、易扩展、易维护的代码。

    • 封装特性,基于类的概念,通过类将数据和方法绑定在一起,通过访问权限控制,只允许外部调用者通过类暴露的有限方法访问数据,而不会像面向过程编程那样,数据可以被任意方法随意修改。因此,面向对象编程提供的封装特性更有利于提高代码的易维护性
    • 继承特性,和多态一起是面向过程不具备的特性,如果两个类有一些相同的属性和方法,就可以将这些相同的代码,抽取到父类中,让两个子类继承父类。这样两个子类也就可以重用父类中的代码,避免了代码重复写多遍,提高了代码的复用性
    • 多态特性,基于这个特性,在需要修改一个功能实现的时候,可以通过实现一个新的子类的方式,在子类中重写原来的功能逻辑,用子类替换父类。在实际运行中,调用子类新的逻辑,而不对原有代码做修改,提高了代码的扩展性。此外,利用多态特性,不同的类对象可以传递给相同的方法,执行不同的代码逻辑,提高了代码的复用性

    所以说,基于这些特性,利用面向对象编程可以更轻松地写出易复用、易扩展、易维护的代码。当然,不能说利用面向过程风格就不可以写出易复用、易扩展、易维护的代码,只是付出的代价可能就要高一些。

  3. OOP语言更加人性化、更加高级、更加智能

    编程语言从机器语言,发展到汇编,之后才出现高级编程语言,编程语言越来越人性化,让人跟机器打交道越来越容易。笼统点讲,就是编程语言越来越高级。

    不同于前几种机器思维方式的语言,面向对象是一种人类的思维方式。在用前面三种语言编程的时候,是在思考如何设计一组指令,告诉机器去执行这组指令,操作某些数据,完成某个任务。而在进行面向对象编程时候,是在思考如何给业务建模,如何将真实的世界映射为类或者对象,这让程序员更加能聚焦到业务本身,而不是思考如何跟机器打交道。可以这么说,越高级的编程语言离机器越“远”,离人类越“近”,越“智能”。

    总的来说,面向对象相比面向过程编程,不同的组织代码的结构,面向对象编程更能应对复杂流程的开发。通过面向对象提供的丰富特性,编写出来的代码更加易扩展、易服用、易维护。在编程语言发展规律中可以总结出面向对象编程语言比起面向过程编程语言,更加人性化、更加高级、更加智能。

    但是操作系统这些复杂的系统,还是用的C语言这种面向过程的语言开发的。

    因为操作系统是业务无关的,它更接近于底层计算机,因此更适合用面向过程的语言编写。而接近业务的也就是接近人的软件,则更适合用面向对象的语言编写。