“教师不是传道、授业、释疑、解惑的吗?怎么变成了读书先生?”
甚至后面的座位上陆续有人开始离开。
“我们是不是也干脆回去上机编程算了?”李庆丰低声问章岩、黄华山等人。
“走吧,这样的催眠课不听也罢,白白浪费时间。”黄华山小声地说,随后站起来,从大课室后门离开。
李庆丰、贺俊明也跟着从后门离开了大课室。章岩也只好悄悄跟在他们后面离开。
一行人回到黄华山的宿舍,坐着聊起了面向对象编程的学习。
“刚才我是越听越糊涂了,C语言是面向过程编程,C++是面向对象编程,它们之间到底有什么本质区别?为什么有了C语言还要弄出个C++语言来,增加我们学习和编程的复杂性?这种面向对象编程有什么实质意义?”李庆丰首先把自己心中的疑惑和盘托出。
“我看是不是可以这样来理解,面向过程编程就是把软件需要实现的功能按照实际运行的顺序,每一个步骤调用一个实现相关功能的子函数,把从开始到结束的所有步骤按调用顺序写进主函数里面,直接调用主函数就可以实现软件的功能。”黄华山发表自己的见解,“至于面向对象编程,就是把每一钟类型的操作编成一个功能模块,也就是所谓的对象,或者说是类,需要什么操作就直接调用相应的模块去实现。然后把这些功能模块按照操作顺序组合成一个应用系统。”
贺俊明跟着讲述自己的观点:“我觉得大概就是这个意思,至于为什么有了C语言还要创立C++语言,就像以前的电子产品都是用一个个独立元件组装在设计好的线路板上,构成一个具有某种功能的产品。
如果要改变产品的功能,就要改变整个电子线路板,更换所有电子元件。而现代的电子产品大多是使用功能模块,只要设计科学,采用的线路板都差不多,需要增加或改变功能,选择相应的功能模块接入线路板中设计好的相应位置就行了。
可以说,C语言就是使用独立元件组装电子产品,C++语言就是使用功能模块组装电子产品。”
“用我们每天都要经历的吃饭来举例也许更好理解。”章岩笑着说,“吃一顿饭就是一个主函数,我们吃饭的过程是由很多个动作串起来完成的。
比如说,先喝汤,然后吃一口饭,夹一口菜,甚至具体到夹什么菜,这里每一个动作都可以看做是一个步骤,在编程中就是调用一个子函数,把我们吃饭的所有动作完整地记录下来,就完成了我们吃饭的过程。但如果我们要改变吃菜的顺序,我们的所有步骤都必须重新调整甚至全部推倒重来。这就是C语言的面向过程编程,这整个吃饭的过程就是我们的所谓的主函数。
如果我们忽视吃饭过程中每一个具体的动作或者说步骤,而把喝汤、吃饭、吃菜当成是一个个的事件,或者说是对象,也可以说类。那么,我们描述吃饭的过程就要简单多了,直接调用相应的事件,而无需理会每一个事件里面的具体过程和实现手段。
可以说,对象是由一定的属性、特征、功能、方法和具体动作组合而成的一个事件。
至于每一次动作吃的是什么菜,可以把某一个菜作为变量,直接调用吃菜这一事件,就可以很好地进行描述。”
黄华山、李庆丰、贺俊明听了章岩的比喻,对面向过程编程和面向对象编程之间区别就有了清晰的认识。
“两者的应用范围也不一样。”章岩笑着说,“如果要实现简单的功能,应用面向过程的编程更有优势。而要实现复杂的功能,应用面向对象编程的优势就要大得多。”