OO第一作业周期(前四周)总结

0.前言

  本次博客主要是针对前三次PTA作业的总结,以及学习了一个多月面向对象程序设计课程的心得体会。总结心得如下:

1.作业过程总结

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

  作业的难度和复杂度是以此提高的

  第一次作业共有五道题:1.计算税率 2.判断坐标点所在范围 3.电话键盘字母数字转换 4.判断三角形类型 5.统计最大数出现次数

  第一次作业主要用到Scanner类来通过键盘输入数据,和switch,if else,while等语句的运用,以及一些基本数据类型的运用,总的来说第一次作业就是运用JAVA基本的操作来解决问题。

  第二次作业共有四道题:1.求一元二次方程的解 2.判断闰年及星期几 3.求下一天 4.求前N天

  第二次作业主要用到一维数组的创建,和boolean函数的运用,以及一些判断年月日方法的创建和运用,并新增了判断数据是否合法的要求,总的来说第二次作业是在第一次的基础上利用方法和函数已解决问题,并对程序的边界进行了测试要求。

  第三次作业共有四道题:1. 用类解一元二次方程式 2. 日期类设计 3. 日期问题面向对象设计(聚合一) 4. 日期问题面向对象设计(聚合二)

  第三次作业主要用到类的创建,以及在主函数中调用类的方法和函数的运用,并通过不同UML类图来创建不同的类的关系来解决面向对象的程序的问题,总的来说第三次作业是最接近与面向对象的程序设计的问题,通过UML类图来设计类的方法,而前两次作业更接近与通过JAVA的基本操作来解决面向过程的设计。


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

  由于第一阶段的三次作业的难度是层层递进的,所以我们做作业的时候应该是循序渐进的。对已经学习的内容要多做练习,好好巩固。实现作业先从面向过程到类的创建在通过UML类图设计类最后再到面向对象的设计的过渡。

 

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

  1.问题:第一次作业第一题不知道如何通过键盘输入数据。      

   解决方法:通过CSDN网站以及慕课了解Scanner类的运用方法,解决了键盘输入数据的问题

  2.问题:第一次作业第四题由于数据类型不同带根号的边会比实际值小导致(x*x+y*y==z*z)语句无法判断等腰三角形是否成立。

   解决方法:将该语句改为(x*x+y*y-z*z<0.0000001)语句解决了根号边小的问题,从而解决了判断等腰三角形成立的问题

  3.问题:第一次作业第五题while循环不能先输入数据导致。(while(number!=0))语句中的number没有初始化

   解决方法:将while循环改为do while循环,先输入数据number在进行while判断。

  4.问题:第二次作业第一题不知道如何保留四位小数。

   解决方法:通过CSDN网站以及百度了解String .format方法的运用,通过(String x1 = String .format("%.4f",roots[0]); )语句 解决了跟保留四位小数的问题

  5.问题:第二次作业第五题求前N天一直答案错误。

   解决方法:如果N超过了当月的天数,往后推一个月是应该是前一个月的天数减N而不是当月的天数减N,这就打破了31天的规律,需要进一步计算前一个月是哪个月有多少天。

  6.问题:第三次作业第二题的下n天整型数最大值测试点一直不能通过。

   解决方法:由于我方法是通过将年月日转化为天数在±n再将这个天数转为为日期,当测试的n为最大值,如果在加上年月日的天数,会使其数据超出范围导致数据上溢,解决方法则是先将最大n转为为年,使n变小,再将转化为年后剩余的n再加年月日的天数,最后将总天数转化为年月日并加上n一开始转化的年数,从而使最大n上溢问题得以解决

  7.问题:第三次作业第二题的前n天整型数最大值的测试结果与正确结果一直相差1。

   解决方法:忘记了0年的特殊情况,0年时应该是将n-365,如果for循环中不考虑0年的特殊情况,0年为自动归为闰年而减去366,使得输出结果与正确结果一直相差1。

  8.问题:第三次作业第三题主函数中的年月日无法带入到Year,Month,Day类中导致检查数据是否合法时这些类中的年月日为0使得输出的结果一直为非法数据。

   解决方法:在主函数中加入(Year.year=year;)等语句,让year在Year类中赋值,使得问题得以解决。

 

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

      第一次:第二次:第三次=9:12:15/(小时)

 

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

      正如老师经常说的JAVA宁愿舍弃他的一些功能,也要避免程序出现错误,可见JAVA的严谨性是非常高的,而我也经常因为这些问题卡住很久,比如上述的0年特殊情况,卡住了我2个多小时,只有从头看起一步一步往下推,才能知道那个地方有问题,再去改错误,可见在编程的时候思维必须缜密,需要面面俱到。还有一些符号问题,小于和小于等于只是相差一个等于,但是有时候就是因为这个等于导致程序BUG或者是得出的结果和正确结果不同,由于符号很小所以在查BUG和纠错就需要大量时间,所以在编程的时候还必须细致认真,不能老是打岔分神。

 

