面向对象编程是什么意思?

 

面向对象编程是什么意思?_第1张图片

前言

任何学习编程语言的人在初期应该都是听说过面向对象编程这个词的,基本上是一个绕不过去的坎,而这个坎也不是很好迈过去的。我接触这个词应该有四五次了才逐渐理解其含义,之前一直是在使用而没有明白其中的思想。

如果你确实在点开这篇文章之前没听过面向对象编程,却又学过编程语言,我想那一定是 C 语言了,因为 C 语言并不是面向对象编程语言。不过也别立刻退出,我认为只要以后想从事跟计算机有关的职业,你一定不能只会 C 语言,至少还得会 Python 吧。所以只要不是单纯学校逼你学而你也实在没兴趣,请看完吧,想必会有所收获的

面向对象编程

由来

面向对象编程的思想不是某个天才一拍脑袋想出来的,而是经过了一系列发展而来的,它的核心范式源自 1960 年代挪威科学家奥利 - 约翰・达尔(Ole-Johan Dahl)与克利斯登・奈加特(Kristen Nygaard)开发的 Simula 语言,Simula 语言第一次定义了类和对象的概念,之后由艾伦・凯(Alan Kay)在 1970 年代通过 Smalltalk 语言,被完善为 “万物皆对象” 的完整体系,还进一步提出了封装、继承与消息传递机制,最终因为 C++ 和 Java 这两个使用了面向对象思想的语言的广泛使用而迅速普及全球,并且还持续影响着众多采用多种范式相融合的开发方式的软件的开发。

百度百科对其的解释如下

面向对象程序设计 (Object Oriented Programming) 作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。

关于更多编程思想的大致发展,推荐观看下面这个视频。

程序员宝典之《面向对象圣经》_哔哩哔哩_bilibili

对象和类

这个具体含义当然不会是顾名思义,面对着你的对象编程。Object Oriented Programming,这里的 Object 是指数据和行为的封装体,具体理解就是是某个物体抽象化后的数字表达,它有属性(即数据)和行为(即方法)。

之所以这个编程范式被广为流传,按我的理解是因为它与人的思维方式最为契合。正如我们现实中有很多的物品,各种物品又有各种各样的属性和功能,比如一台电视,有尺寸和分辨率的属性,有播放视频和音频的功能;一台洗衣机,有容量,重量的属性,有洗衣服,脱水的功能。我们的面向对象编程主张在编程过程中创造一个一个对象,然后根据需求使用他们的属性或方法。

就比如现实里要煮饭我们就会去用电饭煲,我们如果在编程时有类似 “煮饭” 的需求,就可以 new 一个 “电饭煲” 出来(大部分语言如此)去满足我们的需要。

然后正如现实里一个特定电饭煲的生产肯定是有个设计图纸的,我们怎么去 new 一个 “电饭煲” 呢,根据什么呢?诶没错,就是类(class),它就相当于现实里制造物品时的设计图纸,按照着图纸生产出来的东西都会和图纸上写的属性和功能一致,也是很贴近现实了。

所以直接一点来讲,属性就是类里面的变量,功能就是类里的方法。通过类,我们能够创建对象,然后通过对象,我们能够使用方法和变量,之后就是这些方法和变量之间进行交互然后达到我们的目的了。

这方面的语法知识倒是不是很重要,主要是要理解其中的思想。在项目十分复杂的时候,准确的使用类和对象能够极大的降低项目的复杂性,提高可维护性和可理解性,直线降低开发难度。

封装、继承和多态

面向对象编程的思想不止于类和对象,封装、继承和多态就是十分重要的剩下的部分,也是不可不讲的。

封装

封装就是说要使用方法,有一个接口给你用,你传必要的参数就行,而具体的,这类里的方法咋写的,怎么实现的,你其实无需知晓,就像电饭煲,按下特定的的按钮就可以开始煮饭了,而具体怎么实现的,你不必去知道。按按钮就像是调用接口,不仅方便快捷,还使得代码整体的整洁度大大上升。

继承

继承实际上有两类需求,一类是更新,一类是作为两个不同类的交集。

第一类,众所周知,产品是要更新的,但是很多商品并不是完全重新设计,而是在上一代产品的基础上进行更新,我们可以继承上一代产品的设计图纸,然后对其中的功能和属性进行更新,可以是修改,也可以是增加。

上一代产品的设计图纸,我们可以称为父类,这一代的设计图纸,我们就可以称为子类。

第二类,你的产品可能在之后的计划里要分出两条产品线,一类走性价比,另一类走全能高端。那么它们之间必然是有着一些基本上的相同的,比如说基本功能和一些品牌属性都会是一样的,而一些细化的地方才会有差异。那么如果我们为这两类产品都单独写类,那么一定会有相当多的重复代码,这时候继承的优势就体现出来了,基本的属性和功能可以先写进父类,然后用子类继承,再分别细化优化。同样能起到事半功倍的效果。

多态

以电饭煲为例,同样的煮饭功能,可能功率并不是一样的,比如电饭煲 1 的是 800w,电饭煲 2 的是 1000w,但他们都有煮饭的功能,再分别调用他们的煮饭方法时的结果是不同的。

不同的类,方法名称一致,不同的对象使用同一名称的方法,就叫作多态。如果有很多不同对象用同一个方法的需求,这个多态就很有用处了。

采用这个思想的语言几乎都是如今的主流语言,或者说如今的主流语言几乎都是采用着这种思想的。

Java 更是其中较为极端的一例,它完全是面向对象的,所有的代码都写在类里。

面向过程编程和面向函数编程

编程思想其实有非常多,计算机大佬们其实设想过很多的编程思想,目的都是为了提高开发效率。比如说面向服务编程、面向协议编程、面向切面编程、面向事件编程、面向数据流编程、面向过程编程、面向函数编程等等,其实也可以简单的理解一下,面向啥,就是主要靠啥解决问题、把事物抽象成啥进行编程。

很多思想并没有被广泛使用,而面向对象编程无疑是如今的主流,我想广大程序员的选择肯定是有原因的。我这里也就简单讲一下尚未完全没落的面向过程编程和面向函数编程。

面向过程编程

百度百科

面向过程 (Procedure Oriented) 是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。简写为 POP。

这种思想主要是把过程拆解成一个一个步骤进行编程。对于微小的程序或者项目,面向过程的具体步骤很清楚,代码也显得短小精悍,能够开发出非常高效率的程序。但缺点显而易见,其代码重用性太差,维护难度很大。

面向过程的典型代表语言就是 C 语言,C 语言没有类和对象一说。C++ 里引入了类和对象,也就是引入了面向对象的思想,变成了和 Python 一样的多范式语言了。之后还有 C#,同样是多范式的语言。

面向函数编程

面向函数编程是一种以数学函数为核心概念的编程思想。它强调使用函数来处理数据,避免可变状态和副作用,从而提高代码的可读性和可维护性。

常见的有 Haskell, Scala 等语言,这些都比较硬核,都是在特定领域使用。

后话

希望这篇文章对你有帮助,感谢观看。

 

你可能感兴趣的:(学习,好奇心,python,java,青少年编程)