用故事来描述‘面向过程’和‘面向对象’的区别

看书进度已经到了介绍“对象”的部分,总体上来说这本书确实很有趣,为了描述面向过程的编程和面向对象的编程的区别,书里给了这么一个小故事:

椅子大战

程序规格:

在图形接口画出四方形,圆形和三角形,当用户点选图形时,图形需要顺时针转360度并依据形状的不同播放不同的AIF音效文件

这里有阿珠跟阿花两个程序员

阿珠想:这个程序需要执行什么动作?需要rotate和playSound,然后她就开始进行设计的工作。

阿花想:这个程序需要什么样的事物?有什么关键角色?她首先想到形状体(shape),还有用户,声响等对象与点击事件,然而这些对象早就已经建立好了,所以她只要专注于创建形状体就行了。

阿珠:写了rotate和playSound两个方法

阿花:为3个形状各写出一个类。每个类中都有rorate和playSound方法

如果这是需求增加,要求加上阿米虫原虫形状,用户点选时也是旋转并播放.hif声音文件。

对于阿珠来说就麻烦了,要在方法中进行判断,如果不是阿米虫先查询播放哪个AIF文件,然后播放,如果是阿米虫就播放.hif。

对于阿花来说,不需要动到已经测试好的程序就可以达到新目标,面向对象的适应性与可扩展性让她面对修改时不会太过于痛苦

如果现在需要更改阿米虫的旋转方式。

对于阿珠来说,就需要更改rotate()函数,并且要加入额外的参数,还要进行选择,本来已经测试好的东西全部都要重来一遍

对于阿花来说,只需要修改阿米虫这一个类的方法而已。其他的代码都不需要修改。

阿珠这时说,阿花的代码有重复。那么这时,阿花可以利用面对对象的继承

找出四个类的共同的部分,取出新的类,然后让四个类继承这个类,子类会自动获得父类的功能,这样就解决了代码重复的问题

子类的方法可以覆盖父类的方法,Java虚拟机在遇到不同的子类时会使用不同的方法。

覆盖的意思就是让子类重新定义继承下来的方法,以改变或延伸此方法的行为。

感谢这本书,让我能有个努力的方向

同时,林冉也该检讨一下....进度太慢了...需要加速!

总之...希望有更多前辈不吝指导!

晚安

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180107A0PH9I00?refer=cp_1026

扫码关注云+社区