OO第三单元作业总结

0.前言

       因为这是最后一个阶段的学习,所以最后几次作业虽然只有一道题,但是难度却是大幅度增长。在对之前的知识进行巩固强化的同时,还需要考虑如何运用开闭原则去实现程序的可扩展性,考察了用List,Set,Map三个接口去实现数据的排列,以及运用栈去处理输入与输出数据。总而言之,这几次的作业都需要查阅一些相关资料,自学并运用一些Java基础的数据处理方法。同时三次作业对算法的要求也比较高,需要处理一些复杂算法。

1.作业过程总

  1. 三次作业的知识迭代
            第一次的作业考察的是对雨刷系统的扩展,通过抽象类与接口的使用,遵循开闭原则,去实现程序的可扩展性。第二次作业考察了运用List,Set,Map三个接口去实现数据的收集与排列。第三次作业考察的是运用栈先进先出的特性,完成对特定数据的输入,处理以及输出。第一次是对开闭原则的理解以及可扩展性的实现,第二次是数据的处理方法,第三次既需要实现程序的可扩展性,同时也需要对数据进行处理。

  2. 作业过程中遇到的问题及解决方法
           在三次作业中我发现了自身的一些问题。
           首先是对程序的设计不太熟悉,之前的作业因为大多有类图或者题目简单,所以很容易实现,但是换成自己设计后,发现想要使得设计合理,完成程序的可扩展性着实有点难度。原来我都是依照老师的类图去逐步完成对各个类和各个方法的理解并实现,所以我现在写题目之前,也会在纸上或者脑中构思一下简单的类图,在逐步去实现内部的功能。
           其次是对算法的实现还不是很了解,例如算式求值,如何利用栈的特性去处理表达式,对运算符优先级的处理,在算法上都是对网上的代码进行了一定的借鉴。虽然以我当前的水平不可能对算法有很大的研究,但是我应该多了解一些基础的算法,作为知识储备,以备不时之需。
           最后是我对源码关键词查找这道题的小小疑惑,可能也是绝大多数同学心中的疑惑,关于最后一个正常测试。我通过多次测试,将问题锁定在多行注释上,但是为何多行注释中的关键词在正常测试中也要统计,我还不得而知。一开始考虑是有一个/*是在" "之间,但是调整后发现问题不在这,所以这可能算是一个未解之谜了。

  3. 每次作业花费的时间比例
           三次作业花费的时间比例是1:4:3,第一次和第三次作业虽然略微复杂,但测试点还比较正常,但是第二次作业最后那个正常测试就令人头痛。

  4. 对编程过程严谨性的认识和教训
           编程过程的严谨性确实重要,就像我们的第二次作业的最后一个测试点,如果题目没问题的话,那就是我们对一些可能发生的情况没有进行处理,这种错误是致命的。测试点和代码是两个互相检测的标准,好的代码能经受住测试点的考验,好的测试点也能发现程序的隐藏的问题。因为pta的测试点是不可见的,所以如何自己测试代码是很重要的。但问题在于写代码时都没有考虑的问题,写测试点时就一定可以考虑到吗。所以和同伴的交流补足也是完善代码的一个重要途径。

2.OO设计心得

        通过一个学期的学习,我对面向对象也有了一些了解。对于面向过程来说,面向对象确实更加容易理解,同时适合去完成一些大型的软件。在面向对象的设计中,不止要考虑当前需要解决的问题,还要预测未来可能会出现的问题,实现程序的可扩展性。同时可扩展性的实现又十分考验类的设计,抽象类与接口的使用,以及类间关系的应用。低耦合,高聚合的代码正是我们所追求的代码。
        OO设计并不是只停留在理念上,只有不断地编程才能理解其中的深意以及其重要性,通过一次次代码可扩展性的实现,以及对过去代码实现的可复用性。在进行OO设计时要考虑的范围太多

3.测试的理解与实践

        测试和代码是一个相互验证的过程。好的代码能过经受测试的考验,好的测试也能发现代码的瑕疵。正所谓千里之堤,溃于蚁穴,在小的问题不处理也可能会产生大问题。同时一个人的思考范围终归受到了限制,可能代码没考虑到的,测试也考虑不到,于是与同伴的交流与测试就显得十分重要。

4.课程收获

        通过课程的学习,我理解了面向对象的原理,三大技术特性封装、继承、多态,类的设计这些基础的知识,学会了通过抽象类和接口去实现程序的可扩展性,同时也学会了通过正则表达式的使用去判断输入数据是否规范,还有通过List,Set,Map以及Stack这些不同数据排列方式的特性,去处理不同的数据。
        同时我从作业中大大小小的错误中了解到了编程的严谨性,例如对源码中各种字符串以及注释的判断及删除,对水文数据各种可能出现的各种合法和不合法数据的判断。同时也了解到了与同伴交流补全的重要性。
        我也在不断的修改代码中了解到,编程不但要解决问题,更要遵循类的设计原则,利用三大技术特性去不断完善代码,从而实现代码的可扩展性,可复用性。每次写完代码之后要考虑其结构是否合理,是否可以扩展以及复用,能否有更优的算法以及结构,是否具有较高的容错率,不仅仅局限于通过题目的测试点。

5.对课程的建议

        希望老师课程的最后,有时间的话,能给同学们讲解一下题目中普遍存在的一些问题以及该如何去解决,不然对有的同学来说可能就变成了未解之谜。可能对老师来说可能看上去是低级错误,不值得一提,但是各种理解上的问题也可能会导致这种错误的产生。稍微对同学犯下的错误给予适当的解说,这样总比同学放弃追寻答案要好的多。
        其次,因为疫情的原因,这个学期的学习都在线上,老师和学生的互动较少。在某些知识点的理解方面,学生和老师可能有些偏差,如果课上学生有一个关键的提问,可能可以解决许多学生心中的困惑。
        最后,希望每次的作业之间要不断加大难度,加长时间,让学生能够独立完成一些代码较长的程序。

posted @ 2020-06-09 10:50  无冕之王tang  阅读(49)  评论(0)    收藏  举报