什么是面向对象

本文内容纯属笔者代码写多了后的个人理解,如有疏漏请多多包涵,如有错误烦请指正,如有想法交流非常欢迎!

在我刚开始学习编程的时候,“面向对象”一词曾经在很长一段时间内给我巨大的困惑。

即使我在网上看了很多科普文章、科普视频,但是我看到的科普文章、视频并没有解决我的困惑(虽然现在回想起来,它们说的并不错),我相信很多非专业人士和新入门的小白都遇到和我一样的困难。

前段时间,有个非专业的朋友也问了我这个问题:“什么是面向对象?我听了很长时间了,始终没理解什么是面向对象”。我努力地把我对这个概念的理解全部说给他听,可是最后却发现,他并没有对这个名字理解得更加明白。

我陷入了和之前我看到的科普文章、视频的同样困难之中。

究其原因,我认为,我看到的这些科普文章、视频,是从一个内行(过来人)的视角描述这个问题的,并不是一种外行和小白理解这个问题的角度。

下面,我尝试用一种普通人能明白的方式回答“什么是面向对象”。

一、首先,没有较多的编程实践的积累,是不可能彻底体会、理解“面向对象”的。

注意标题中“彻底”一词。

从我自己的经历来看,没有编写过面向过程(不是面向对象)语言的代码,是不能真切体会到没有“面向对象”所带来的痛点的,只有经历这些代码编写实践,才能彻底理解“面向对象”解决了哪些问题,又是怎么解决的,又经历了哪些关键性的问题。

二、一言以蔽之:“面向对象”是一种技术

就和“杂交水稻”是农业方面的技术一样,“面向对象”是软件行业的一项技术。

特殊之处在于,由于软件(也就是程序),是一种纯粹的人的脑力劳动(996可能也算体力劳动?),所以软件方面的技术也是改造脑力劳动的技术,是改进软件生产人员“思想方式”的一项技术。

程序员在编程中的思考方式,完全可能被他用到其他地方,因而从这个意义上说,“面向对象”改变了人的思考方式,它也可以算的上一种“思想”,这种思想叫“面向对象思想”。其实不光是软件行业,任何行业都一样,人通过劳动改造客观世界的同时,也在通过劳动改造自身,任何劳动都会反作用于自己的认知意识,只不过软件行业更直接。

三、面向对象技术是用来提高软件开发效率的一种技术

软件开发就像做数学题,有时题很简单,画两笔就做出来了,有时题目很复杂,想几天都没做出来(然后找老师,结果发现是题看错了),总而言之,软件开发的效率具有很大的不确定性。

而且,对于动辄几万行的产品级程序来说,这就像一道超长的高考数学题,期间任何一个等于号算错了,最后都是满盘皆输。

在了解软件开发的特殊性后,就能理解“提高软件开发效率”是一项多么迫切的需求。

面向对象技术就是出来解决这个问题的,尽管如此,它并没有完全、完美地解决这个问题,目前,软件开发效率仍然远低于社会对软件产品的需求。

四、面向对象技术是怎么提高软件开发效率的

答:通过提高代码复用率的方式。

代码复用,就是指之前做其他程序的代码,可能已经写好了几千行几万行,拿过来,稍加修改,甚至不改,直接复制+粘贴拿到新的软件上面去用,这就叫代码复用。

如果还用做高考数学题打比方,就是原来做过的原题,结果高考只是改了个数字,那么你就把背过的原题答案直接照抄,改几个数值,算出个新值就行了,这就太爽了,省的想了。

当然仔细想想,就会发现这是很难遇到的事情,毕竟大多数人高考从来都考不到这种原题。程序员也一样,纵使他想复用代码,但是他的代码不允许,多数情况程序员会发现,为了把他之前写的代码移植到新程序上所花费的时间、精力,和从头开始重新写这个新程序所花费的时间、精力差不多,甚至更多,非但不省功夫,可能更费工夫。

为什么会出现这样的情况呢?答案很简单:因为不是所有的代码都是方便复用的。很显然,那些方便复用的代码显然要遵循一定的编写规范、规章制度,或者说,写出容易复用的代码是要遵循一定的科学规律的。

打个说,你不能在代码里写一些乱七八糟的东西,就好比记笔记,当时记的时候非常潦草,再看的时候字就不认识了,这样的代码(笔记)怎么能达到“复用”的目的呢?

往粗略得说,把面向对象理解成一种代码编写“规范”、“规章制度”对于非专业人士来说也未尝不可。但是应该指出,面向对象的含义可绝不仅仅限于“规范”而已,在写代码的时候,一方面,当然要遵循一定的规范,另一方面,就要开始思考“用”的时候,为复用做准备了。

面向对象技术,可以说是一整套提高代码复用率的解决方案。总而言之,就是让程序员的心血能积累下来,不是每次都重头再来。

五、我是刚进入软件行业的小白,我还想进一步了解面向对象的内容

总得来说,面向对象有三大关键性的名词:封装、继承、多态

至于这三大名词都是干什么的,这里简单提一下,只是粗略的回答,可能解释得并不全面。

封装:就是用来防止犯错的,约束程序员,让他更难写出错误的代码。

继承:就是代码复用,这个非常切题。

多态:和封装通过约束程序员来提高代码在将来复用性的方式不同,多态是通过方便代码的使用来提高代码复用率的,总的来说,多态提高了代码编写以及复用时的灵活性。(这个是最难理解的,我记忆中很多文章会举“开车”和“开门”的例子,这里我不用这种方式)

有生之年可能再写另外一篇文章细说这三大名词。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值