OO第一单元作业总结(第四次作业)

0. 前言

这篇博客是对在PTA上完成的前三次课后作业的总结与反思。

完成的情况:虽然在完成作业的过程中遇到了很多困难,但这三次作业都按时完成并通过了所有的测试点。

 1.作业过程总结

        ①总结三次作业之间的知识迭代关系

像上学期学的C语言一样,第一次到第三次作业难度逐渐增大。

第一次作业的难度不大,主要考察了基本数据类型、分支结构if-else、循环结构for\while、简单的输入输出等知识点;

第二次作业难度相比第一次有所增加,在第一次作业的基础上还考察了方法,数组等知识点,重在掌握方法的使用,题目中可以看出要求从单个方法到多个方法的转变;

第三次作业则是在第一次和第二次作业的基础上,考察了类和对象的使用、类与类之间的聚合关系,要求从面向过程向面向对象进行转变。其中第一题简单的考察了构造函数和getter\setter方法,第二到第四题则要求从一个类DateUtil转到为四个类DateUtil、Year、Month、Day。

        ②如何通过作业逐步从面向过程过渡到面向对象

在完成这三次作业的过程中,慢慢的理解了“什么是面向对象编程”,也慢慢的体会到了面向过程与面向对象的区别,体会到了使用类和对象的好处,从最初的在课堂上听着老师举的例子都还似懂非懂到完成第三次作业后的恍然大悟。

        ③作业过程中遇到的问题及解决方法

在三次作业中,我遇到的问题大多是某个测试点过不去,而这跟我逻辑不够严密。

<1>第一次作业中印象最深的就是第四题中对直角三角形的判断,起初使用的勾股定理判断是否是直角三角形,但测试点14一直都过不了,最后问了同学才意识到自己没有考虑到精度问题,将代码改为

if(Math.abs(n[2]*n[2]-n[0]*n[0]-n[1]*n[1])<=Math.pow(10,-6))

 后才通过测试点14。在学习C语言时也曾遇到过类似的关于精度的问题,但由于自己不善于总结导致这次一直被这个测试点困住。

<2>第一次作业中第五题没考虑到“只输入一个0”的情况,将int count=0改为int count=1即通过了测试点。

<3>第二次和第三次作业中六道题归根结底其实就是日期问题,在求下几天、前几天以及两个日期相差的天数这些问题中,会有很多自己没考虑到的特殊的日期,因此在测试点错误时,就会自己想一些特殊的日期,看输入这个日期会运行出怎样的一个结果,有时候能直接根据得出的结果推出究竟是什么地方没有考虑完善。但更多时候是直接看不出了的,这时候我会debug,虽然说会花费很多时间,但当自己找出出错的地方时会很开心。

        ④每次作业花费的时间比例

三次作业花费的时间比例约为1:4:10。

第一次作业基本上可以说还没有进入JAVA世界,运用之前的C基础就可以完成;

第二次作业时间大部分都花在了日期问题中的特殊日期上;

第三次作业花了较长的时间,第一次接触类的聚合,看着略微复杂的设计类图不知道怎么下手。

        ⑤对编程过程的逻辑严谨性的认识及教训

在编程过程中,要考虑到各种情况,甚至在规定了输入范围时,也不能因为觉得大家都会遵守规定,就不考虑其他的输入情况。作为设计者,更应注重代码的逻辑严谨性。逻辑不严谨,会导致代码的可用性低,这也导致我经常出错,过不了某些测试点。

2.OO设计心得
  ①面向过程与面向对象的比较

我认为面向过程是分析出解决问题的步骤,然后一步一步的实现。如果其中有一个地方出错就必须在整个代码中找出错的地方,但耦合度很高;而面向对象是以对象来划分问题,赋予对象属性,这样缩小了找错的范围,使系统的可维护性更好,但耦合度比较低。
  ②面向对象设计的基本原则理解

单一职责原则:一个类只负责一项职责,提高了类的可读性和系统的可维护性。当修改一个功能时,也可以显著降低对其他功能的影响。

  ③OO编程思维的理解

类是抽象的,类具有的属性和方法就是对象的状态和行为,new出一个对象(即实例化)就可以实现类具有的行为。

3.测试的理解与实践
  ①测试对于编码质量的重要性

我认为测试是完善代码的关键。测试既能验证代码逻辑是否正确,还能帮助你找出不容易考虑到的问题,特别是对于复杂的程序而言,很难一次性考虑全面,这时不妨换个角度,站在“刁钻”用户的角度,用一些特殊的、极端的数据去测试一下。
  ②假如让你设计测试用例,你会如何做

我会把测试重点放在特殊值、极值以及精度问题上,当然也会测试一些普通值。
4.课程收获
  总结这四周来在OO方面的教训及收获

深刻意识到自己逻辑不够严谨;

以前在运行结果不正确时,没有Debug的意识,现在养成Debug的习惯;

领悟到了“什么是面向对象”,并且面向对象编程时需要先理清整体思路,将问题分配给对象来实现,完成整体框架的构建。

5.对课程的建议

我觉得SPOC上的互评效果很不错,不仅可以互评,而且还有答案示例。虽然PTA上互评实现不了,评讲也不太现实,但是我希望老师在每次作业结束后能把PTA作业的答案(如果有的话)发给我们参考一下,我觉得这样更能帮助我们养成良好的编程思维,同样的一道题有很多实现方法,为什么自己想不到别人那种更好的方法,这能让我们进行反思、进步。上学期的C语言每次都是完成后就不管了,现在感觉以前的基础没打好,还是比较后悔。

posted @ 2020-04-01 21:18  一枕星河  阅读(95)  评论(0)    收藏  举报