前言
本次博客是针对我们java第二阶段的作业(共三次)发表的一个总结性博客。第二阶段的作业相比第一阶段难度增加了不少,当然,经过这次作业,写代码的能力也提高了,对面向对象的理解也更加深刻,下面是具体的内容:
1.作业过程总结
①总结三次作业之间的知识迭代关系
第一次作业有三道题目,分别是水文数据校检及处理、蒙特卡洛仿真方法求圆周率及圆形继承。因为老师说这三题难度依次递减,所以我先做了第三题,这道题只考到了图形的继承,比较简单,我很快就完成了。之后开始做第二题,过程不复杂,难度也不大,我思路也比较清晰。第一题刚看到题目就知道这题不容易。这道题主要是正则表达式那一块比较复杂,我刚开始根本就不知道正则表达式怎么使用,怎么书写,之后通过百度和询问一些同学,慢慢懂了一些。
第二次作业有两题,分别是图形的继承与多态和一元多项式求导。第一题图形的继承与多态是在第一次作业图形继承的基础上的升级版和加强版,增加了多态的应用。一元多项式求导也是主要考察正则表达式的运用,是第一次作业的强化。
第三次作业有三道题,分别是图形卡片排序游戏、图形卡片分组游戏、求素数,卡片排序考察类的继承、多态性使用方法以及接口的应用,卡片分组是在卡片排序基础上的改编题,第三题求素数是一道加分题,比较检查,需要控制时间最短。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
我们把一系列描述对象的属性装在一起,然后放在一个类里面,这就是封装。继承是类与类之间的关系,子类可以继承父类的属性和方法,从而实现了代码的复用性。多态主要指引用多态和方法多态,父类引用可以指向本类对象也可以指向子类对象,子类可以重写父类的方法。这一个阶段的作业主要是考察封装、继承、多态、接口的应用,每次作业都是围绕这些开展。
③作业过程中遇到的问题及解决方法
第一次作业:
第一题中遇到的问题比较多,有一个错误是输出语句前面少了一个空格,导致答案错误,加上空格就对了
还有一个是数据合法性校检那调用了两次目标开度没有调用实际开度的合法性坚持函数,当时controlV之后忘记改里面的参数改成下图就行了
第二题中,我思路比较清楚,但是就是很多个测试点答案错误,我感到奇怪,觉得自己思路没错,检查完一遍代码,还是没找到问题,之后设置断点,还是没能找到问题,最后我又一行行代码仔细地检查,发现我在计算圆内的点到圆心距离时自动把圆心认为在原点,但其实圆心坐标是变化的,改成下面这样就过了
第二次作业:
第二题一元多项式求导中,最开始不知道怎么把多项式拆成各个项,然后问了其他同学就有了思路,就是把多项式中的减号和指数的负号用其他字符代替,然后用正则分出各项,最后把减号和负号换回来。数字中带空格这个测试点过不了,询问同学后再写了一个正则控制这种情况就过了。
④每次作业花费的时间比例
花费时间比例为:4:3:2
⑤对编程过程的严谨性的认识及教训
编程过程中有许多低级错误,说明自己不够严谨,这也让我吃了很大苦头,一直在找bug,所以今后写代码一定要仔细,更加谨慎。出现算法错误,要多多使用debug。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
把一系列描述对象的属性装在一起,然后放在一个类里面,这就是封装。继承是类与类之间的关系,子类可以继承父类的属性和方法,从而实现了代码的复用性。多态主要指引用多态和方法多态,父类引用可以指向本类对象也可以指向子类对象,子类可以重写父类的方法,子类也可以扩展父类的功能但是不能改变父类原有的功能。接口所有方法都不能实现,一个类可以实现多个接口,接口可以继承接口。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
单一职责原则:一个类、方法、接口只能有一个职责。
“开-闭”原则:一个模块在扩展性上开放更改性上封闭,如果要加入其它功能,要在不修改原有功能代码的前提下,增加其它功能代码。
③OO编程思维的理解
面向对象编程思维是以对象为中心,面向对象就是将对象的属性和方法封装起来,通过封装、继承、多态,实现一系列功能,同时使代码复用性更高。类具有属性和方法,是抽象的,而对象是类的实体,也具有类的属性和方法。通过对象来使用类的各种方法实现所需功能。
④类设计心得
设计类要注重代码的复用性,注重单一职责原则和开闭原则,把对象的属性封装到一个类中,也要注重继承与多态及接口的使用,这几次作业老师都提供了类图,简化了我们设计类这一环节,我们要从老师设计的类图中学会怎么样设计高效的类图,所以在分析问题的时候要多注重观察各个对象的特点及联系。
3.测试的理解与实践
①测试对于编码质量的重要性
测试首先是可以检验代码的正确性,如果代码有算法错误,测试是比较容易检测出来,以便于后续代码的修改。其次,测试也可以看出代码的质量,通过的测试越多越繁杂说明代码质量越高
②查阅资料,假设使用Junit进行程序的测试是否可行
老师讲过使用Junit进行程序的测试,课后也布置了相关练习,之后我也没有使用过,虽然有用处但是我个人觉得比较复杂,不是很习惯使用。可能我们目前接触的知识面较浅,不必要使用,如果大工程的话,这个实用性还是很高的。
4.课程收获
总结这四周来在OO方面的教训及收获
通过这个阶段的学习,我掌握了最基本的正则表达式的书写,也逐渐熟悉封装、继承、多态、接口的应用,也越来越体会到使用继承、多态之后代码的复用性得到大大提高。但同时也暴露了我许多问题,有很多低级错误出现,比如少一个空格、圆的方程写错、复制粘贴过后忘记修改变量等等。所以在今后的作业中,我要仔细仔细再仔细,更加谨慎认真,这样的错误真的很难发现,有时候debug都不一定能找到,说起来都是泪水。
5.对课程的建议
①第三阶段作业难度、题量的建议
第二阶段的作业难度算是中等偏上一点点,我觉得第三阶段的作业可以加大一点点难度,最好也是循循渐进,难度依次递增,但是也不要太难了,毕竟还是能力有限,而且,最近有四五门实验课,任务还是有点重;关于题量,如果题目多一点,那难度就降低一点,每次作业最好是两道题目,一道简单一点,一道难一点点。
②课程内容讲解方面的建议
希望老师在作业截止之后能讲一讲题目的思路,做法等等,这样可以让我们对比自己的思路,解法,发现不足或者发现自己的亮点,对后续作业代码的设计会有一定帮助。