总觉得面向对象编程这个概念比较抽象。对象是个什么鬼?编程不就是写代码吗?你写一堆代码,然后运行,然后得到或显示运行结果,不是这样的吗?为什么还要说是面向对象编程?难道是程序员写代码时,面前要摆个“对象”,然后心里默念“对象保佑”,才能少出bug吗?
哈哈!没错、没错,只有对象保佑,才能少出bug。
其实,对于现在的新人来说,学习什么样的编程方法,都应该没有太大的障碍。相反对于有过程化编程经验的人来说,学习面向对象编程才是一件比较痛苦的事情,因为,他有面向过程的包袱,思维被“过程”格式化,忽然要采用面向对象的编程模式,比较难以跳出既定的思维习惯。好在“面向过程”的这一批“老人”,现在应该都切换过来了吧,估计想要他们再回到面向过程都难了。
首先,我想说,相比过去的面向过程编程,面向对象编程是一种轻量级的编程方法。
从两个层面来理解这里所谓“轻量级”的含义:
其一,从开发项目的角度。因为,它将你的开发项目定义为一个总体对象,然后,根据功能模块、服务对象等的不同被规划为若干子对象。咱们编程不再是直接为一个项目编程,而是为每一个子项目(子对象)编程,从而实现每一个功能子集。
其二,从代码组织的角度。因为,面向对象编程的编程思想,将程序相关的一切资源,包括代码本身都称之为对象。那么程序代码描述的任何目标,都是一个对象,程序员可以再面向这个对象来组织新的代码。所以,我们编程的过程不再仅仅只是处理数据,还会将已经组织好的代码块作为新的对象来处理。
正因为如此,现代程序员极少有写长代码的机会和习惯,甚至在一个对象里,连续超过100行代码的机会都是极少的,绝不像过去动辄上万行代码。这会带来一个极大的好处,就是一次性的代码量少了,程序员在写代码的间隙有更多踹息的机会,感觉写代码更“轻量”,也有更多的时间思考代码优化和重构的可能,或者能将更多的关注点放在组织架构和业务逻辑的处理上。
这就是面向对象编程之所以能取代和流行原因。
那么,究竟什么是面向对象的编程呢?下面我们来细细解读。
假定读者已经学习了一些关于编程的基本概念,诸如:变量、变量的运算、数据类型,包括数组、列表,还有流程控制语句等等。有了这些基本的概念,对下面的内容就应该比较好理解了。
面向对象编程,既是一种编程思想,也是一种编程方法论。
我们需要从这两个方面来理解:
第一,它建立了这样一种编程思想
简单说,就是面向对象编程的思想。编程的过程,就是创建对象和创建对象的行为能力的过程。
包含三层含义:
1、万物皆对象,包括数据和代码。
2、创建对象,就是创建对象的描述,设计对象的行为。
3、编程的过程,就是创建对象的过程。
分述如下:
1、万物皆对象,包括数据和代码
既然万物皆对象,认识事物,就是认识对象。
包括我们开发的程序项目,也是对象,以及项目中要实现的一切功能细节,一切可视化的界面元素,一切不可视的变量、类型等数据和代码,都是对象。
2、创建对象,就是创建对象的描述,设计对象的行为
认识对象,就是认识对象的属性和行为。包含两个方面:
其一,一切对象,作为一个实体,皆有属性。所谓属性,是对对象特征的描述,就是定义它叫什么名字?长什么样子?是什么类型?有什么特性?等等。
其二,只有属性的对象是死的,一个有生命的对象,还必须有行为的能力。编程的目的就是为了创建有生命的对象。
比如一个项目,光好看不中用是不行的。它需要具备必要的功能,也就是行为的能力。项目中,我们定义的一切对象(如变量和类型等)都是有生命的,它们通过人机交互,甚至自动触发,能够产生行为,这个行为被称之为“事件”》。
这些对象的属性和事件,都是程序员需要定义的。
3、编程的过程,就是创建对象的过程
从形式上看,编程是写程序代码块,是不断定义对象的属性和行为的过程,本质上,就是创建各种对象的过程。
只不过,在这个过程中,我们一方面需要把对象的属性定义好,也就是对象的特征需要描述清楚。另一方面,我们更多的精力是要把对象的行为定义好,让它能按照我们规划设计的目标功能去实现。比如,某个对象在什么情况下会触发什么事件,来完成什么功能。
实际情况往往是,一个程序员在创建了一个项目以后,就会不断的按照项目规划设计的架构,来一层一层的搭建和填充整个项目的对象,也就是不停的定义对象的属性和行为,并让其实现既定的功能。
第二,它创造了这样一种编程方法论
简单说,就是一种基于对象、属性、事件和方法的编程方法论。
包含三层含义:
1、定义一个对象,首先定义其属性。
2、其次定义对象的行为,包括对象可能发生的事件及事件的结果。
3、定义对象行为的过程,通常是通过事件和方法来实现。
分述如下:
1、定义一个对象,首先定义其属性
属性用于描述对象的个性特征。比如外观特征、数量特征、访问特征等等,是创建对象时首先要完成的任务。
2、其次定义对象的行为,包括对象可能发生的事件及事件的结果。
为了让你创建的某个对象,具有某种行为能力,你必须规划设计好这个对象的事件,事件用于实现对象的功能。
3、定义对象行为的过程,通常是通过事件和方法来实现
我们说定义对象的行为,就是设计对象的事件,并通过事件的发生,来实现对象的功能。
举一个简单的例子,来解读上面的方法论。
比如,我们要创建一个按钮对象,这个按钮能够实现在用户使用鼠标单击以后,弹出一个对话框,提示“你好!”。
那么,我们分三步来完成它:
第一步,创建一个按钮,定义它的属性。包括:按钮的名称、ID、尺寸大小、显示位置等等。
第二步,给它设计了一个鼠标单击事件。那么,这个按钮就能接受一个鼠标单击的行为。
第三步,为鼠标单击事件添加方法代码,代码运行的结果,也就是单击事件的行为结果。
实例代码如下:
//创建按钮对象
<input type = ’button’ value = ’单击按钮’ style = ’width: 90px; height: 30px;’ onclick = ’ClickMe()’ />
上面的按钮中,对象的属性定义了,类型为“button”,显示为“单击按钮”,它的外观属性定义在style中,包括宽度和高渡,以像素px为单位。同时,还为它定义了一个鼠标单击事件,该事件会触发一个叫“ClickMe()”方法。
//创建按钮对象的事件方法
function ClickMe()
{
Alert(‘你好!’);
}
所谓的方法,就是能够实现特定程序功能的代码块。
在程序项目中,程序员需要处理几乎他能想到的所有对象的所有事件,并为这些事件的完成编写实现其功能的代码。
面向对象编程不仅帮助我们建立了对象、属性、事件和方法的思想概念,而且可以说,面向对象编程的过程,就是一个程序员主动规划和设计“对象、属性、事件和方法”的过程。
我们为一个应用项目编写程序代码,通常不是被动地了解这个项目的对象、属性、事件和方法。而是根据项目需求,主动地设计它,从无到有地创建它们,设计出所有的对象,对象的属性,可能发生的事件,以及与事件相关的各种程序方法。
这是就一个主动的过程,即便是面对一个历史遗留的维护项目,我们依然应该拥有这个项目的全局观念,知道它是由哪些对象构成的,所有的对象可能发生哪些事件,每一个事件的方法是如何实现的,等等。
至于代码本身,它也是一种对象。这个对象,我们会更多的运用到“封装、继承和多态”的编程理念,来进一步优化我们的编程方法和代码结构。
所以,面向对象编程为我们创造了一套完整的、成熟的、科学的方法体系,归纳为一句话,那就是:面向对象的编程,就是基于对象、属性、事件和方法的编程思想,以及基于封装、继承和多态的编程方法。