OO第二单元作业总结(第四次作业)
0.前言
主要说明本次博客针对的作业情况
本单元的作业比第一单元的作业难度增加了很多,花费的时间也增加了许多,但完成程度不如第一单元的好,只有第三次作业完成情况还算满意。
1.作业过程总结
①总结三次作业之间的知识迭代关系;
第一次作业:
第一题“水文数据校验及处理”难度较大,主要考察的是正则表达式的使用和字符串处理类。这道题的业务背景对我而已比较陌生,不太理解类与类之间的结构关系,没看懂任务书中的类间发送关系的图,需要考虑的情况也比较多,再加上还没有用过正则表达式,因此要解决这个问题就有些困难;
第二题“蒙特卡罗方法求圆周率”难度不大,主要考察的是对类的设计,思路很简单;
第三题“图形继承“难度不大,主要考察的是类的继承与类的调用,主要是为第二次作业和第三次作业做铺垫。
第二次作业:
第一题“图形继承“在第一次作业第三题的基础上,不仅进一步考察了类的继承,还对多态性的应用进行了考察;
第二题“多态一元多项式求导“在第一次作业第一题的基础上,不仅继续考察了正则表达式,还考察了面向对象中的封装性、继承性以及多态性的应用。
第三次作业:
第一题“图形卡片排序游戏“在第二次作业第一题的基础上,还对 ArrayList泛型的应用以及Comparable接口中的CompareTo()方法及泛型的应用进行了考察;
第二题“图形卡片分组游戏“在第一题的基础上难度有所增加,主要是代码长度限制方面,这就要求不能随便应付了事,必须对代码进行改进和完善;
第三题加分题“求素数“,求素数按理来说是一道十分基础的题,但倘若算法设计得不好,在测试一些大数据时极有可能运行超时,这虽然与本单元知识没有关联,但能让我们对优化算法的重要性进行思考。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;
这三大特性主要是通过本单元中有关图形的题目逐步体会到的,通过get和set方法去操作对象中的属性,Circle、Rectangle、Triangle、Trapezoid都继承Shape,每个子类都重写父类中的方法,在实际运行过程中调用相应的方法,这就体现了多态性。
③作业过程中遇到的问题及解决方法
问题:用正则表达式检验输入数据
解决方法:查阅各种资料,静下心来仔细揣摩正则表达式。
问题:实现Comparable接口中的CompareTo()方法
解决方法:在刚写这个题得时候,我自己这样定义了一个接口,在直接使用Collections.sort(cardList);时会报错,在CSDN上查阅很久后仍不知道是哪出了错,最后在尝试把自己定义的接口删除后不报错了,这才得以解决。
interface Comparable<T>{ //定义接口
public int compareTo(T other);
}
问题:在其它类中使用同一个对象输入
解决方法:起初看到老师在main方法中给的提示还有些茫然,不知道定义静态Scanner对象有什么用,但在分析时发现定义这样一个对象之后,需要在其他类输入时,直接使用Main.input.next即可。
④每次作业花费的时间比例:3:2:2
第一次作业大概总共花了三天时间,时间花得最多的就是第一题,研究了很久任务书也还是有很多地方不清楚,再加上一直以来都是老师给出主函数,这次需要自己设计主函数,就更加不知道从哪里着手,在eclipse上写了很久最终还是放弃了;第二题花了半天时间,主要是因为坐标问题上自己没有理清楚;第三题花了一个多小时的样子。
第二次作业大概总共花了两天时间,第一题花了半天左右,主要是在设计main函数上走了弯路,虽然最后达到了目的,但思路过于复杂;第二题一直感觉没有思路,对正则表达式也还是不太熟悉,琢磨了一天多还是放弃了。
第三次作业大概总共花了两天时间,第一题花了接近一天,主要是对泛型特别不理解,总感觉那是个很复杂的东西;第二题花了半天多,不是不会写,在第一题做完后一个多小时就能在eclipse上得到正确的运行结果,但是到pta上提交总是代码长度超过限制,改了n次才能成功提交;第三题通过查资料学习,然后再自己完成代码。
⑤对编程过程的严谨性的认识及教训
在编程过程中需要持有严谨的态度,否则改代码的时间往往多于写代码的时间,经常会由于自己的粗心大意导致结果错误、答案错误。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
封装性:我认为就是一个盒子,所有的对象(都设为private的)、方法都被装在这个盒子里面,其他类只能通过get、set方法对这个盒子里的对象进行操作;
继承性:一个类继承另一个类就是说这个类属于另一个类,具有另一个类的所有属性和方法,同时它还可以有另一个类不具备的方法和属性;
多态性:一个父类对象可以有多个子类对象,而这些子类具有不同的方法,也就是说可以表现出不同的形态。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
单一职责原则:一个类、一个方法或者一个接口只负责一个功能,这一原则降低了复杂度,提高了代码的可读性以及系统的可维护性。
“开-闭”原则:这一原则使代码就有灵活性,体现在两个方面:对拓展开放(意味着有新的需求时可以对代码进行拓展实现新的功能),对修改封闭(意味着一旦完成代码,就不能再对代码进行任何修改)。
③OO编程思维的理解
万物皆对象,而对象是类的实例;对象的相同特征抽象为属性、相同的行为抽象为方法。
要对类进行封装;类可以继承;类有多态。
④类设计心得
在设计类时,要思考类与类之间的关联,仔细划分功能,做到单一职责原则。
3.测试的理解与实践
①测试对于编码质量的重要性
我认为测试对编码来说是十分重要的,特别是对于一些复杂问题通过测试往往就能发现问题所在。
②查阅资料,假设使用Junit进行程序的测试是否可行
使用Junit进行程序的测试是可行的。
4.课程收获
总结这四周来在OO方面的教训及收获
收获:理解了面向对象三大技术特性以及单一职责原则和“开-闭”原则,掌握了类的继承、泛型、接口的使用,掌握了正则表达式的书写;
教训:在编写代码时要严谨,要养成良好的编码习惯;要学会拆分功能,让一个方法只具备一个功能,这样不仅便于代码的编写,也使代码更利于维护。
5.对课程的建议
①第三阶段作业难度、题量的建议
如果题的难度减小的话,体量稍稍加大是能接受的。我认为在难点及以后会常用到的知识点上出题时可以循序渐进,比如这次的正则表达式,可以先让我们做点简单的题目找找感觉,再去结合其他知识点完成更复杂的题目,而不是直接一来就是难题,这样有些打击我们的积极性。
②课程内容讲解方面的建议
前两单元作业都是老师给出任务书,我们根据任务书去“填空“,相信在后来的作业中就得我们自己着手整个题目了,我相信这点对大多数同学而言都是一个难点,因此我希望老师在课堂中能更注重对我们设计思维的培养,比如用一些例子来引导我们设计。其次就是希望老师在课堂上也能多讲一些例题,用例题在课堂上教我们写代码,这样一来是便于我们理解知识点,二来可以减少我们在实际写代码的过程中一些初学易犯但又不必要的错误。

浙公网安备 33010602011771号