OO前三次作业总结
经过这将近四周的OO学习,感触颇多,从本来连java程序都看不懂到现在能学会一些简单程序的实现和完成基本电梯的功能,可以说是十分令人开心的了。
第一次作业:多项式的加减法
这第一次作业是对java程序初始的尝试,这是我第一次接触到java语言,也是第一次接触到面向对象的方法,这次作业对我来说就是写的是一个完全的面向过程的程序,想到C语言中用链表来处理这类多项式加减法,我这次作业就采用的是用二维数组来存取读入时的多项式数据,但读入字符串时对那个格式的处理自然而然就想到了上学期学计组时的有限状态机,对各个状态进行分类,画出状态转换图,最后则是对最终状态进行判断,这是我的较为愚蠢的方法。果然公测结果一出,我错了很多个点,绝大多数是因为我对字符的检验实在是太过繁琐,且出错较多,只能检测少数几种情况。再后来对自己的代码进行反思,并借鉴了互测时一位全对大佬的代码,学到了正则表达式,发现正则表达式对字符串的处理十分的简便,并且能用matches的方法直接取出所需要的数字,能忽略次要的找到主要的。以致于在之后的两次电梯作业中能较好的处理字符串。在这次作业中主要学到了一些java一些基本写程序的方法,为之后的java之旅做了一些良好的铺垫。
第一次作业的类图如下 ,完全是面向过程的写法
第一次作业度量:
第二次作业:傻瓜电梯的实现
这次傻瓜电梯的实现让我对面向对象的程序设计有了一定的了解,用各个类封装一些属性和方法,再在主函数里进行调用,对我来说主要就用到了请求和调度两个类,别的类都是为这两个类服务的,再在main函数中,处理读入的字符串,最后用调度器对电梯进行规划,在这次的读入中,由于对输入时的ERROR的公测应该只统计了输入ERROR的错误,我逃过一劫,在这次的输入判断中,我是先用之前所学的正则表达式对字符串读入时的错误进行判断输出ERROR,再把字符串正确输入放到请求队列里,再判断那些边界不法输入,因此不会按照输入时一看到错误输入进行报错,而是分两段报错,这在这次中是没有问题的,但在第三次作业中对错误进行注释会有问题。
这次算是我第一次尝试面向对象的编程方法吧,但类之间的关系还不够明确,最终的main函数还是十分长,程序就没有写的很漂亮,希望能在之后的学习中多多改善吧。
在第二次作业中吸取了第一次测试样例不够完善的问题导致错误较多,这次就按照分支树上的每个点进行对照,对每个分支都写了测试样例一一排查,也是能找到自己程序的问题所在,并修改。
第二次作业的类图如下:
第二次作业度量:
第三次作业:A little smart 电梯的实现
这是在第二次傻瓜电梯的基础上实现了捎带的情况,一开始对请求到来时的同质和捎带请求的次序感到很懵,没有什么切入点,想到的最简单的方式是用一个函数,每取一个指令就对请求队列筛选一遍,取出捎带指令和删除同质指令,但这样的工作量其实很大,实现起来十分麻烦,也很容易出错,后来想到了把请求队列进行处理,遇到捎带指令就提到队列的第一位,遇到同质指令就删除,再将请求队列的第一个作为主请求,进行循环筛选,当没有捎带指令时即输出。用这种方法写很好地用到了第二次作业的傻瓜电梯实现方法,只要对请求队列进行排序即可。
在这次作业中主要问题是测试数据不够完善,没能很好的囊括所要求实现功能的每个点,我写的程序单个功能可以实现,但当遇到较强的测验时出现的BUG就比较多,之后的作业中也要考虑到每个要求实现的功能中所需的内在要求和联系,这样才能更好地处理。
第三次作业的类图如下:
第三次作业度量:
心得体会:经过这几次作业的洗礼,对java面向对象的编程感触很深,对对象进行封装和处理,结构的生成,与方法的编写感触颇多,感觉类的出现就是C中加强化的函数,能将各个部分很好地分隔开,使写的程序很有条例与次序,希望自己能在之后的学习中强化自身对对象的理解,写出更方便更好的java程序。