关于面向对象的深刻理解

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

从面向机器到面向对象

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

此时程序员能够专一于问题自己,理清解决问题的具体步骤,而后将之用程序语言讲给计算机就能够啦。对于单1、具体的问题不管其复杂与否,采用面向过程的语言均可以彻底hold住。这就如同流水线做业通常,环环相扣,问题复杂了无非就是工序多一些而已。可是随着计算机硬件的发展,人们但愿用计算机处理的事务也愈来愈多,业务逻辑也愈来愈复杂,此时再用面向过程的语言去实现如此纷乱的业务逻辑就有些难以招架了。就如同好多条生产流水线掺杂在了一块儿,A线依赖B线上的一道工序,B线又依赖于C线的一道工序,而C线还和A线有着关联,这样杂乱的流水线普通主管看了确定会头大。此时就须要面向对象的程序设计语言来大杀四方了。编程

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

面向对象三剑客

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

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

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

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

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

对象与抽象

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

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

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

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

接口

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

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

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

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

总结

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

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

*版权声明:转载文章和图片均来自公开网络,版权归做者本人全部,推送文章除非没法确认,咱们都会注明做者和来源。若是出处有误或侵犯到原做者权益,请与咱们联系删除或受权事宜。
相关文章
相关标签/搜索