第一次作业
分析:OO第一次作业是实现多项式加减,这次作业主要是对输入的处理,输入处理好后就只是数据的简单相加。但第一次使用java,对语法还不是很熟悉,处理复杂字符串时手忙脚乱,有很多编译上的错误,花费了大量时间。但在学会用正则表达式处理字符串后,本次作业变得相对简单,虽然还有很多细节的边界点需要考虑,但大体的要求都能满足。本次作业主要还是熟悉java环境,主要功夫在字符串输入处理,由于还未完全脱离C语言的思想,这次作业我只写了一个类,思路也很不清晰,毫无类的思想和层次可言。
Bug:这次作业我和互测对象的bug都体现在一些输入上的边界点,如超大字符串这种问题。由于写代码时思路不清晰,边界情况考虑不全,导致程序出现了bug。在以后的作业中,要更熟练地处理字符串,并将方法写成类,使代码层次结构清晰。
第二次作业
分析:从第二次作业开始接触电梯这一运行对象。其实本次作业的算法不是很难,主要还是要学会掌握java类与对象的思想。通过将电梯,请求队列,调度器等抽象为类,实现各类相对耦合度较低的方法,完成从面向过程思维到面向对象思维的转变。这次作业难度不是很大,只要各个类方法写好,主体逻辑完整,大体不会出错。
类图:
Bug:本次作业基本没发现什么bug。但在测试别人的程序时,我发现公测的每个点都只针对一个方面,如只测同质或只测调度。但当将几种不同的处理结合起来时,程序就有可能因为主逻辑不对而出现错误,但这种错误在检测单一功能并不会出现。再回头看我的程序,某些类耦合度相对较高,各个类的比重和分工还不是很均衡,这样如果逻辑出现问题,调试的工作也会更复杂,所以写java程序时,要尽量让类实现自己的方法,使其分工明确,降低类间的耦合度。
第三次作业
分析:这次作业是基于第二次作业傻瓜电梯的改进“ALS”电梯。总体来说代码不会有大的变动,只是需要重写一个子调度类实现算法。本次作业重点在于ALS的算法,我的算法是以电梯为主体,每隔0.5s去根据电梯状态重新调度请求并进行更新。这样的想法虽然简单,但在实际写代码时,我发现以时间为循环要考虑的内容过于复杂,如电梯频繁的状态转换,如何处理同质请求等。而且这种算法提高了类的耦合度,调度器类和电梯、请求队列混为一体,逻辑复杂。也因此,这次作业因为一些逻辑的问题出现了严重的错误。
类图:
Bug:本次作业bug主要来自于算法逻辑,如果算法某些情况没有考虑到,就会在那些情况运行时出现逻辑的错误,且算法不同,错误方式也不尽相同。在处理这些bug时,我最深刻的感受是:对于算法比较复杂的情况,一定要先动脑想好自己的逻辑,并画出运行框图,将一些可能的情况都过一遍,不然草草下笔,只会写出一堆逻辑混乱的代码,然后反复更改调试,更浪费时间。
心得体会:
(1)写代码时类的比重尽量均衡,各类应分工明确,类间耦合度不应过高,一些反复使用的代码可以写成类的方法,不要在某一方法中写出逻辑过于混乱的高耦合度代码
(2)写代码前要多花时间想想代码的结构,写几个类,每个类都有什么方法,类与类怎么合理交互实现功能。磨刀不误砍柴工,一个清晰的构思是优质代码的必要条件
(3)要多从别人的代码学习,也要从自身和他人bug吸取经验教训,不断完善自己的代码,提高编程水平
(4)不要拖延,早点开始写代码,多花时间调试找bug
总结:
最后,希望能在今后的学习中不断提高编程能力,轻松写出高质量java代码