京华大学计算机系大二年级大教室,一个老师正在给学生讲授面向对象程序设计的课程。
“对象具有以下的主要特特征:
一是唯一性。每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
二是抽象性。抽象性是指将具有一致的数据结构或者说是属性和行为或者说是操作的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
三是继承性。继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
多重继承,、b、n、b均仅支持单继承,注意在多重继承时,需小心二义性。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。
采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。
四是多态性也可以表述为多形性。多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。
多态性增强了软件的灵活性和重用性。
”
章岩和黄华山、李庆丰、贺俊明等人坐在一起上课,那低沉枯燥的声音令到他们都昏昏欲睡。
“这样照本宣科读教材,倒不如自己回宿舍看书、做练习或者上机编程。”后面那排座椅上有一位同学低声说。
周边立即响起一片附和、揶揄的声音。
“是啊,这样的讲课枯燥无味、催人睡眠。”
“这样的老师谁不会做?根本不用备课,我去讲都比他好。”
“教师不是传道、授业、释疑、解惑的吗?怎么变成了先生?”
甚至后面的座位上陆续有人开始离开。
“我们是不是也干脆回去上机编程算了?”李庆丰低声问章岩、黄华山等人。
“走吧,这样的催眠课不听也罢,白白浪费时间。”黄华山小声地说,随后站起来,从大课室后门离开。
李庆丰、贺俊明也跟着从后门离开了大课室。章岩也只好悄悄跟在他们后面离开。
一行人回到黄华山的宿舍,坐着聊起了面向对象编程的学习。
“刚才我是越听越糊涂了,语言是面向过程编程,是面向对象编程,它们之间到底有什么本质区别?为什么有了语言还要弄出个语言来,增加我们学习和编程的复杂性?这种面向对象编程有什么实质意义?”李庆丰首先把自己心中的疑惑和盘托出。
“我看是不是可以这样来理解,面向过程编程就是把软件需要实现的功能按照实际运行的顺序,每一个步骤调用一个实现相关功能的子函数,把从开始到结束的所有步骤按调用顺序写进主函数里面,直接调用主函数就可以实现软件的功能。”黄华山发表自己的见解,“至于面向对象编程,就是把每一钟类型的操作编成一个功能模块,也就是所谓的对象,或者说是类,需要什么操作就直接调用相应的模块去实现。然后把这些功能模块按照操作顺序组合成一个应用系统。”
贺俊明跟着讲述自己的观点:“我觉得大概就是这个意思,至于为什么有了语言还要创立语言,就像以前的电子产品都是用一个个独立元件组装在设计好的线路板上,构成一个具有某种功能的产品。
如果要改变产品的功能,就要改变整个电子线路板,更换所有电子元件。而现代的电子产品大多是使用功能模块,只要设计科学,采用的线路板都差不多,需要增加或改变功能,选择相应的功能模块接入线路板中设计好的相应位置就行了。
可以说,语言就是使用独立元件组装电子产品,语言就是使用功能模块组装电子产品。”
“用我们每天都要经历的吃饭来举例也许更好理解。”章岩笑着说,“吃一顿饭就是一个主函数,我们吃饭的过程是由很多个动作串起来完成的。
比如说,先喝汤,然后吃一口饭,夹一口菜,甚至具体到夹什么菜,这里每一个动作都可以看做是一个步骤,在编程中就是调用一个子函数,把我们吃饭的所有动作完整地记录下来,就完成了我们吃饭的过程。但如果我们要改变吃菜的顺序,我们的所有步骤都必须重新调整甚至全部推倒重来。这就是语言的面向过程编程,这整个吃饭的过程就是我们的所谓的主函数。
如果我们忽视吃饭过程中每一个具体的动作或者说步骤,而把喝汤、吃饭、吃菜当成是一个个的事件