OO第一单元作业总结

前言

 

  该文主要是记录本人开始学习java面向对象设计一个多月的心得以及完成前三次作业的的体会.

 

1.作业过程总结

  

从作业内容上来看,三次作业层次分明,第一次作业侧重于考查java基本语法以及对流程控制三大结构的考查,第二次作业在第一次的基础上引入了类和方法这些概念,通过具体题目中同一对象不同方法的方式逐渐加深知识,而在第三次作业中正式要求运用类这一概念开始面对象编程,具体体现在前两次作业所有方法都包含在public class里而没有其他的class,而在第三次作业中就要求运用class以及读懂设计类图并根据其内容来编程。

 

从思想上看,第一二次作业和上学期的面向过程设计的C语言作业相差不大,主要还是运用面向过程思想,具体就是运用一些简单的算法来完成题目的要求,而在第三次作业引入了类的概念之后,要求也不仅仅是指定的输入输出,而是增加了要求创建具体的类,通过类来实现程序所要达到的目的,类和对象,这便是面向对象设计最大的特色。

 

而在我看来,从面向过程到面向对象,最大的瓶颈就是如何消化类和对象这些概念,并将之熟练运用到编程中去,从时间上看,第一次作业在我理解了java基本语法后,全部完成只花了大概两个小时,但由于考虑不周,第四题和第五题测试点都没有完全通过,第二次作业后三道题目涉及到的解决方法略微有些复杂,加上调试的时间,总共花了大概六个小时,

 

而第三次作业,也就是被我视为瓶颈的一次,除了第一题花了不到一个小时,剩下三道题目合计用时超过了20小时,这还是在有计算日期类题目的经验基础上的用时,大部分时间是用于不同类之间的调用上,没有好好理解类的相关知识,导致耗时太久,这也是我称它为瓶颈的原因。

 

在第一次作业中,第一个遇到的问题是如何按照格式输入数据,由于受到C语言输入方式的影响,不明白Scanner的详细用法,在网上查阅相关资料后才得以了解,之后的解题过程就轻松了许多。在第二次作业中,主要的问题还是计算日期的算法设计,在第二题判断星期几的环节,我选择用输入日期的年份与0001 1 1相差的年份n*365366(根据是否闰年判断)再加上该日是该年的第几天m得出相差的总天数,之后就是完善代码以及查找漏洞,在确定自己的思路没有错后几次输入都得不到预期结果,于是通过debug追踪值的变化检查哪个环节出了问题,三四题如法炮制成功解决。第三次作业最大的问题还是各个类之间的方法调用和数据传递,例如在写第三题时getter方法没有运用好导致输出格式有误,由预期的年--日变成了月--日,然后发现是类的方法误用了。之后还有各种小错误,通过深入了解类的相关知识得以解决。

 

通过这三次作业,我更加理解了编程的严谨,例如第一次作业4.5题,我本以为将所有情况考虑到了,但提交后仍然有几个测试点没有通过,第三次作业3.4题的月越界测试也没有通过,这些错误都让我有了深刻的教训。

 

2.OO设计心得

 

在第一阶段作业和上学期的C语言作业比较之下,我的理解是,面向过程设计最重要的就是模块化设计,可以简要概述为程序=数据结构+算法,数据和算法是分离的,当程序规模变大时,数据结构相对复杂,算法也因此变得复杂,有时候会超出程序员的控制能力。但在面向对象设计中,程序的重点集中在主体对象上,即程序=对象+对象+......+对象,而每个对象都封装了其数据结构和算法,每个对象彼此互不干扰,其数据结构和算法也就不会因为程序的规模变大而更加复杂,这也就没有了面向过程设计的缺陷。使现在面向对象设计成为主流、

 

而在面向对象设计基本原则的理解上,仅仅凭这一阶段作业只能说是初窥门径,只对单一职责原则有所了解,即在第三次作业中的日期类设计,三道题目由浅入深,首先是DateUtil类,其次是分年,月,日三类,逐渐细化,强化面向对象意识,分别细化各个类的职责。面向对象编程,是一种以对象为核心的程序设计方式,具体实现是将对象封装起来,隐藏对象的具体细节,只保留对象的外部接口,通过它来实现对象的功能。

 

3.测试的理解与实践

测试对于编码质量的重要性毋庸置疑,无论是程序是否达到了预期要求,程序是否满足用户需求,还是代码的简化,优化,提高编码质量,都离不开测试。程序员在编码的过程中可以通过测试来验证代码是否正确,正确之后则考虑是否有更优方案使代码更简洁质量更高,这些都是在不断测试的基础上完成的。

而在测试样例的选择上,我会选择一些特例,由特殊到一般,比如第三次作业的日期类功能,前后n天,在同一个月内的加减显然不会选择,而是选择几个代表性的,例如涉及到月份的变化,尤其是闰年2月这样很特殊的样例,如2020 3 2的前2天是2020 2 29而不是28,或者是涉及到年份变化的,最特殊的就是结合两者一起测试了。n边界测试也是很重要的一环,我在解决这一问题的算法一开始是把n看成n1然后循环判断上/下一天,但这样显然是下下策,最后多次提交测试时,有一次用时9200ms左右通过了最大边界测试,但其余几次都是9900左右ms,没有通过测试。所以在我看来,测试的要点有两个,特例和极限。

 

4.课程收获

 

要说收获的话,最大的收获就是得到了打开java大门的钥匙,正式进入了java面向对象设计,编程思想和能力进一步提升,尤其体现在变量,类名,方法名的命名上,现在已经改掉了随便设置一个变量abc的坏习惯。但教训也有,考虑问题不够仔细,调试程序不够熟练等。

 

5.对课程的建议

 

老师的讲课很仔细,但是课堂上的代码样例讲的有点快,能不能在课后将代码和PPT一并发出来供同学们加深理解。

 

posted @ 2020-04-04 22:02  越鸟  阅读(102)  评论(0)    收藏  举报