看书进度已经到了介绍“对象”的部分,总体上来说这本书确实很有趣,为了描述面向过程的编程和面向对象的编程的区别,书里给了这么一个小故事:
椅子大战
程序规格:
在图形接口画出四方形,圆形和三角形,当用户点选图形时,图形需要顺时针转360度并依据形状的不同播放不同的AIF音效文件
这里有阿珠跟阿花两个程序员
阿珠想:这个程序需要执行什么动作?需要rotate和playSound,然后她就开始进行设计的工作。
阿花想:这个程序需要什么样的事物?有什么关键角色?她首先想到形状体(shape),还有用户,声响等对象与点击事件,然而这些对象早就已经建立好了,所以她只要专注于创建形状体就行了。
阿珠:写了rotate和playSound两个方法
阿花:为3个形状各写出一个类。每个类中都有rorate和playSound方法
如果这是需求增加,要求加上阿米虫原虫形状,用户点选时也是旋转并播放.hif声音文件。
对于阿珠来说就麻烦了,要在方法中进行判断,如果不是阿米虫先查询播放哪个AIF文件,然后播放,如果是阿米虫就播放.hif。
对于阿花来说,不需要动到已经测试好的程序就可以达到新目标,面向对象的适应性与可扩展性让她面对修改时不会太过于痛苦
如果现在需要更改阿米虫的旋转方式。
对于阿珠来说,就需要更改rotate()函数,并且要加入额外的参数,还要进行选择,本来已经测试好的东西全部都要重来一遍
对于阿花来说,只需要修改阿米虫这一个类的方法而已。其他的代码都不需要修改。
阿珠这时说,阿花的代码有重复。那么这时,阿花可以利用面对对象的继承
找出四个类的共同的部分,取出新的类,然后让四个类继承这个类,子类会自动获得父类的功能,这样就解决了代码重复的问题
子类的方法可以覆盖父类的方法,Java虚拟机在遇到不同的子类时会使用不同的方法。
覆盖的意思就是让子类重新定义继承下来的方法,以改变或延伸此方法的行为。
感谢这本书,让我能有个努力的方向
同时,林冉也该检讨一下....进度太慢了...需要加速!
总之...希望有更多前辈不吝指导!
晚安
领取专属 10元无门槛券
私享最新 技术干货