南昌航空大学-软件学院-19201527-袁瑾瑜OO第一单元作业总结

0.前言

本次博客针对该学期面向对象程序设计在PTA上发布的三次作业情况作出总结,在这三次作业中,我分别取得了95分 100分 76分的成绩,第一次作业是由于记错截止时间导致来不及修改程序失分,而第三次作业则是由于自身能力的不足,导致得分情况很不理想,下面我就来谈谈我对这三次作业的理解与反思。

1.作业过程总结

①    .知识迭代关系

在完成作业时,我发现这三次作业之间具有很强的迭代性:

在第一次作业中,题目主要考察了我们对运算符、判别式、逻辑关系的运用,也在某种程度上考察了我们对C语言基础知识的运用,该次作业在三次作业中起承上启下的作用,告诉我们C语言对JAVA学习的帮助,以及JAVA和C语言之间的不同。

在第二次作业中,题目开始渐渐深入,从主函数的编写进入到方法中,该次作业让我意识到JAVA与C语言之间存在很大的差异,C语言函数与JAVA方法之间存在千丝万缕的联系,但又有很多不同。

在第三次作业中,本次课程的名字面向对象开始进入我们的视野,而对类的设计也是本次作业的重点,拥有一个设计良好的类,不仅能让代码简洁明了,减少冗杂的变量名,而且能减少错误的出现,让程序更稳定且易于修改。

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

在第一、第二次作业中,我仍然使用面向过程的编程思想去编写程序,虽然以面向过程的方式可以完成作业,但是我渐渐感觉到面向过程的思想已经无法满足学习的要求,而在第三次作业中,这种感觉达到顶峰,对类和方法的要求让一次编程可以满足多个程序的需求,并在下次使用的时候只需稍加修改便可调用,这让我深刻体会到了面向对象编程的优势。

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

在作业中,我遇到了许多大大小小的问题,在完成作业的过程中,我遇到的第一个问题便是输入,在JAVA中没有scanf这一调用,在网上查询资料才知道需要import java.util.Scanner再在函数中定义一下Scanner这一方法,才能输入数据。遇到的第二个问题则是第三次作业中对类的声明,定义类的时候只使用了class,而在new类的时候类中却有参数,我在尝试class 类(double year,double month,double day)无果后上CSDN查找答案,这才明白要在类中定义类,使用this指针的方式向类中传入参数。

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

说到花费的时间比例,那毫无疑问是第三次作业最多,而第一次作业最少,第一次作业大体上与C语言编程无异,只是第一题大量的数据花费了少许时间,而第二次作业计算天数差这一算法让我陷入了许久沉思也没得到结果,最后只能使用一个注定会超时的for循环算法。第三次作业则是大量的类的操作与数据的定义花费了大量的时间来思考,上CSDN查找相关资料同样花费了许多时间。第一二三次作业花费时间比例大概在1:5:20左右。

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

在刚开始接触JAVA时,我还保留了许多C语言编程时的习惯,如直接输入printf来输出,习惯性return 0;等,在第三次作业的完成过程中,我在计算日期的天数差时少打了一个this,导致数据出现了极大的误差,在排查过程中我错误的认为是算法有误,这让我花费了接近20分钟才发现这个错误,让我对编程过程的严谨性有了更深的认识。

2.OO设计心得

①    面向过程与面向对象的比较

在我看来,面向对象相比面向过程最大的差别便是通用性,面向过程编写的代码只在该源码中起作用,后续进行类似编写时无法重复利用,浪费了很大的精力与时间,而采用面向对象编程,一次编写便可以在后续需要类似方法时直接调用,节省了时间,也让代码与代码间连接的更加紧密。

②   面向对象设计的基本原则理解

面向对象的SOLID原则(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)我目前只对S具有理解,我在第三次作业的编写中调用了第二次作业的计算下N天代码,但是能完成第二次作业要求的代码却无法满足第三次作业的要求,这是因为第二次作业的代码中同时考虑的下N天与前N天,导致在计算时会出现超时,所以,在我看来,使用单一功能的多个类要好于具有多个功能的单一类。

③  OO编程思维的理解

在我看来,面向对象与面向过程好比是做一把斧头,面向过程是往模子里倒模来制作斧头,虽然一次成型,但模子已经固定,无法再用作其他用途,而面向对象则是制作斧柄,斧刃等等部件,斧柄不仅可以用来做斧子,也可以做木棒或其他工具的把手。在我看来,面向对象的通用性是其优点所在。

3.测试的理解与实践

①测试对于编码质量的重要性

在编写程序时,我经常会遇到我自己输入的数据测试无误,但在输入测试样例时有误的情况,这是由于问题不仅仅只是表面那么简单,在数据量大起来的时候会出现许多特殊情况,如果不进行测试,写出来的代码便只是一个经常出现错误的废码,对自己以及使用代码的人造成不必要的麻烦。

②假如让你设计测试用例,你会如何做

如果让我设计测试用例,我会挑选那些比较特殊的值作为测试点,学生在编写完代码后一般会进行普通数据的测试,而那些特殊样例往往不会被注意,所以我会选择特殊数据作为测试样例。同时也需要做一个巨大数据的测试,这样可以筛查出那些效率低的代码,提高程序效率。

4.课程收获

在这四周的学习中,我渐渐改变了面向过程的编程思维,开始尝试使用面向对象的方式解决问题,在课上课下,我学习了JAVA的方法定义,类定义,调用包等等方法,了解了JAVA代码的运作规则与原理,开始初步了解如何使用JAVA参与到工程中,为未来的学习打下基础。

5.对课程的建议

       希望在接下来的授课中,老师可以多讲述一些编程思维,从零开始构建代码,每次使用课前编写好的类,我还在理解这个类的效果与原理时,老师已经开始讲下一个部分了。老师也可以稍稍放慢讲课和作业的进度,我们刚刚接触JAVA,难免有一些不熟练,希望老师能多给我们一些时间来思考完成问题。

posted @ 2020-04-04 19:09  19201527-袁瑾瑜  阅读(139)  评论(0)    收藏  举报