JAVA作业第二阶段总结

前言

      第二阶段的三次作业我觉得难度同第一阶段的三次作业难度有大幅度提升,最明显的可以看我们这三次作业的通过率,有几道题目的通过率都没有到达0.1就可以说明问题了。然后这一阶段的三次作业主要针对练习的是继承,多态,封装以及少量的接口(开闭原则)。其中有两次作业穿插着正则表达式的训练。这就要求着我们必须要去自学正则表达式了,我们第一阶段三次作业的主要目的是把我们尽快把我们习惯的面向过程思想带到面向对象思想,同时让我们更好地去理解单一职责原则。这一阶段的作业一是让我们训练正则表达式为未来做基础,二就是让我们更好的理解开闭原则。更加熟练的将自己的思想进行面向对象编程。

作业总结过程

    三次作业之间的知识迭代关系

        这阶段第一次作业的第一道题目是训练正则表达式,但却并不是只要简单的了解正则表达式就行,这道题还需要我们去学习StringBuilder以及Stringbuffer和字符串类似分割(split)替换(replace)等方法,可以说难度很大,虽然我做出了来了,但是我花费了好几天的时间,光提交次数就有30多次;第二道题目没有涉及到继承以及多态,难一点的地方就是求圆周率的算法,这道题训练的应该还是让我们更好的去熟悉面向对象编程。第三道题目就开始设计了类的继承,虽然不难。但是涵盖了子类与父类的各种练习(例如属性的继承,方法的继承,方法的使用),为第二次作业打下基础。然后这阶段的第二次作业依然训练了正则表达式,但是比上一次要难一点,这一次要求我们使用了List类的ArrayList方法以及LinkedList方法。然后有着第一次作业对正则表达式的练习,这一次虽然做作业快了点,但是依然还有两个测试点没有通过。然后另外一道题目相当于是第一次作业第三题图形题的升级版,这一次不仅仅让我们简单的求面积,这次增加了各个图形的个数以及对各个图形面积的排序。这就比仅仅要我们使用继承,还要我们去使用类的多态性。主要难点还是在对象的排序,我们不能单纯的将对象中的面积排序然后交换面积的位置。我们要交换的是对象的位置,在这个地方我卡了一点时间。然后该阶段第三次作业的两道题可以说完全是前面继承、多态两道题的结合题。并且加入了接口让我们用接口去实现CompareTo方法这样的排序方法比我们用冒泡排序那些算法简单很多。总之,每次作业中都会出现上一次作业联系的东西,下一次作业又会出现新的知识点。这种作业迭代的关系要求我们每次课都要认真听,并且课下要学老师要求我们自学的知识。这种迭代关系布置作业的方式对我们的编程训练有很好的帮助。

   作业中遇到的问题以及解决方法

         这几次作业的题目虽然没有第一阶段的题目多,但是难度可不比第一次作业的少,并且犯的错也不像是第一次作业那么粗心的小错了,还是比较要命的的错误。比如这阶段第一次作业就有几次错误,首先我判断输入是否是由 隔开的时候我没有考虑输入情况为没有 的情况,这个点卡了我很久,导致我将代码用 分隔时会出现数组越界的情况。我将原来的代码从新简化后才成功通过那个测试点。红圈内是被我注释的地方,一开始就是由于代码没有简化,导致数组越界。注释后就成功了。

         然后这一题还有一个问题就是我对这题的需求没有明确,这题让我们判断每行每列的错误,我将第四列错误和第五列错误(目标开度和实际开度)考虑到了一起,将这两个式子变成了一个正则表达式,这里出了错。这里我想了很久,于是我就在输出的那个方法里面直接用split将 分开,然后分别传参数判断。下图就是分开后判断正确与否的正则表达式

    

          第一次作业的第二题,蒙特卡罗求圆周率的方法也小卡了一会,这里我们确定中心点坐标再来判断坐标是不是在院内的思路错了,因为当时我考虑的情况有点过于复杂化,因为我在想中心点的坐标可能在四个象限,所以我们要考虑四总情况,后来问了同学才发现我想太多了,根本没有那么多种的情况,无论在哪个象限他们的表达式都是一样的如下图为修改后成功通过的

            这阶段第二次作业我有一道题没有拿到满分只有88分,也是关于正则表达式的题目,这个题目是让我们对幂函数和常数项的多项式或者单项式求导的,这题到现在我还有些地方没有考虑清楚,然后卡到的地方也是我觉得最难的地方就是怎么把系数和指数分开来,因为它们中间有很多类似运算符号,用正则表达式去分很难分。然后我就想到了一种办法,利用正则表达式,将系数和指数分别分开,这样能不用考虑多种情况就能获得系数和指数。然后分多个情况去获得指数和系数。但是还有一个问题就是这样我虽然可以获得系数和指数,但是这种情况只能限于多项式全为幂函数的情况下,一旦里面有常数项,即使常数项的导函数为0,我还是会出现结果紊乱的情况。这个问题就是我未通过测试点的原因。

 

           这阶段第三次作业难度没有很大但是有点细节问题我没有在意导致第一题卡了一整天,而第二题属于第一题的升级,第一题没有写出来,第二题自然写不出来。主要是我用eclipse编译器自动生成类的构造方法,导致自己设计的类与老师给我们的类有些地方不相符,就是我们输入的数字,不能转换成相应的对象。就是我画红线的地方我原来是ArrayList<Card>导致我的数字不能转换。修改后就成功了。

             

   

    每次作业花费的时间以及比例

        这阶段第一次作业,后面两道题目我觉得比较简单,花费了星期天一个下午的时间将他们完成,然后第一题花了2天通过了大部分测试点,然后找bug直到完全通过那个测试点花了将近一个礼拜,在第一次作业将近结束的时候,我才算真正的完成了第一题。第二次作业我可以说我那道题完全没有完成,这个原因是因为我并没有拿到满分。我没有想到好的办法去解决,第一题花了星期一一上午完全成功,第二题花了整整一星期只通过率大部分测试点。第三次作业花了整整两天。虽然有卡好在难度不是很大,成功完成了。

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

        经过第一阶段的三次作业,我觉得我编程的严谨性正在慢慢提高,没有犯像第一阶段那么多由于粗心大意犯的错误,但是自己的大局观还不是很好,经常会在写代码写到一半的时候发现我这种方法不行实现不了要实现的功能,这样浪费了我比较多的时间。而且我不太容易发现自己的错误,很多时候都是找了半天,然后再从头到尾一行行代码看。说明我在严谨这方面做的还是不够,希望我下个阶段编程的时候能够更加注意细节问题,因为我的代码往往是细节处出问题。

