前言
第一次作业的水文数据校验及处理我个人认为难度很大,我觉得主要原因是对正则表达式的用法不怎么了解,其他的题目倒比较简单,例如第二题只要了解什么是蒙特卡罗方法以及其用法就行。第二次作业总体来说难度没有第一次那么大,但是对于细节要求比较高,特别是第二题的一元多项式求导,对很多细节把控不到位,但是所需的正则表达式没有第一次作业难度那么大。第三次作业总体来看难度比前两次要低点,只不过需要使用接口的知识来进行答题。其中,第三题的素数,对算法有点要求其他的倒没有什么问题。
作业过程总结
①第一次作业的主要内容是有关正则表达式的,而第二次作业在第一次作业的基础上多了多态和继承的知识点。而多态又是基于继承这个知识点的。第三次作业主要是有关接口的使用。然后要区分接口和抽象类的区别。
②在作业中慢慢体会封装性、继承性与多态性三大技术的特性,以及要自己思考怎么将他们结合在一起使用和在各个场合的使用情况。
③我感觉最大的问题就是第一次作业的正则表达式,因为对细节不是很熟,而且也是真正意义上的第一次使用正则表达式,所有导致开始时,年份校验的正则表达式都写不出来的情况。解决办法:通过查阅各种资料,找到相关的解决方法完成的。
④第一次作业花了很久很久,主要是因为第一题的水文校验,写了好几天还是没有写出来,其他两次作业花的时间倒不是很多。比例:6:3:1
⑤对编程过程的逻辑严谨性的认识及教训。首先是认识,我认识到逻辑问题是非常非常重要,同时也是非常非常难处理的问题。因为逻辑问题通常无法直接看出,而且逻辑错误的代码通常情况下也可以正常运行。所以只能靠debug来逐步调试。所以逻辑的严谨性非常非常重要。再是关于教训,教训就是让我在简单的问题上浪费很多时间,但是也让我更加收悉的使用debug,众所周知,debug是程序员必备的一项技能。
OO设计心得
①封装:减少了大量的冗余代码,封装将复杂的功能封装起来,对外开放一个接口,简单调用即可。将描述事物的数据和操作封装在一起,形成一个类;被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏了对象的属性和实施细节),私有属性和方法是无法被访问的,表现了封装的隐藏性,增加数据的安全性。
继承:单根性,传递性减少了类的冗余代码,让类与类之间产生关系,为多态打下基础。
多态:一个接口,多个方法。通过继承实现的不同对象调用相同的方法,进而有不同的行为。
②单一原则,即一个类应该只有一个引起它变化的原因。即每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。我认为这个单一原则就是每一个类,即对应的每一个实例对象他的职责是单一的,不要出现一件事一堆“人”去做,这样很乱。
开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。我对这个开闭原则的理解说实话其实不深,我认为开闭原则就是不要去修改自己已经测试好的类,模块和函数,因为你如果修改了已经完成测试的软件实体,你就需要将与之相关的所有代码重新测试,这样很麻烦,而且还容易出错。
③我对OO编程思维的理解就是,在解决一个问题时一定要分工明确,不要出现对象之间有职责重叠的情况。而且要明确对象的使用方法。
④对于类,我认为应该先明确分工,即先确定需要那些类,如果这些类中,每个类的具体需要完成的功能是什么,所具备的属性是什么,然后在逐步细化,一个个功能逐渐完成。
测试理解与实践
①测试对代码质量而言非常重要,无论是从代码的运行时间来测试或者是从代码的运行所需空间来测试,通常情况下,一段高质量的代码对空间,时间的利用率都比低质量的代码高,这种差距会随着数据变大而越来越明显。同时测试还是使代码尽可能的减少bug的出现,例如在特殊情况时的数据
②使用Junit进行程序的测试是可行的。
课程收获
教训:这在这几次作业中,有时候还是会使用面向过程的编程方式来答题,虽然可以成功的解决问题,但是对我们面向对象编程的理解和运用不利。
收获:通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性,而通过分析封装性、继承性与多态性三大技术特性在日常生活中解决问题的便利性,也让我逐渐体会到对面向对象的继承,多态还有代码的复用性等思想的巧妙。
对课程的建议
①我个人建议难度可以稍微大点,题量少点,这样可以花更多的时间自己专研一些不懂的知识,我认为自己自学掌握的知识才更牢固,特别是带着问题去学习的时候。
②老师课上能够结合具体实例来向我们讲解面向对象的各种思路和特性,同时希望老师能够多细致地讲一下每次的作业,毕竟不是所有同学都能够全部实现测试点,也就是对细节的处理。