zoukankan      html  css  js  c++  java
  • JAVA学期末总结

    前言:

          不知不觉中,JAVA课程的最后一个阶段已经结束了。最后一个阶段的作业我也全部完成了,但是完成的却很艰难;在最后一个阶段的一个月里,JAVA课程的难度又再一次提高了。如果说JAVA前两个阶段是带领我去慢慢了解,熟悉了JAVA,那么最后一个阶段可以说是教我们如何去使用JAVA,去用JAVA去解决实际问题。并且让我们自己去设计解决方案去设计类图,让我们能够更好的去了解Java的例如可复用性可延展性这一类的特性。这个阶段里,我们还学习了数据结构的部分内容。让我们大致对List、Set以及Map、Stack的用法有了个大致了解,为下个学年学习数据结构打了个基础。除此之外,老师还带着我们学习了课本上一些没有的东西:JAVA设计模式和JAVAFX界面。老师花了几周时间来讲这些新的知识足以说明这些知识的重要性。可以说最后一阶段无论是课堂上的内容还是作业里的题目难度都大大提升。在总结完这阶段的所有作业之后,我会对Java这门专业课进行一次全部总结。

    作业过程总结

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

                                

            这阶段的第一次作业是这三次作业最简单并且也是我花时间最少的一次,因为这一次的题目是设计雨刷程序,而这个程序在课堂上老师给我们讲过了很多次并且我们有部分源码。但是这一次比较难的地方就是在设计类图上。第一次作业摒弃了前两个阶段给我们类图的方法,这一次需要我们自己设计符合开闭原则以及有良好延展性的类图。需要我们在加功能挡位的时候只需要加类再改动一些主方法即可。这一题我设计了一个抽象类,抽象类里的抽象方法都是关于雨刷功能的方法。在这个基础上,就很容易的能够加功能。第二次作业就很难了,貌似全班100来号人最后只有两位同学获得了满分。第二次的作业让我们统计输入源码所含Java关键字的个数,这个还不是最难的,难的地方是需要我们排除注释和字符串里的Java关键字。这一道题主要考察的是对数据结构以及正则表达式的使用,可以说是巩固新学的数据结构以及重复练习以前的正则表达式,这一次作业写了很久也改了很久但也却只能拿到70分。第三次作业难度也是不小,让我们实现四则复合表达式的运算。需要让我们去自学Stack栈同时我依然用到了正则表达式(正则表达式真的用处很大)。这三次作业之间的迭代关系明显要比前两阶段作业的迭代关系更深更难。前两次作业的迭代关系都是循序渐进,前一次题目为后一次题目的基础。而这一阶段是这次作业所学到的方法才是下一次作业的基础。这阶段第一次作业让我们之间设计类图来优化自己以前写过的程序;第二次作业来训练我们对数据结构的使用;而第三次就要求我们将类图的设计与数据结构的使用放在一起,要求我们在第三次作业中不仅能够成功的加减乘除四种运算实现,我们还要考虑如何设计才能在加新功能的时候不会修改大量代码。这种迭代关系对我们的自学以及发散思考的能力要求就大大增加了。

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

            这一阶段题量可以说很少,每次作业虽然只有一道题目,但是难度真的不比前两个阶段任何一次作业的难度小。而且在面对这一次作业时我的心态总是恐惧的,就害怕会根本写不出来这一次的作业。导致我这一阶段编程所花费心力和时间大大的增多了。比如这阶段第一次作业让我们加新的功能新的挡位,我愣是花了很久的时间才去看懂题目这里就浪费了我很多时间。然后就卡在了类图的设计上。我一开始接口的设计的抽象类本来是想在操控杆(abstract class Dial)和档位上的,后来发现这样设计的话代码量会大大增加而且如果想新加入功能的话也不单单要加入一个类,会导致程序变得更加繁琐。思考了一会绝对将Agent类设为抽象类。要加入新功能的话只需要加入一个Agent的子类。抽象类如下图:

                                        

    然后我们想要实现新的功能只需要在它的子类力里重写dealspeed();方法即可,如下图:

                                          

    然后第一次作业还犯了一个比较小的错误就是新加入功能在速度已经将为0时我们再去降低他的level或者调低它的挡位是不可行的。应该显示停止,我在这里没有看清需求花了一个多小时来找这个错误很冤枉,最后加了一个选择语句才叫完成了第一次作业。

                                              

            第二次作业难度就比第一次大很多,第二次作业要求我们使用Java数据结构来统计输入源码中的关键字,难度很大,因为这里面不仅仅只包括数据结构的内容还考察了我们常用包装类以及正则表达式的知识点,内容很复杂,所以做起来也很难。我有很多地方碰到了问题但是又找不出来,其中我觉得最无法想到的一点是就是两种注释的测试点我没有过去,我分成了很多情况来考虑。并且自己也输入了很多测试点尝试,发现自己输入的测试点都能过但是提交到PTA上就过不了测试点,所以这个bug我一直没有搞明白 。下面是我注释那段的代码截图,我在这段程序里使用了Map中的TreeMap以及<String,Integer>的泛型来存关键词和键值。然后indexOf()方法是来判断第二种注释符号的位置。其中用了continue来进行跳过操作。但是还是错了,希望在Java结课时老师能给源码以及测试点给我们看看。

                

            

              第三次作业虽然拿到了100分但是其中遇到的错误却是也不少,这道题我一共修改了很多次,一开始每次提交都是55分连基础的及格分60都没有达到,于是我开始自己去调试,去设置断点,发现了自己的一些问题。比如说没有考虑括号的优先级,没有考虑空栈的情况,没有将括号当作符号存入符号栈中,甚至没有考虑到当出栈的第一个是数字立马碰到第二个是符号的情况.......诸如此类的问题花了我很久的时间去修改。如下面第一张图一开始没有加判断是否空栈的情况,导致输入测试点的时候输出会报空栈的错误加了一个判断语句之后这个问题才被解决掉。第二张图就是我后面计算的循环代码。一开始我是在那些数字和符号进栈的时候才会进行一次运算,导致运算结果永远只有优先级最大的两个相连数字的结果,再加了一个while循环之后就可以成功运行结果出来了。第三张图就是我最不应该犯的一个错误,这个小错误被我发现的时候我是非常的恼火,因为错误我找了很久但是没有想到会是运算符号的原因,我当时根本没有把括号当作一个运算符去看,导致我根本没有把这里的错误放在眼里浪费了我整整一个上午的时间,我将两个括号当作运算符加进去之后代码才算是真正的成功运行。

                                 

                                                           

                       

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

              第三阶段的第一次作业是比较简单的,花了一个上午的时间去把它写出来,然后第二次作业花了那么久依然也是没有拿到满分只有70分,但是花费的时间可以说是这一阶段三次作业最多的一次了,我花了5天,而且我的提交次数达到了几十次。直到现在我依然没有搞懂那一道题目的做法。第三次作业考察的是我们对Java重要内容的合集有Java的几个特性有数据结构有栈,所以说也比较难,但是因为那个题目老师给我们降低了难度而且网上有很多类似的题目可以给我们用来借鉴,所以前前后后花了四天的时间去写了出来。

        对编程过程的严谨性的认识以及教训(总结)

             到现在为止,Java课程几乎全部结束了,不管怎么说,还是学到了一些东西的,同时发现自己身上的小毛病依然还是很比较多而且每次编程过程中几乎都会翻一些小错误;然后自己的心态比较浮躁经常在没有思路的时候心烦气燥有些时候又突然会对自己失去信心。但是好在我还是坚持下来了,将这门课成功的学完了,并且多多少少也学到了一些有用的专业课知识也学到了一些非专业课的东西(比如坚持,诚信等)。虽然这门课即将结课但是我依然希望能将在这门课上学到的东西依然保持下去,在这门课上发现的错误尽快改正掉去,希望自己在以后的课上编程越来越严谨,犯的错误越来越少,能学到越来越多有用的知识。

    OO设计心得(全课程总结)

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

            Java这门课一共有六种原则;第一种:单一职责原则:即一个类只负责一项职责,应该仅有一个引起它变化的原因,这样可以降低类的复杂度,让程序变得更加简单,当程序出现错误时也可以很快的发现错误。

            第二种:开闭原则:当我们需要增加或者修改功能的时候,我们需要对代码进行修改,这个时候我们应该尽量去扩展原来的代码,只需要新添加类就可以不需要在原有的代码上进行重构那样很麻烦而且容易出错,而不是去修改原来的代码,因为这样可能会引起更多的问题。

            第三种:里氏替换原则:子类可以去扩展父类的功能,但是不能改变父类原有的功能。这样可以让我们节省很多的时间去重复写代码,我们只需要去扩展一个子类即可。

           第四种:高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。这个定义比较模糊查找资料也没有很好的能够描述。

           第五种:接口隔离原则:不需要多余的接口;我们所做的程序不要有过多的接口,不需要的接口不要使用,否则会给程序带来累赘。

          第六种:迪米特原则:类与类之间要保持足够小的耦合度,越小越好。

          以上六种都是这个学期在Java这门课上学到的面向对象的基本原则,前面三种经常会用到,后面三种比较少见,

        OO编程思维的理解

           这一阶段里对OO编程思维理解的差不多了,其实主要和我前两个阶段说的差不多,就是要根据面向对象的几个基本原则来将程序不断地优化。

    测试的理解与实践

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

             可以说没有测试,我们所编写的代码完全不可行,因为没有测试没有人知道我们代码的质量,所以说测试对于编程的重要性是十分大的,我们平时不仅仅只把时间花在编程上,适当的我们也应该多对自己编写的程序进行测试,对自己的代码不断地去优化,这样对我们编程有很大的好处。

    课程收获

           JAVA这门课可以算得上是大学以来最重要的课之一了,因为这一门课是我们在大学以来接触到的第一门真正意义上的专业课,这一门课学的好或者歹直接决定了我们毕业后所找工作的好坏。接触这门课的这一个学期说实话我觉得很累,因为可以算的上是连轴转并且没有任何休息的时间。每个礼拜都要完成的作业,然后必须要自学很多东西,有些东西难度比较大,作业量也比较多,这就让我们必须要强迫自己去学习。虽然学习这门课是比较累的,但是我觉得我的收获还是比较大的,第一点:JAVA的基本内容我大部分能够搞懂搞清楚,比如封装性、继承性以及多态性这些东西基本上在多次练习的情况下都能够使用;另一个学到的比较使用的东西就是正则表达式,正则表达式在做针对字符串的操作时是非常方便的,能够提前学对以后肯定是有非常大的帮助的;然后JAVA的数据结构老师也讲了一些比如List、Set、Map等虽然没有太明白它们的原理,但是基本上每一种或多或少都使用过了,这也为我们下学期学习数据结构这门比较难的课奠定了一个比较好的基础;同时老师特地花了几节课的时间来和我们讲了一下几种设计模式,还让我们针对以前的作业来画了一次类图;最后几周,我们学的是JAVAFX就是JAVA界面的设计(Stream文件操作);虽然其中很多东西包括布置的一些作业还是有许许多多的地方没有搞明白,但是我对这些知识的基本内容都有了一个大致的了解并且都动手去进行实际操作我了。同时除了课本上的知识我还学到了一些课本上没有的东西,比如咬牙坚持,很多次有过崩溃甚至放弃的情绪,但是想了一下这门课程的重要性以及我自己的未来还是一次又一次的咬牙坚持;学会了和他人去交流,很多次题目比较难的时候,我都会私底下去问一下编程功底比较强的同学他们的思路是什么样的,然后我再拿我的思路和他们的思路去做比较,别人来问我的时候,我又可以获得一种新的想法,我觉得很好;最后一点我觉得我的自学能力获得了很大的提升,以前别的课我基本上都是跟着老师的脚步去学,基本没怎么自学过,到了JAVA课不懂得我回去网上查资料,去mooc上学,去问老师同学。我觉得这些收获不管是对现在还是对以后都是很宝贵的,我希望以后能将这些东西学以致用!

    对课程的建议

          说真的,我觉得Java的教学模式很好,虽然学生会比较累,但是一个学期下来认认真真的听课完成PTA上的作业和学习通上的实验是真的可以学到东西的。然后建议这里还是有几点:

           1、我觉得老师在PTA上放的那个讨论可以换成课堂讨论,因为PTA上的那个讨论呢功能很多同学不愿意在里面发表意见,然后如果每周能够抽个20分钟左右的课堂时间来进行讨论的话我觉得大家的积极性会高很多,同时对解决JAVA作业也有很大的帮助。

           2、然后第二点就是希望在每次PTA作业结束之后,老师能够给出相应的源码,因为每一次PTA的作业过程中都能或多或少的遇到点问题,有些时候即使程序已经拿了满分,但是还是会有小疑惑。所以有这个意愿想搞懂,就希望老师能够在某一阶段结束后,将那一阶段的源码发出并且做出一些讲解让大家理解的更加透彻。

           3、然后就是每次课堂上留下的课堂练习也希望老师在所有同学都提交之后能够讲一下,毕竟我们自己写的再好也没有老师写得好。

           以上几点就是我对JAVA课程的建议。

  • 相关阅读:
    第二章函数对象
    2013/10/24初学BOOST
    [转]delete 多表删除的使用
    vs2010配置boost编程环境(照抄并简化)
    游戏服务器修改状态标志位方法
    小思 引用和指针
    第二章:UNIX标准化及实现
    const指针
    第一章:UNIX基础知识
    基础算法——位运算
  • 原文地址:https://www.cnblogs.com/pzj020219/p/12992551.html
Copyright © 2011-2022 走看看