关于面向对象的深入理解_经验分享

 

从面向机器到面向对象

最开始的计算机程序编码就是0101,程序员完全要以机器的二进制思维去思考问题;后来有了汇编只是编码形式上有了变化,但是本质并没有改变,程序员们的关注点还是在于机器本身,程序员要对CPU、寄存器等硬件了如指掌;当C语言、COBOL等面向过程的语言横空出世后,这是一次本质上的革命,把程序员从二进制的世界中解救了出来,终于可以让他们“像人一样”去思考问题啦。

此时程序员可以专注于问题本身,理清解决问题的具体步骤,然后将之用程序语言讲给计算机就可以啦。对于单一、具体的问题无论其复杂与否,采用面向过程的语言都可以完全hold住。这就如同流水线作业一般,环环相扣,问题复杂了无非就是工序多一些而已。但是随着计算机硬件的发展,人们希望用计算机处理的事务也越来越多,业务逻辑也越来越复杂,此时再用面向过程的语言去实现如此纷乱的业务逻辑就有些难以招架了。就如同好多条生产流水线掺杂在了一起,A线依赖B线上的一道工序,B线又依赖于C线的一道工序,而C线还和A线有着关联,这样杂乱的流水线普通主管看了肯定会头大。此时就需要面向对象的程序设计语言来大杀四方了。

面向对象这种设计思想更加适合对于现实世界的模拟,并以此来处理系统性问题。它不再是以具体的点为中心,而是着眼于整个面。用类抽象出一群事物的共性,用接口定义好不同事物之间的交流规则,用继承的方式让同一类的事物也可以千姿百态,用多态的方式让千姿百态的事物也可以整齐划一。每个程序员都是代码世界的上帝,以面向对象的思想去设计整个世界的架构,以面向过程的思想去研究世界的每一株土木,方可达到一花一世界,一叶一菩提的境界。

面向对象三剑客

物以类聚,人以群分。——《战国策·齐策三》

类是整个面向对象设计理论的基石,只有把类搞清楚搞明白了才能让整个理论大厦有坚实的地基。

首先抛开程序设计,单从现实世界的角度来看:枪保卫祖国的人叫军人,在工地上干活的人叫工人,在高级写字楼里面办公的人叫白领。对于每一类人,他们每个个体都不相同,但是它们都有相似的特征,所以我们把他们归为的一类人。面向对象最根本的思想就是对于现实世界的模拟,用程序语言来表述业务逻辑。所以程序中的类可以这样理解:类是一组相似事物的统称,是对他们共性的一种归纳。 类具有属性和方法,从军人的角度来看他们所属于的部队、所驻守的地区……,这是军人的属性;他们可射击、可擒拿……这是他们的方法。

实际上世间万物皆可归于一类,因为只要有相似点,就有依据把他们归于一类。那应该如何来设计类呢?请记住这样一句话:横看成岭侧成峰,远近高低各不同。角度决定看法,一定要结合具体需求,来考虑类的设计。

类有属性和方法,那么如何划分属性和方法呢?这里应该遵循极简原则。即属性原子化、方法单一化。属性细化到不能再分割,方法只能做一件事。这样能够最大化地解耦,满足系统的可拓展性与易修改性。

对象与抽象

对于类的认知清晰以后,对象就比较容易理解了。对象就是类的一个具体实例。以军人为例,黄继光,邱少云就是军人这一类人当中一个具体的实例。

其实关于类和对象还可以深入探究一下,这个时候我们先回归于现实世界。中国的人很多,那么党和政府如何来组织管理我们呢?首先不同的人有不同的职业,比如医生、教师、军人、工人等等。政府依据不同类别的职业制定出了不同的政策,比如军人买票优先、教师游览一些景点免费。其实依据不同职业有不同治理策略是一种归类更是一种抽象。

抽象的本质就是隔离干扰、总结共性、降低事物的复杂度,站在更高的角度去看待问题,从而更好地把控全局。所以类对于程序员来说是一种抽象的工具,让我们能够更好地全局把控整个项目,组织管理整个项目。

对于程序员来说,类是抽象的,对象是具体的,拥有了类就拥有了上帝视角,来俯瞰整个系统;拥有了对象就拥有的亿万子民,来进行劳动,创造价值。

关于面向对象的深入理解_经验分享_02

接口

“接口”这个词是被滥用、乱用最多的术语了。抛开其他的接口不谈,这里主要是说一下面向对象中的接口。如果只看教科书上的定义,你很容易明白接口具体是什么:

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。—— 百度百科

但是光看这些冷冰冰的定义,却很难让人理解,尤其是对新手来说,为什么要用到接口?接口本质作用是什么?首先想想有身边哪些接口:Micro usb、Type-C、HDMI……,为什么要用到这些接口?因为手机要连接电源,显示器要连接电脑……,从中我们进行一次抽象总结:接口是两种不同事物交互时的一个关卡,更是一组标准,定义了交互双方所应该遵循的规则。从程序的角度来看:这种规则就是一组相关的功能点的集合。举个栗子:目前有一个鼠标类,当某天我们这个鼠标类的对象需要与主机类的对象进行交互时,此时就应该去实现一个叫USB的接口,方可进行交互。

从设计的角度来看:接口着眼于某种具体的功能,是一种规范与约束;类着眼于某一类事物的共性,是一种总结与抽象。

总结

类、对象、接口是面向对象这一编程思想的三大基石,仅仅明白课本上那冷冰冰的定义是远远不够的,必须深入了解其设计内涵,这样在以后的工作项目中我们才能游刃有余,达到手中无剑,心中有剑这一境界。

 

关于面向对象的深入理解_经验分享_03

*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。