第三阶段作业的心得
1.前言
针对第三阶段的作业,相比前两次作业来说难度系数大幅度提升,这一阶段的作业主要是对解决问题的过程中,使用方法的考虑,有些方法可能几十行代码就能解决所有问题,而有些方法使用了上百行代码却仍然无法解决部分测试点。
2.作业过程总结
(1)总结三次作业之间的知识迭代关系
对于第一个阶段的作业来说,是考察我们对初学java上的一些语法知识的考察,作业相对来说较简单,第二阶段的作业,主要是考察多态和继承,在实现过程中,主要考察了正则表达式和字符串处理函数的运用,且在这一阶段,老师给出了对于同一问题不同类设计去完成题目,在这一阶段自己了解到了对于解决一个复杂问题来说,类设计是尤其重要的,第三阶段主要是考察对类的设计以及正则表达式的运用和字符串处理函数的运用,第一次作业的雨刷程序的扩展主要是考察了对多态以及对程序架构的构造,我们需要考虑的是如何在创建一个雨刷之后,之后无论多添加多少个雨刷,原先程序代码在不需要更改的情况下,能够继续运行;第二次作业主要考察了正则表达式的运用以及对字符串处理函数的运用,第三次作业即需要考虑对程序结构框架的构造也需要对栈知识以及字符串处理函数的运用。
(2)如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
在第一个阶段学习中,学会了在类里面定义私有属性,这体现了面向对象的特点:封装性,在第二阶段的学习过程中,大量的使用了继承关系,例如第一次作业第三次作业中,子类求面积的方法都是从父类继承而来的,在第二阶段的第三次作业中,就运用到了多态性,同一个方法可以根据使用的子类的不同有不同的实现,这就体现了多态性在这第二阶段的运用,而在第三阶段的学习过程中,更多的是运用了多态性,通过重载的方式来继承接口里面所含有的方法来实现类内部的方法。
(3)作业过程中遇到的问题及解决方法
在第三阶段的学习过程中,在第一次作业上,主要遇到的问题就是对类的设计,如何能做到之后无论添加多少个雨刷,只需要添加相应代码,无需要对原先有的代码进行更改,这也是这次作业上最难的问题,在思考了许久并在草稿纸上画类图关系,最终解决了这一问题;在第二次作业上,采用了不同的方法对输入的注释用正则表达式进行删去,用这个正则表达式对注释进行匹配"(\".*\")|(\\/\\/*)",然后再对\n,;,(),{},等这些可能出现关键字的地方进行分割,之后再第一次提交过程中,获得了40分,之后再考虑了很多以及查了正则表达式的用法,将匹配两种注释的正则表达式进行更改,用这个正则表达式多注释进行匹配 "(\".*\")|(\\/\\/(.*)*)";结果发现(.*)是一种贪婪匹配,会尽可能多的匹配出现的注释,所以再之后的提交代码过程中,得到了80分,后来考虑到了注释可能有以下四种情况,//,/* */,/* /n{1,}*/, // /* /n{1,}*/,等多种情况,最终在这次作业结束前仍然没有解决这一问题,这是这一阶段学习过程中,自己的不足之处,在第三次作业过程中,在开头一天,对表达式求值的问题,没有很好的想法,之后在百度查询了表达式求值的问题,通过理解了表达式求值的思路之后,开始了写代码,在这阶段主要遇到的问题还是优先级的判断,对于后缀法来写表达式求值,需要考虑优先级,在草稿本上举了几个例子:2-2-2和18/3*6,如果--同级以及/*同级,那么在链表中的数据是为,2 2 2 - -和18 3 6 / *,这样得到的结果与最终结果不同,之后考虑到对于2-2-2这个表达式来说前面的-优先级大于后面的-,18/3*6这个表达式前面的/的优先级大于*的优先级,那么进入链表的数据应为22-2-和18/3*6,因此在解决这一问题上,花费了一定时间对其进行考虑。
(4)每次作业花费的时间比例
第一次作业花费了两天时间,主要还是对类的设计方面花了大量的时间,第二次作业花费了三天时间,第三次作业花费了四天时间,主要是对优先级的考虑以及正则表达式的匹配上花费了许多时间,时间比例为第一次作业:第二次作业:第三次作业 = 2: 3 : 4。
(5)对编程过程的严谨性的认识及教训
这一次编程过程中的严谨性相对于之前两个阶段严谨性提高了很多,但还是会出现一点问题,例如在第三次作业的栈的弹出栈顶元素和获取栈顶元素的pop()和peek()之间有所混淆,导致在编完代码之后调试才发现问题,这是在这一阶段编程过程中,出现细节方面的问题。
3.OO设计心得
(1)对面向对象三大技术特性之间关系的理解
首先,封装性是我认为就是用访问修饰符保护成员变量,对于其它类这些是不可见的,而继承性就是子类包含着父类的方法和属性,不需要通过重新定义就可以使用它,对于多态性的使用,也就是老师上课讲的重载和重写,在这一阶段,使用较多的就是重写,例如:第一次作业的level和dial类里面的升档和降档的方法都是通过继承接口通过重写实现方法的,第三次作业也是通过继承接口来通过重写的方法来实现类里面的方法。
(2)面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
在前两个阶段过程中,通过理解老师所给的类图以及作业过程中,深入了解了单一职责原则,在这一阶段的第一次作业和第三次作业,都是考虑了单一职责原则,每一个方法对应着一个处理方式来解决问题,开-闭原则也在这两次作业中有所体现。
(3)OO编程思维的理解
在前两个阶段主要是对面向对象的实现,在老师给出的类图下,对类里面的东西进行实现,在第一阶段中,已经对OO编程思维有了一定的理解,而在第二阶段主要是对面向对象的实现,在实现过程中,需要根据类图了解每一个类之间的关系,在进行代码的实现,在第三阶段,需要自己去设计类图来实现代码。
(4)类设计心得
在前两个阶段,对于类的设计,主要考虑的是设计的每一个类对应完成一个职责,而类与类之间的关系需要多考虑其中的关系,对于老师给的设计报告书中,觉得老师设计的类比较好,然后做完题目之后,对老师写的类图进行思考,也是在这一过程中,觉得对类设计方面,自己的能力有一定的提升,这也是在前两个阶段的心得,而在这一阶段,需要自己对类图进行设计,在设计过程中,还是会出现一些问题,例如:第一次作业如何在原有代码的情况下,无论加入多少个雨刷,程序都能够正常进行且不需要更改原有代码。这是在类设计过程中,需要考虑的很重要的问题,设计完之后,自己也有所收获,类设计过程中,需要很好考虑类与类之间的关系,才能创造出好的类的设计。
4.测试的理解与实践
(1)测试对于编码质量的重要性
测试对于编码质量来说是非常重要的,在这一阶段的学习过程中,第三次作业的判断优先级也是通过在调试过程中,对list里面的数据进行观察后,发现2-2-2前面的-应该比后面的-优先级更高才能得到最终的结果,还有对于栈顶元素的查询是运用peek()而不是pop()来的,也是通过调试过程,发现数据的变化来找到问题所在。
(2)查阅资料,假设使用Junit进行程序的测试是否可行
使用Junit进行程序的测试是可行的。
5.课程收获
在这三个阶段的学习过程中,编程过程的严谨性给予我很深刻的印象,正因为自己在分析题目过程中的不严谨,直接进行代码的实现,导致之后调试代码,解决了一个问题,之后冒出许多个其它的问题,还有在考虑问题的过程中,应该对问题层层了解问题的解决办法,在进行编写代码,总的来说,第一个阶段,对于我来说就是学会了如何看懂类图以及运用基本的语法去解决问题,在第二阶段,是去探索类的设计,对于解决一个相同的问题,如何用更好的类的设计去解决问题,在这一阶段,让我们了解一个好的类的设计对解决实际问题的好处,且在这一阶段需要灵活运用正则表达式以及一些字符串处理函数等处理方法,第三阶段主要是考察对类的设计和正则表达式的运用,第一次作业就是考察设计的类图的可扩展性,第二次作业主要是考察正则表达式的运用以及字符串处理函数的运用,第三次作业主要考察了对类的设计和对Java栈的运用,总的来说,在这三个阶段的收获颇丰,掌握了正则表达式的运用,多态,继承,类的设计等等Java的知识,而每一阶段的课堂和作业对于自己来说都是很好的,很好的锻炼自己在Java方面的技能。
6.对课程的建议
首先,在出题目方面,觉得老师出的题目都是非常好的,在我们能够解决的范围之内,但却需要大量的时间思考以及学习才能够解决的,我认为老师在课堂上讲的以及老师留下来的课堂作业都是在现阶段我们需要学习的知识,这是在课本上学习不到的,而对于在听课过程中,学习出现问题的时候,老师也会积极的解答,这样的课程学习效果才能达到最大,总的来说还是要靠自觉以及积极向老师提问,这样学习效果就会越来越好。

浙公网安备 33010602011771号