JAVA作业第一阶段性总结

前言:

        作为一名软件专业的大一新生,JAVA是我接触到的大学中最重要的专业课之一,在学这门课的第一阶段也就是第一个月,我就感受到了这门课想要学好是比较困难的,这门课需要花很多的时间,不仅要在课堂上听,还必须要在空余时间自己抽出时间去学,否则我们每周一次的作业根本不能完成。说到每周一次的作业,我在其中遇到了很多的问题。但是在遇到问题的同时我发现自己也学到了东西。第一阶段的三次作业:第一次主要是让我们适应java的基础语法,就是简单的选择语句;第二次虽然依然是面向过程的题目,但是难度增加很多,需要我们自己想出算法解决问题;到了第三次,就是真正的面向对象了,这次作业给我带来了比较烦躁的情绪,花在这次作业上的时间应该有整整2天多...........但最终还是都完成了,在此我有必要进行一下我的第一个阶段总结。

作业过程总结:

       1.三次作业之间的迭代关系

          在第一阶段的三次作业上,我发现了我们每一次的作业都是为下一次的作业做准备,下一次作业中一定会出现本次作业的东西,同时也会有老师线上讲的,我们线下学的东西。比如第一次作业就是很简单的语法练习,和Java编程的一些惯例练习,没有涉及到什么算法之类的东西,全班大部分同学都能很成功的完成作业。到了第二次作业就发现了难度大幅度提升,开始设计到了Java中方法的设计以及出现了第一次作业中没有的新东西,也是比较难的东西——算法。这一次的作业就困难很多,第一次作业我大概花了3个小时全部解决,到了第二次就用了将近一个白天的时间。第一阶段的最后一次PTA大作业的难度比起上一次可谓又是上了一个高峰。但是这一次作业和第二次的题目还是很类似,几乎有90以上的相似。但是难度的增加是因为我们真正开始涉及到了Java里面的核心东西了——OO思想;这一次作业我们要摒弃以前学习C语言的面向过程的思想来转向面对对象的思想。这就是第一阶段三次作业的迭代关系:基础语法和编程习惯——设计普通算法(方法实现)——面向对象思想。

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

       第一阶段的三次作业是迭代关系;所以我们做作业的时候应该是循序渐进的。这样下来我们如果是通过自己的思考,询问完成的,那么我们一定能从该次作业或者该次题目中获得到新的知识;然后这次获得的新知识在下次作业中或者下一个题目中又成了做完该题的基础,这样新的知识又可以得到更好的巩固。这样下来虽然做题的时间跨度会越来越长,题目会越来越难,但是与此同时我们学的东西越来越多,然后我们的固化思想也会逐渐转变,慢慢的从面向过程转到面向对象。就如这三次作业,第一次作业就是普通的面向过程,第二次虽然是面向过程,但是在其中增加了面向对象的新东西——方法;第三次就开始了面向对象中的这种思想——类,对象,属性。于是在几次作业的练习下,我的编程思想虽然还没有完全转化为面向对象的思想,但是已经不是原来单纯的面向过程思想了,在后面阶段的作业练习下,我相信绝大多数同学都会成功的从面向过程过渡到面向对象。

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

         第一次作业卡了很久的问题:如下图:这个问题在于无论我输入正确或者是错误的数据,输出都会显示一个“Wrong Format”,原因是我将输出print语句放错了位置,自己太粗心。位置应该放选择语句的外面,我放到了里面导致出错。

            

       

        第二次作业中遇到的问题比较少,没有什么问题卡了我很久,第二次作业就是新增了一个让我们思考的算法,在思考算法上花了大概比较久的时间,因为第二次作业的算法都是关于时间月份年份的,有关闰年,平年等跨年,跨月的。在这里想了比较久,大体没有出错,有一个很小的错误也让我找了2个多小时,如下图,没有看清楚题目的需求,还是因为粗心。

  

         因为带三次作业是真正的面向对象所以 第三次作业遇到的问题就比前两次难得多并且多得多,第一个遇到的问题是运行超时的问题。这个问题很要命,因为当时是其他所有的测试点都过了,只有两个地方一个是前n天最大值和下n天最大值两个地方运行超时,想了很久可能是因为我的思路问题,当时求前后n天的方法我是使用for循环一天一天加,这样普通的测试点都能过,但是遇到像最大数这样的测试点时运行就会超时。然后我就询问了同学怎么解决这个问题,然后我得到的回答是,可以先从年去计算。于是我没有单纯的一天天去循环,而是在之前加了一个while循环把年份的判断先搞定,如下图解决这个问题的代码,用了这个算法后就大大减少了计算机的运行时间,从而测试点成功的通过

           

          第三次作业的第个问题是有两行代码在运行时出现了报错,提示我程序中出现了空指针的情况如下图,画了红圈的地方就是我一开始所写报错的程序。错误原因可能是因为我没有实现在DateUtil这个类里面将这些对象new一下。于是我直接调用了day对象的含参构造方法,并且直接在DateUtil的有参构造函数中调用即可。这个问题也解决了。同时在每一次过程中我们还必须要自学一些新的东西,比如,这次字符串的返回我就学习了一个返回对象的方法ValueOf();其中的参数可以是对象,这样可以更简单。

      

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

       第一次作业由于比较简单,除了个别小地方由于粗心产生的问题外,我大概花了一个下午的时间就差不多全部完成

       第二次作业难度比第一次难度增加,我花了一个白天的时间才将起完成并且将那些错误的点一个个调试出来

       第三次作业是真正的面向对象,我的思想还没有完全的转化过来,所以做起来比较难受,花了应该有2到3个白天的时间才将其大致完成,并且有些代码可能还没有真正的到面向对象。

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

        这几次编程过程中我发现自己老是会犯一些很弱智的错误,并且为此会花费大量时间去找错误,进而耽误了自己更多去练习的时间,我发现编程真的是一个必须严谨的事情,在编程过程中绝对不能走神或者去做别的事,否者编程思路的连贯性会突然断掉,并且很难再想起来,即使想起来了,出错率也会大大的提升。而且编程的时间和地点一定要选好,一定要在安静的氛围下进行编程训练否则,外界环境也会严重干扰自己的内心。我编程的时候就因为外界太吵闹的环境导致自己的心态变得十分暴躁,

