- 前言
本次作业包括:
NCHU_Software_Java_Homework05
- 水文数据校验及处理:涉及字符串处理、动态数组、正则表达式等,难度很高。
- 蒙特卡罗方法求圆周率:对理解算法的考验。
- 图形继承:学习“继承”、“多态”的开端。
NCHU_Software_Java_Homework06
- 图形继承与多态:与上次作业第3题类似,但加入了抽象方法的概念。
- 一元多项式求导:这题是对字符串处理、动态数组、正则表达式等知识的综合考验,难度较上次作业第1题略有降低。
NCHU_Software_Java_Homework07
- 图形卡片排序游戏:考察对抽象对象进行排序使用到的比较器及“可比较”接口。
- 图形卡片分组游戏:紧接上一题加入了分组排列的要求,难度不大。
- 求素数:纯粹的算法考验。
1.作业过程总结
①总结三次作业之间的知识迭代关系;
作业05-1中基于正则表达式的格式检测对作业06-2中的多项式格式检测起到了很大帮助。从作业05-3中的类的继承到06-1中的抽象方法继承大大开拓了我的编程思维,利用抽象类能大大提高编程的效率,将编写具体类的任务划分得井井有条。07-1、07-2中利用之前学习的抽象类的方法继承,可以做到对由不同类的对象组成的集合进行有序排列。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;
封装性,即尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限,这意味着使用一个对象时不需要考虑其内部构造而只需要知道它的功能与使用方法,这避免了需要重复使用一种对象时的多余思考。
继承性使得一个抽象类的不同子类之间可以用同一种方法描述,同一种规则来管理,并且使软件的功能可拓展。
多态性使同一种方法可以处理多种情况,这为我们再次使用它时提供了极大的便利。
③作业过程中遇到的问题及解决方法
正则表达式遇到了众多问题,对于不限数量的同一格式匹配简单,但当分割时会丢失分割字符,导致后面还要看各种因素追加字符。(这一部分是最掉头发的)比è内¾ƒè¾“入的é容ªŒè¯ç 和实际生æˆçš„验è¯ç 是å¦ç›¸å
④每次作业花费的时间比例
写代码和调试时间成1:3比例,有时候觉得之前的思路不行就重写代码,但总是拿捏不好这样做是否合适。比è内¾ƒè¾“入的é容ªŒè¯ç 和实际生æˆçš„验è¯ç 是å¦ç›¸å
⑤对编程过程的严谨性的认识及教训
- 在调试过程中常常会因为一个错误导致整个程序停止运行,而这在客户端上是难以容忍的,尤其是当用户正在进行重要工作的时候。因此错误处理显得至关重要,将可能出现错误的代码“收容”起来并作出具体处理是必要的。
- 定义一个类时应先抽象后具体,由简到繁。
- 编写方法时,先考虑具体入微的算法,做到能稳定运行,得出正确结果,然后再进一步简化。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
封装性为单一职责原则的直接体现,也是“对修改关闭”的基础,这使得调试时能够更好地找到错误源。(就像工作出错时优先找负责人一样)
继承性和多态性是对“拓展开放”的基础,这使得一些附加功能可以在不改动源代码的情况下添加进去而不影响原先的代码运行。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
单一职责原则将原本复杂的工作分担给不同的小单元,让它们各自专注于做一件事,而不需要担心因为一个错误导致全体崩溃。
“对拓展开放-对修改闭合”,就是让新的功能有位置可以添加,而阻止对软件的恶意修改,以免运行出错误结果。
③OO编程思维的理解
相比较面向过程的一个函数干到底,面向对象是更大的封装,根据所需功能在单一对象中封装多个方法。在完成某一个需求前,首先确定职责,即“要做的事”,然后将职责划分给不同的对象,在对象内部封装多个不同的方法。最后完成代码,让不同的对象按一定顺序调用不同的方法。
④类设计心得
先抽象后具体,当编写多个具有相同性质的类时,先把它们的共有方法写进抽象类,然后再逐个编写具体类的具体方法。
3.测试的理解与实践
①测试对于编码质量的重要性
编码的价值在于其能实现的功能,而测试则是确保其功能在给定情况下能够正常运行。
②查阅资料,假设使用Junit进行程序的测试是否可行
不完全可行,如果要测试已知结果的过程,这可行。例如测试1+1运算结果是否正确,因为我们知道正确结果是2,所以可以根据正确结果来判断程序是否有误。但如果要测试未知结果的过程,这不可行。例如测试一个天气预测的结果是否正确,由于我们不知道100天后的天气是什么,所以无法判断程序的结果是否正确。
4.课程收获
对OOP三大技术特征的学习,算是正式踏过了这门课程门槛。在此期间,锻炼最多的是抽象思维、其次是创造性思维。(感谢作业指导书)
5.对课程的建议
①第三阶段作业难度、题量的建议
难度曲线不够友善,例如第五次作业第一题就难倒了许多同学,我一开始也是不知道怎么写,后来才稍微学到了一点。我觉得这种题目应该放到后面,而不是第一题,这可能会造成挫败感、打击学习积极性。
其次是总结性作业硬性要求字数多,会“逼迫”同学去想方设法凑字数。
关于题量,我个人感觉稍微有点多,需要很多时间调试。比è内¾ƒè¾“入的é容ªŒè¯ç 和实际生æˆçš„验è¯ç 是å¦ç›¸å
②课程内容讲解方面的建议
我觉得老师可以讲讲算法、软件行业里的趣事以及过去人们遇到的问题和解决办法。