第三阶段作业总结
0.前言
本次总结针对于本阶段三次作业进行一个收获性小结,以及这个学期对Java学习的认识和体会。这次作业主要考察了类的设计,对单一职责原则、迪米特法则、合成复用原则(开-闭原则)、里氏代换原则、接口隔离原则及依赖倒转原则,进行了考察。并且作业内容涉及java数据结构List、Set、Map,以及栈的运用。
1.作业过程总结
这三次作业,题量每次只有一题,但是都需要花大量时间去实践并运用所学知识来进行解题,花费的时间上还是比上一阶段的作业要长,处于边学习边理解运用知识的状态,通过不断理解学习再来完善所写程序。尽管如此,除了第一次雨刷程序的作业完成了,其他两次作业总有几个测试点过不去,修改了半天还是过不了测试点,只能以百分之七八十的程度结束作业。
第一次作业是对雨刷程序的重构使之可扩展,是类的封装性、继承性以及多态性的综合应用。同时对于接口与抽象类的构建考察了设计思维。这次作业其实在后来的学习了状态模式以及策略模式后,发现我所设计的类于类之间的结构还是存在很大缺陷,至少没有符合里斯代换原则,只单纯考虑程序的可复用可拓展。
第二次作业是统计java程序中关键字的出现次数,是List、Set、Map以及正则表达式的综合应用。对于此次作业,我使用了IO流来存储从键盘输入的java程序,算是对老师要求自学内容的简单运用。但是在分割字段的地方存在问题,例如public static abstract double fun(int x,double y,float z);中无法对括号中的关键字进行统计,涉及到分词。这也是本次作业至始至终未解决的问题,同时在多行注释的匹配过程也存在问题,导致本次作业并没有完成的很好。后面直到作业结束,才发现好像可以对字符遍历然后逐一匹配是否出现/*,和*/结尾的内容其中的关键字不予统计来解决这一问题。
第三次作业是表达式求值只涉及整数的四则运算,首先对表达式进行合法性检验涉及正则表达式内容,之后使用两个栈,将操作符压入操作符栈,将操作数压入操作数栈。这题在eclipse上进行测试时看上去能通过所有测试点,但其实还是有两三个测试点没有通过。就像除零测试,我仅仅想到了在表达式中出现除数为0的情况,但其实在表达式的计算过程中也有除数为零的情况。所以我在进行运算时增加了除数为零的情况,但还是过不了除零测试,不知为何。
总而言之这三次做下来还是有很大的收获,尽管完成的不算很好,但是在进行的过程中还是学到了东西,对于编程的严谨性仍然存在一定问题,例如写过相似的代码喜欢复制过来而不是重新敲,以至于类名参数有时忘记修改以至于程序出错。
2.OO设计心得
类的设计实际上是面向对象设计的基本原则理解与运用,以及设计模式的合理使用。如何对单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则这些设计原则的选择与运用在较大程度上影响设计的合理性。好的类设计程序就完成了一大半,接下来的代码实现过程相比之下还是好完成的。例如合理的使用类的封装性,将方法private,只在自己类中使用就是里氏代换原则的运用。如何理解这些基本原则,将其组合运用是我日后学习中还需完善,受用终身的。
3.测试的理解与实践
测试不仅仅是对作业完成度的一个检测,而是对程序的质量的一个检验。不光是为了过测试点而进行相应的样例检测,通过Degbug来使之通过测试点,而是通过样例测试来锻炼自己的逻辑思维,使自己下次再遇到相似逻辑情况时能有更好的应对方法,这才是我们所需的。久而久之,通过自己的思维完善以及逻辑锻炼写出能基本上测试都通过,不需大量修改的程序才是我们今后的目标。这也时测试进行的目的以及测试能给我们带来的好处,测试不仅仅是程序的完善过程,更是我们的逻辑思维的锻炼和成长过程。
4.课程收获
通过几个阶段的学习,我初步掌握了所学知识,但是Java的学习现在还只冰山一角。java抽象类,接口我感觉尤为重要,如何合理的使用抽象类,以及运用接口,也算的上是好的类设计,可更好的复用和拓展。抽象类可实现类的继承,而类的继承又是多态性的体现。抽象方法在继承类中实现,而继承类的其他方法用关键字private隐藏,只能在继承类中使用,又是里氏代换原则的体现。将隐藏的方法在继承类重写的抽象方法中调用,其他类通过调用重写抽象类中的方法来使用隐藏方法,又使得程序具有良好的封装性。所以抽象类以及接口的合理使用显得至关重要。通过课程的学习最大的收获是磨练了性子,为了完善程序达到需求能坐上一上午敲上一上午,甚至一整天,这是之前远远不能达到的。虽然说java的学习过程有很大的难度,同时作业也是一个头疼之处,但是不得不学,不管怎么说也还是坚持下来了,这也算是痛并快乐着吧。最后javafx设计界面是比较有趣的,做出一个界面有极大的成就感,在愉悦中学习也是最后阶段最好的方式。
5.对课程的建议
一个学期的java学习也快结束了,对于课程的教学模式我还是比较认同老师的这种讲课加作业练习的方式。所以这种模式下对于作业的完成以及质量方面严格是理所当然的,只有对作业严格才能得到较好的锻炼,所以老师对作业查重也是为了我们着想,就像原来的c语言,只要pta上作业有人做出来了,类似的代码层出不穷,更有甚者直接复制别人的代码进行提交,我也不知道为什么能查看别人提交的代码。主要参考网上代码较多,以至于c语言学的不是怎么好。但是java作业都得查重甚至全网查重,所有作业都得自己完成,完不成就面临淘汰,很残酷的现实。尽管每次作业完成的都不算太好,但是挺过来了作业完成个七七八八还是有很大的收获,并不是完全没有学到东西。有压力才有动力,所以作业练习作为衡量成绩,并对作业严格要求的方式是很好的。只要努力了,认真学习了也不至于挂科,学到了东西才是主要目的。

浙公网安备 33010602011771号