面向对象课程总体总结

面向对象课程总体总结

0.   前言

本次博客为面向对象课程学习的最后一次博客作业,也可能是最后一次作业。故本次博客主要内容为总结面向对象课程学习中遇到的困难及收获。由于第三阶段作业对我个人来说是跃向面向对象思维的一大步,故本次博客中也会提到。

1.   作业过程总结

首先是第一阶段的三次作业,这一阶段的作业结构性要求不强,迭代性主要体现在作业的难度上,第一次基本上全满分,第二次则不到50%满分,第三次则不到25%。这也着实挺好,之前C语言课程的题目都太简单了,搞点难题让大家走出舒适区其实还不错。第阶段的几次作业则在难度上高了许多,也是第一次让我感到难办的作业,第一次,使用正则表达式去处理水文数据,那次的类图就让我直接看不懂了,处理算法方面我花了1天,搞懂老师画的类图就花了好多天,我那几天着实吃不好饭,最后还是求助老师,得知可以自行完善程序的结构,我才得以写完。第三阶段则是面向对象课程末尾的作业,此时我们已经学习了很多面向对象的知识,了解了几个设计模式,继承,接口,多态这些面向对象的特性都已经学了,我已经可以写出具有拓展性的程序了,但此时又出现了一次很难的作业,“java关键字统计”,据我所知,在段老师这个班,只有两名同学写出来了,确实有难度,难度主要体现在自身对java代码不够了解,枚举出的错误关键字种类不够全,导致通过人数惨不忍睹。就算具有了一些面向对象思维,算法和代码了解度还是不足,人嘛,总是有不懂的东西的,学无止境。

 

2.   OO设计心得

在课程的后期,老师讲了几个简单的设计模式,其中我印象最深刻的就是工厂模式,因为我在讲课之前的几次编程,就是用了类似工厂模式的方法,使得程序,通过继承抽象类,并加以多态技术特性,使得程序的可拓展性提升。本门课学习的重点是面向对象的思维,我一开始没有察觉到这一点,但学习过程中一次又一次的挫折迫使我意识到这一点,就比如说一次作业,随机生成一种图形,这三种图形显然是不同的类,如果不使用面向对象中的多态性,而用简单的if else 结构去解决问题,代码行数将会超过50行,而如果使用多态去编程,一行就能解决问题。在”写题目-发现很棘手-试着用面向对象思维思考问题”这种一次又一次的循环中,我逐渐的发现了面向对象的编程的好处,也领会了一些面向对象思维。

3.   测试的理解与实践

   在整个学习过程中,要完成作业,都要进行测试,可能是水平原因,本人没有一次作业是提交一发就满分的,每次都是经过了好几轮的测试-改bug才得以满分。不得不说的一点是,和竞赛不同,作业当中的测试点是会标出测试点主要测试什么内容,这一点其实降低了作业难度,但也给了我学习的机会,就是学着这样思考,使得后来几次的作业编码时,自己就抓住了很多测试点,有好几次都是一提交过了80%,然后看着改一改,就过了。思考总是有欠缺的,Junit测试工具起作用也是建立在自己想得出测试样例的基础上,想要100%的测试正确,只有从代码的严谨性和思维的开放性入手。此外,可以通过csdn或者是baidu上的一些正确算法,得到的结果与自身的结果作比较,这样也能起到一定的寻找问题的作用。

4.所学&所得

   本次面向对象课程使用的是java语言,也学习了正则表达式等软件,学会了使用专业的正则表达式检验软件进行测试,以及专业的UML类图绘制工具进行类图的绘制,使得程序的结构是面向对象的。也学习了JavaFX这种UI制作工具,学会了制作一些简单的UI界面。

  作业对自身的学习是有好处的,本门课程的学习也是如此,用作业驱动学习的方法学习面向对象思维。这个过程会有难度,但人的存在本就是为了挑战的,我在这个过程中也感到了非常的不适,丝毫没有学习使我快乐的感觉。

惨不忍睹的作业通过率

 

 

 

 

令我最痛苦的一次作业,通过率也是惨不忍睹

 

 

 

这个过程是非常艰难的,即使用非常用心去了学习,也不可能像高数,线代 一样看完了书,老师布置的题目基本上就会做了,这些在这门课是不可能的。正因为如此,我也很欣慰,我这门课是花了很大心思去学习的,我也能感受到我学到了很多新东西。唯一我觉得遗憾的是我尽管每次作业,我都拿到了平台上显示的100分,但我之前被判抄袭,使得所有作业成绩减去了50%,我还是可能会挂科又或者这门课分数很低,本来费尽心思去争取的奖学金可能也没了。

  说完本门课的培养方法,我们回到本门课的重点,面向对象编程的思维。首先是面向对象的一些概念:对象,继承,封装性,接口,解耦,单一职责原则,封装性,多态等,这些是在学习过程中遇到最多的东西。我现在最让我印象深刻的还是抽象类、继承、多态,因为他们让我写代码的过程便捷了很多,省去了许多不必要的代码。

  与此同时,我还了学会了java这门语言的一些操作,java封装好的一些数据结构以及高效算法,使得编程过程更加便利,不用自己再去造轮子。在pta的520大赛中,有一题是关于大数运算的,如果用c语言来写,我可能要自己去定义大数的加减乘除,然而这些在java当中都是封装好的东西,直接建一个BigInteger类就能用。以及排序的算法,java里只需要重写比较器就可以进行对类的排序,且排序的算法还都是高效算法。Java语言支持的库众多,又比如最后一次作业的表达式求值,如果没要求一定要自己造轮子的话,其实直接调用JavaScript的库,几句话就能求出结果,还省去了大部分的测试,改bug的时间。在课程的学习过程中,我对java这门语言的看法逐渐从,运行比C语言慢过渡到功能强大,且是面向对象的语言,可以减少很多不必要的代码。

5.对课程的建议

第一,由于疫情导致的很大部分课程都是在家里进行的,感觉学到的东西很少,翻了一下发的课本,还是有很多内容没有讲到的,这些内容有些还是非常有趣的部分,比如网络爬虫。我觉得很多人都还不知道java可以做这些事,上课的时候可以多提提,或将这部分内容放到网上,让学生自学。第二,我觉得放养式的教学方式对基础不怎么好的学生不友好,每次作业都开放了讨论区,但每次还是很多人完不成作业,去除一部分真的不在乎的,也可能有一部分是自信心受到打击的呢。第三是我觉得可以增强的点,就是全阶段的作业,每次都是机测,依靠pta的评测机进行测试,如果可以的话,可以增加一个功能,就是让同学来hack其他通过同学的代码,比如学生可以提供正确的测试样例,单独调出某一通过同学的代码进行测试,如果成功hack掉这位同学的代码,这位同学要加分,而那位同学的代码要重新进行修改,直至通过。这样我觉得可以提高测试能力,提升编程能力。

最后,希望通过一系列改进,课程能更贴切学生,也希望之前那次其他班学生大规模蹭我们班上的课的情况常常出现。

 

posted @ 2020-06-10 19:17  logan996  阅读(226)  评论(0)    收藏  举报