面向对象程序设计第一阶段作业总结

0.前言

本次总结针对面向对象程序设计第一阶段作业的三次作业,三次作业皆为PTA上的题目。

1.作业过程总结

(1)三次作业知识迭代关系

第一次作业以面向过程为主,用Java解决简单的数学问题;第二次作业开始使用Java中的“方法”解决简单问题;第三次作业引入Java中的“类”,通过类来解决问题。

(2)从面向过程逐渐过渡至面向对象

从三次作业来看,每一次题目的代码都要比上一次题目的代码的复用性要更强,模块化越来越明显,在引入方法和类之后,同一类题目只需稍做修改,代码就可重复利用。方法的引入,程序开始过渡至面向对象,而类的引入代表正式进入面向对象。

(3)作业过程中遇到的问题及解决方法

①初次在PTA上用Java提交,编译一直过不了,查询后得知PTA中Java提交不能出现包而且公开类类名必须为Main。

②在第一次作业中,第一题计算税率问题,计算量较大容易出现计算错误,而且因情况较多,计算问题排查起来有些。

③在第一次作业中,第四题判断三角形类型,等腰直角三角形的测试点不知道是如何测试的,等腰直角三角形中边长一定会出现无理数,调试时输入数据很困难。

④第二次作业初次在Java中使用方法,没有在方法定义方法名的前面加static修饰词,导致编译错误,之后查阅相关资料得知不加static修饰则该方法为实例方法,需要通过对象来使用。

⑤第二次作业的判断闰年及星期几题目中,难点在于如何知道这一天是星期几,这个问题可以通过求这一天距离0001年1月1日的天数,然后除以7,所得的余数即为周几,而在求相差天数时要注意其中夹杂着闰年。

⑥第三次作业初次使用类,在编写程序时根据编译错误的代码得知了一个Java文件中只允许存在一个公开的类。

⑦第三次作业设计日期类,实现求下n天与求前n天功能算法多种。如果一天一天加,在最大整数测试点中显然会超时。可以先将n加在日期上,判断日期是否符合该月的天数要求,不符合则减去下一个月的天数,如果是求前n天则是加上上个月的天数,这种方法效率高了不少,但是在求下n天最大整数这个测试点中,这个方法就失效了,当前日期加上最大整数超过了整形的长度,导致计算错误。还有可以判断n是否大于366,如果大于则先加年份,再加月份,最后一天一天加过去,每加一年n减去366或365,但问题就难在到底是减366还是减365,不能根据简单地判断今年或者下一年是否是闰年来减,就如,输入的日期是闰年,且日期刚好是2月29日,n刚好是366,如果n是减去366,就会出现平年2月29日这种不合法的日期,所以n在这种闰年且日期大于等于2月29日的日期应该减去365,还有如下一年是闰年,且日期大于2月28日n就应该减去366,而小于等于就应该减去365。所以,在年份加一,n减小这里应该要根据闰年的情况与2月28日或2月29日的情况来判断n到底减多少。

⑧总的来说,这几次作业遇到的问题挺多,而且PTA测试点,不能够覆盖所有情况,会导致程序其实是有逻辑错误但还是能全部通过测试点的情况。

(4)这三次作业花时间的比例

花时间最多的是第三次作业,最少的是第二次。因为写第二次作业时已经已经有了第一次作业的经验,而且题目不算难,第二三四题的部分代码还可以重复利用,所以第二次作业花的时间相对其他两次最短。第三次作业利用Java中的类解决问题,而且要根据题目所给的UML图设计,题目对我来说也有点难度,因此第三次作业花的时间最多。

(5)对编程过程中的逻辑严谨性的认识及教训

编程过程中有些小的逻辑错误很难发现,需要仔细考虑,而后修改起来也很麻烦,所以要在动手之前尽量把问题搞明白。另外,在写代码的同时要多写注释,防止自己因写的太多都不知道自己在写些什么。

2.面向对象设计心得

(1)面向过程与面向对象的比较

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。而面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。可以说面向过程注重过程,而面向对象注重对象和职责,面向对象设计相对于面向过程具有更好的复用性。

(2)面向对象设计的基本原则理解

①一个类应该有且仅有一个去改变它的理由,这意味着一个类应该只有一项工作。对象或实体应该对扩展开放,对修改封闭。②父类的调用同样试用于子类。③高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。④具体实现应该依赖于抽象,而不是抽象依赖于实现。⑤不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多。

(3)面向对象编程思维的理解

 在现实世界中是先有对象后有类,而在面向对象中,先有类后有对象,类是对象的抽象,是对对象的一种概括,对象是类的实例。面向对象世界中处处都是对象,对象所具有的就相当于现实世界中的每一个事物都具有的的“数据”和“能力”,面向对象编程就是对不同的对象发依次出各种命令就行了。

3.测试的理解及实践

(1)测试对于编码质量的重要性

通过测试可以找出编码的逻辑错误,就如第三次作业的日期类问题,通过测试发现了程序存在的一些漏洞,同时测试还能发现算法的优越性,可以测试出哪种算法效率高哪种算法效率低,另外通过测试能帮助解决逻辑问题,有助于修改编码。

(2)设计测试用例

测试用例最基本是要覆盖程序的所有功能,要明确测试范围,然后取最大值,最小值,特殊值测试。就如日期类设计中找闰年的2月29日这种特殊日期进行测试就容易发现程序出现的漏洞。

4.课程收获

经过四周的面向对象程序设计的学习,让我对面向对象有了初步的认识,对Java程序设计也有了初步的认识,而我的思维也从面向过程逐渐过渡至面向对象。在编码过程中,我也发现了面向对象拥有面向过程所没有的特点,这些特点同时也体现了面向对象的优越性。在这阶段学习中我还收获了一些教训,在编写程序前要理清思路,逻辑要严密,多写注释防止自己“迷路”,时刻清楚自己在写什么。面向对象有趣但不简单,要更加了解面向对象还需要更加深入的学习,只有不断地学习,不断的学习积累经验才能真正掌握面向对象程序设计。

5.对课程的建议

希望增加对难点的讲解,对作业的难点稍微讲解一下。

 

 

 

 

 面向对象的基本原则理解转自https://www.cnblogs.com/fzz9/p/8973315.html

猜你喜欢

转载自www.cnblogs.com/19201520-qxb/p/12631177.html