OO设计心得

       1.面向过程与面向对象的比较 

      面向过程,顾名思义,就是它的核心思想就是以过程为中心,而面相对象则是以对象为中心。我学过的C语言就是一种面向过程的语言,现在学的JAVA这是一门面向对象的编程语言。拿C语言和JAVA来做一个比较,我在学习C语言的时候解决问题都是通过思考解决问题的步骤,然后再编写一个个函数来解决这些问题。它的核心就是我们编写的过程中所写的代码是否是与题目要求一致的。现在我在学习JAVA主要不是通过编写一个个函数来解决问题,现在我们是通过构造一个个类,然后每个类里面又有着自己私有的属性和公有的方法。我们通过这些类来定义一些对象,通过这些对象来调用方法,访问属性,从而解决问题。

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

       就我先现在了解的面向对象类设计的原则:单一职责原则。

       我个人理解单一职责原则是我们设计的每一个类都应该只负责所编写的程序中所有代码功能中的一个功能。我现在还不能太深刻理解这个原则,但是我记住了老师在课堂上讲述过单一职责原则可以让程序低耦合,高内聚。这可以让程序出错率小很多,并且当程序出现问题时,可以更快的找到问题所在处。

     3.OO编程思维的理解

       我认为OO思维编程就是通过我们创造的那一个个类去定义一个个对象,在通过这些对象对类来里面方法的调用来解决问题,我觉得这就是OO思维编程的核心:对象,类,属性,方法。

测试的理解与实践

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

        测试可以让我们的代码质量变得更高,比如遇到数据输入非法的情况我们的程序不会出现报错,而是会提示使用者“输入非法数据,请重新输入”,再比如,两个程序的功能其实是一模一样的,但是一个运行速度快,另一个运行速度慢。使用者肯定会选择运行速度快的。这时候测试的重要性就很好的体现出来了。总而言之,测试是让我们的代码变得更完善更健壮。

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

         如果真的让我来设计测试用例,我肯定会多设计一些比较刁钻的测试点,这样才能更好的检验程序的健壮性,举个例子:就像我们第一次作业判断等腰直角三角形。其中无理数的测试点,如果我设计,我肯定会在那多设计几个无理数的测试点,看看编写的程序是否真正的考虑到了那一点。

课程收获

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

       说实话,我开始学习JAVA的时候没有想到过Java会这么难,所以学起来肯定会有些吃力,在这四个礼拜里,我花了很多时间去学习,练习Java,得到了很多教训,比较常见的就是不仔细看清楚题目的需求,编程过程中经常性出现一些或多或少的错误,不能够完全的去理解OO思想,有些时候编写的程序还会带有面向过程的代码。这些教训提醒我以后编写代码的过程中一定要严谨,一定要静心。然后要懂得自学,懂得查询资料。

       在给我带来诸多教训的同时,肯定我会有一些收获,在这四个礼拜里,我搞清楚了类 属性 对象 方法的关系,我知道了单一职责原则(虽然没有完全理解)。我知道了Java一些编程习惯,我获得了自主学习的能力,我可以大概了解类与类的几种关系...........虽然还不够,但是我觉得我只要够后期能跟上学习的步伐,我能收获OO的更多知识

对课程的建议

      挺喜欢这样的课程模式,说实话,虽然比较累,但是我觉得累的同时能够学到东西,这样对我来说就是好的。虽然有时的确经常吐槽JAVA好难啊,什么好累,但是其实还是学到了东西的。比起以前学习C语言时我觉得这种课程模式的效果很不错,只要我能坚持下去,就能学更多的东西。

         

 

原文地址:https://www.cnblogs.com/pzj020219/p/12588495.html