2.OO设计心得

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

  面向过程是通过需要解决的问题直接分析解决问题的步骤,再通过函数依次进行调用从而解决面向过程的问题。

  面向对象则是通过需要解决的问题找到对象类,并设计对象类该有什么东西,最后在设计解决问题的类中所需要的方法和属性。

  面向过程编程简洁明了,但代码不易更改,而面向对象虽然编程更为复杂,但是却使程序具有灵活性,更方便修改。

 

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

  通过CSDN网站了解了SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)的五项基本原则,而我通过这一个多月对面向对象程序设计的学习,只能初步了解到其中单一功能的原则,我所理解的就是每一个对象类都应该只负责程序中一个功能。

 

③OO编程思维的理解

  我的理解OO编程思维就是面向对象将问题模拟成对象,将具有相同特征的对象放到一个类中,并设计类中的属性,然后再通过类的封装,继承等方法去解决问题

 

3.测试的理解与实践

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

  我认为测试对编程很重要,一个好的测试样例可以找出编码中的很多BUG和错误,比如一个非法数据的测试样例,如果没有非法数据的测试,错误输入就没有报错,然后你连你错在什么地方都不知道,再比如第三次作业中的最大整数测试点, 这次测试点就帮我找出了我思维上的和编码上的一些问题。

 

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

  让我设计测试用例,我一定会找一些特殊情况,比如0年不是闰年的情况,再比如设置最大整数,最小整数的测试点。反正就是越难越让人想不到越好,这样才能让通过测试用例的程序更具价值,别人也会放心使用我测试后的程序。

 

4.课程收获

总结这四周来在OO方面的教训及收获:

  起初知道要学习JAVA这门课程,我心里还是挺害怕的,因为听说这门课很难,也挺容易挂科的,通过这四周对OO方面的学习,我发现JAVA也没那么恐怖,难度也是有的,但也不算是特别难,只要上课认真听课预习,积极完成课后作业以及PTA的作业,我相信我还是能学好JAVA的,这四周的学习,我从对JAVA的一无所知到现在我大致的也能掌握了JAVA中的一些基本操作,有关类的属性和方法,了解面向对象与面向过程的差别,以及面向对象的一些基本思想,我还是挺满足的,在绞尽脑汁的修改错误,卡在一个地方几个小时,最后终于找到错误通过测试点,“答案正确”的那份成就感也让我发现了JAVA美丽的地方。

 

5.对课程的建议

  希望老师在发布PTA作业的时候能提早发布一下,星期天发布有的时候,由于还有别的课程的作业所以不一定当天能写,虽然都会有一个星期的作业时间,但是我还是习惯于马上把他写完,因为有的时候卡在一个地方可能卡很久,然后就是希望老师能把腾讯课堂当天的回放在群里发一下,因为完成课堂作业时,有时候由于不能及时消化讲的内容会需要看一下回放,然后就没有什么建议了都挺好的。

 

6.之后阶段的学习计划

  希望后一阶段能够跟进老师上课的节奏,课前做好预习,上课认真听课做好笔记,课后认真完成作业,课余时间能刷一刷慕课或看看CSDN网站,学到更多有关JAVA和面向对象程序设计的知识,发现编程的美丽之处。

 

posted @ 2020-04-04 21:58  待风起丶等云归  阅读(156)  评论(0)    收藏  举报