OO设计心得

    通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特点

        对封装性的理解:一开始我根本不能理解为什么我们要将对象里面的属性全部隐藏起来,为什么不直接去修改对象的属性,反而要使用通过调用对象的方法去修改属性的麻烦方法。后来,在老师举的几个例子以及在练习中,我慢慢的发现了封装性的好处。封装性可以更好的保护我们程序的信息,让程序变得更加安全;封装性让我们代码的耦合度变得更低,不会出现一个bug带动整体的大问题;我们可以更方便的去修改代码,去加入新的功能,并且不会影响到原有的功能,让代码的利用率更高。

        对继承性的理解:我觉得继承性是比较好理解的,继承,顾名思义就是将父类的所有东西全部给到子类。这样一来,子类可以随时调用父类的方法,通过父类的方法去改变父类的属性。然后继承的特点我认为有下面几点:可以很好的节约空间,我们不需要为了完成一个功能去重复写代码;可以更好的体现类与类之间的关系,简化了对事物的认识和描述,另一点就是老师上课经常讲的提高代码的可复用性。

        对多态性的理解:这三个特点里面我觉得多态性是做重要的。因为我觉得前面的封装性和继承性都是多态性的基础。多态性可以让我们的编程变得更加灵活。例如我们作业中的Shape抽象类,就可以利用多态的功能来将那些子类全部实例化,提高了程序的使用效率。

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

        单一职责原则在上一阶段的阶段性总结上已经说过了,简单点来说就是我们设计的每一个类联系越少越好,各司其责,来达到低耦合,高内聚的设计理念。这一阶段我们主要学习的是OO中的开闭原则。这个原则的核心是我们在设计这个类的时候,可以多扩展一些功能,然后让我们不用去修改这个设计就能使用新的功能。即“开”就是多扩展,“闭”就是不去修改。

   OO编程思维的理解

        这一阶段的作业过去后,我对OO编程的思维理解又深了一些。我们OO编程的主要目的就是将我们能够将我们设计的对象很好的实例化。我们设计的思路应该尽可能的偏向现实。这个月所学的封装性,继承性以及多态性就很好的体现了这个思想,用抽象的类找到各个对象之间的关系最后利用多态性来将抽象的对象实例化,这样能让程序变得更加清晰有度,而并不是杂乱无章。这就是这个月三次作业带给我对OO编程思维的理解。

测试的理解与实践

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

       毋庸置疑,测试是检验一个程序质量的好办法,测试可以快速的让我们知道我们的错误在哪里,让我们很快的锁定错误区间以及可以让我们去不断优化自己的代码,提高程序的质量。

   使用Junit进行程序测试是否可行

       在网上查询了一些资料,发现很多人在用Junit来对程序进行测试,这说明了Junit的测试功能比较好,但是我也发现了用Junit来对程序进行测试有些坏处,就是使用Junit来测试是比较麻烦的,我觉得比较适合那些大一点的程序,如果是比较短的程序,不太建议使用。因为短程序错误比较容易发现,如果用Junit去测试反而会浪费时间。

课程收获

      第二阶段我觉得比第一阶段累很多,因为毕竟第一阶段只是刚刚到了OO的门外,第二阶段开始像OO的大门里开始走了,在这个过程中,遇到了很多难题,有些时候很累,也吃到了一些苦头,例如按自己的想法去自以为是的编程,结果写完后发现功能无法实现。教训是编程不能太过只以为是了。然后第二阶段如果只满足于上课听讲,远远不够,我们必须要讲老师发我们的课程链接里的内容学完才行,这样我们才能更好的完成老师布置的作业。然后这个阶段将单一职责原则大部分搞明白了,然后对开闭原则有了一个比较透彻的理解,同时还学会了很多有关字符串的操作,并且对正则表达式有了一个清晰的了解。

对课程的建议

   对第三阶段作业难度题量的建议

       对于下一阶段的作业,肯定是希望题量不要太多,和现在题量差不多就行。因为每周七天如果题量太多,感觉压力特别大,要花更多的时间到Java那么其他科目肯定会花少点时间。并且题量太多,肯定对我们的速度有很高的要求,那么代码的质量肯定也会降低。所以希望题目数量不要增多。然后难度渐渐难一点没有关系,主要还是希望题量不要增多。

   课程内容讲解方面的建议

       这方面没什么要求,因为我觉得现在上课模式挺好,就是希望老师写代码的时候可以放在eclipse上,因为那样看的更清晰,我们也好更让好的去看去理解。

    

          

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