如何理解面向对象和面向过程?

一、面向对象

​ 面向对象就是看事物的一种方式,一种视觉角度,分析方式,我们可以把任意一个事物看成是一个对象,分析它身上具备的主要特征,这个就是面向对象思维;

​ 我们把事物当做一个对象,分析它的主体特征,注意力聚焦在主体特征,而不是聚焦于更细节的内容及实现,如我们把手机当做一对象,现在我们要开发手机,手机是个对象,它有哪些特征呢,比如颜色、手机壳、打电话、发短信等等,而我们不会去想到 发短信具体是怎么实现的,集成电路如何设计,如何接收信号,电磁波如何发出,甚至更加细节的问题;

​ 这样做有利于我们宏观掌控设计手机的主体功能,在整体上思考设计方针的准确性,等我们确定了每一个功能模块,主体特征后,我们在考虑如何一步一步去实现这个主体特征;

​ 把事物当做对象,宏观分析它的具备的主体特征,这已经是面向对象的思维了。

​ 有很多语言中,如 PHP、JAVA 为了能够体现这一设计思想,思维方式,就引入了类的概念,如 class Phone{ }定义一个手机类,就这是面向对象中的一个对象的对象体现,落实在代码层次上了,那么类中还有主体特征呀,所以在JAVA、PHP语言中还具备成员属性、成员方法等概念;int price 或是 public volid sendMessage function(){} 这就是对象的主体特征的体现,只是在语言中被落实成了 成员属性、成员方法而已。

二、面向过程

​ 面向过程是相对于面向对象提出的,是具备想对性的说法,比如上面讲的手机案例,手机是一个对象,主体功能是颜色、手机壳、打电话、发短信等宏观功能,我们不会考虑具体颜色是怎么实现的、打电话是怎么实现的,这样的具体实现过程,一步一步实现就是面向过程。比如打电话功能实现共计一千步,那么一步步实现过程相比较分析手机这个对象的主体特征来讲,你就是面向过程。

​ 为什么面向过程是相对于面向对象提出的? 面向对象是我们把某一个事物当做一个单位一,这个单位一就是我们的对象,然后宏观分析主体特征,同样的,一对象具备N个主体特征,我们取这个对象中的一个特征作为单位一,把这个特征作为单位一去看,当做对象看,这个特征的实现过程原本是之前面向对象的面向过程,但却成了面向对象,也就是面向过程和面向对象是相对性看法,取决于你视觉将"谁"当做单位一。

​ 举例:我把手机当做一个对象,它的主体属性有颜色、型号、外壳等,主体功能有:打电话、发短信,实现打电话这个功能就是相对于主体来讲就是面向过程,而现在我忘记了刚刚手机当做一个对象的事情,我的脑海中只想实现打电话这个功能,我把打电话这个功能当做一个对象,去分析打电话实现的主体特征有哪些?所以一个事物既可以是对象,也可以是过程。相对于你的视觉单位一,凝聚点。

三、语言体现面向对象

​ 面向对象和过程是一种思想,不局限与编程,任何事情都可以这么思考,只要这样思考对你是有意义的,在我们的编程中,用面向对象和过程思想是非常有利的,所以我们JAVA、PHP等语言都陆陆续续出来能够体现面向对象的思想语法,就是类;类具备属性和方法; 类可以被实例化。

​ 实例化的概念就是,原本在代码层面上定义的一个类,比如定义了一个手机类,手机类就相当于一张设计手机的图纸,接下来图纸设计好了,我们要生产使用了,就要实例化,实例化就是为了去使用这个手机类具备的功能点。

​ 我们很多语言并没有类的概念,或者在模拟类的概念,也不影响你对实际功能开发的面向对象思考,只不过有相应的语法配合会更加的默契一些。

四、封装、继承、多态

​ 封装、继承、多态是面向对象语言的落地实现。

1.封装

​ 封装在语言的体现中有2点,第一点是类的封装,第二点是函数,其实二者语法体现不同,运用场景不同,但是在本质上都是对一堆面向过程的代码封装,我们只要封装一次或者说造一次轮子,后续就可以一直调用,如果说一门语言不具备封装,那么从抒写角度来看,就不具备面向对象的概念,因为你写出的代码,都是亲力亲为,一行一个步骤,很多代码段都是相同的,如果具备封装,那么轮子造一次,重复使用即可,从抒写角度来看,相对性并不是一行一个步骤,而是调用了一个轮子来实现的,所以具备面向对象的概念,当然这一切都是从代码抒写的角度提出的。从编程思想上即便写的是面向过程仍然是面向对象的思维方法论。

​ 函数封装很简单就不提及了,是最简单封装代码,实现轮子的方式,类的封装是一个有机体,封装代码具备联系,整体构成一个系统单元,对外只提供一个接口,和函数一样,和函数一样调用者不知道内部实现,而在类中还提供了对方法的私有保护的开方性,内部方法可以相互调用,可以说是大型的封装。

​ 不仅是个封装的概念,在代码层次上类更是聚焦于编程者的面向对象代码层次上的体现,一个对象,具备多个特征,映射于一个类具备多属性和方法,更适用于直接的实际项目开发;

​ 而用函数作为直接开发是远不及类的。

2.继承性

​ 这个很好解释,试着考虑一下我们在设计一门语言的同时,只具备封装,这样能快速使用轮子和面向对象体现,那么还有什么方式能够比较快速的使用轮子呢,就是继承,我直接把你的功能继承遗传过来,这样的语言会更加简约而不冗余,而且在实际开发场景中,确实我们可能还要在封装一个东西,但是需要用另外一个封装体中的内容,我们是去把代码直接复制过来,还是建立一个继承性,更为简单。

3.多态

​ 多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

​ 其实设计一门语言内容的核心是不变的,或许以后不止于函数、类、继承、封装、多态概念,还会有更多...

作者:赵锐庆

posted @ 2020-05-19 16:21  锐庆  阅读(640)  评论(0)    收藏  举报