第二阶段作业的心得
1.前言
针对第二阶段的作业,相比第一次作业来说难度系数大幅度提升,需要自己学习对字符串类的相关应用、正则表达式的熟练运用和对类的多态性的认识及运用。
2.作业过程总结
(1)总结三次作业之间的知识迭代关系
这三次作业之间都是有联系的,第一次作业考察的知识点有字符串相关类应用、正则表达式、类间关系应用,第二次作业考察了掌握类的继承、多态性及其使用方法和正则表达式的运用,第三次作业考察类的封装性、继承性、多态性以及抽象类、接口的应用。
(2)如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
在第一个阶段学习中,学会了在类里面定义私有属性,这体现了面向对象的特点:封装性,而在第二阶段的学习过程中,大量的使用了继承关系,例如第一次作业第三次作业中,子类求面积的方法都是从父类继承而来的,在第二阶段的第三次作业中,就运用到了多态性,同一个方法可以根据使用的子类的不同有不同的实现,这就体现了多态性在这第二阶段的运用。
(3)作业过程中遇到的问题及解决方法
在第二阶段的过程中,主要出现的问题是在第二次作业的求导数以及第三次作业的求素数算法的优化和对输入数据出现空格的删去,第二次作业求导数这一题是在这一阶段唯一没有完成的题目,由于自己的原因,对类与类之间调用关系的不熟悉以及对题目中出现的细节问题理解不到位,导致在写求导数这一题目中,改完一个问题,就出现了其它的问题,导致在最后一天都没有完成这一问题,这是我认为这一阶段,自己做的不好的地方;还有第三次作业对素数算法的优化,第一次提交就是用自己的惯性思维求素数,然后提交一次是6000多ms,而之后通过自己的考虑,然后减少循环的次数以及用boolean类型的数组,将求素数的算法提升到了239ms,之后没有将算法优化到200ms以内是自己在这一阶段作业中的遗憾;第一次作业以及之后作业中在实验报告书中,有特别说明可能出现空格,然后通过学习知道trim方法可以对空格进行消除,之后,老师提供了一种replaceAll的方法,我认为相对trim方法更好,这也是这一阶段新学习到的方法。
(4)每次作业花费的时间比例
第一次作业花费了四天时间,主要还是学习正则表达式以及对正则表达式的测试上花费了大量时间,第二次作业花费了七天时间,第三次作业花费了四天时间,主要是在对素数算法的优化上考虑的很多时间,时间比例为第一次作业:第二次作业:第三次作业 = 4 : 7 : 4。
(5)对编程过程的严谨性的认识及教训
对于在编程过程的严谨性我感触颇深,就是在第二次作业的求导数上,给了我一次教训,由于没有完完全全的对题目考虑清楚就开始对代码的编写,然后之后改一个问题,就冒出了许多其它的问题,导致这一次作业没有全部完成,这次作业后,我认识到了在编程过程中,一定要对题目的仔细研读,也认识到了编程过程的严谨性是非常重要的,还有一定在没有完全理解类图关系,以及类与类之间的调用就开始先写代码,在对代码进行改正,这是一个非常严重的错误,在之后的学习中,我会杜绝这一情况的发生。
3.OO设计心得
(1)对面向对象三大技术特性之间关系的理解
首先,封装性是我认为就是用访问修饰符保护成员变量,对于其它类这些是不可见的,而继承性就是子类包含着父类的方法和属性,不需要通过重新定义就可以使用它,对于多态性的使用,也就是老师上课讲的重载和重写,在这一阶段,使用较多的就是重写,例如:求不同形状图形的面积的方法都是从父类shape继承而来,在通过在子类重写,使得子类可以将从父类继承的求面积方法用作求自己的面积。
(2)面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
在第一阶段以及这一阶段的学习之后,对单一职责原则的认识,又进一步的加深了,就是一个类对应这一个职责,例如:这一阶段的第三次作业的第二题,DealCardList类就是对传入的ArrayList数据进行处理;而开闭原则我认为就是用一句话来说就是抽象构建框架,用实现扩展细节,在这一阶段中的第三次作业的第二题中,shape里面的方法定义为abstract,在子类中对方法进行实现,这体现了开闭原则,也是这一阶段所学习到的新内容。
(3)OO编程思维的理解
在这一阶段主要是对面向对象的实现,在老师给出的类图下,对类里面的东西进行实现,在第一阶段中,已经对OO编程思维有了一定的理解,而在第二阶段主要是对面向对象的实现,在实现过程中,需要根据类图了解每一个类之间的关系,在进行代码的实现。
(4)类设计心得
对于类的设计,主要考虑的是设计的每一个类对应完成一个职责,而类与类之间的关系需要多考虑其中的关系在这一阶段,对于老师给的设计报告书中,觉得老师设计的类比较好,然后做完题目之后,对老师写的类图进行思考,也是在这一过程中,觉得对类设计方面,自己的能力有一定的提升,这也是在这一阶段的心得。
4.测试的理解与实践
(1)测试对于编码质量的重要性
测试对于编码质量来说是非常重要的,在这一阶段的学习过程中,可以认识到,就那这一阶段的第一次作业来说,对于水文数据的检验,一开始没有考虑到可能在数据中会出现空格,导致进行分割之后,在数据前会出现空格的情况,在测试中,尝试这加入空格进行测试,结果与所需要的结果不相符合,然后测试过后,就思考对空格删去的方法从而解决编码过程的问题,提高编码质量。
(2)查阅资料,假设使用Junit进行程序的测试是否可行
使用Junit进行程序的测试是可行的。
5.课程收获
在这一阶段的学习过程中,编程过程的严谨性给予我很深刻的印象,正因为自己在分析题目过程中的不严谨,直接进行代码的实现,导致之后调试代码,解决了一个问题,之后冒出许多个其它的问题,还有对于输出过程中,需要加入的字符或字母总是会少一个,这是细节方面的问题,也是这一阶段出现过且经过很久才发现的问题,当然,在这一阶段也学习了不少新知识,例如:接口的运用以及多态性的运用,这是在这一阶段的作业过程中出现过的问题,在网页上自学之后,又学习到java方面的新知识,还有在看完老师的报告书的类图关系,写完题目在pta上得到满分之后,对类图关系的思考以及考虑类图的设计,自己在这一方面的能力又有了进一步的提升。
6.对课程的建议
对于第三阶段的作业,我认为要相对于前几个阶段的难度需要加大,只有这样才能学习java方面的真正知识,题量方面可以加大,这样我们的时间就会更加的紧凑,学习效果就会更加的好。对于课程讲解方面,我认为老师在课堂上讲的都是一些关于java能力提升方面的东西,这是在课本上学习不到的,而对于在听课过程中,学习出现问题的时候,老师也会积极的解答,这样的课程学习效果才能达到最大,总的来说还是要靠自觉以及积极向老师提问,这样学习效果就会越来越好。

浙公网安备 33010602011771号