OO课程学期总结
OO课程学期总结
〇、前言
经过一整个学期的学习,这一门面向对象编程(Java)课程也已经接近尾声。在老师的带领和同学的帮助下,我从一个非常菜逼的程序员变成了一个菜逼程序员,不过,正如我第一篇随笔所写的,比起编程能力的提升,私以为思想上的改变才是更重要的——面向对象不仅一种编程方式,更是一种思维方式,相信这种思想上的提升会使我余生都受益匪浅。
当然,我并不是说算法的钻研和代码量的积累不重要,正所谓思想决定高度,高屋建瓴总是要比集腋成裘来得轻松。
一、学期作业过程总结
纵观整个学习的PTA作业和实验作业,单次作业中类的数量越来越多,类间关系也越来越复杂,可得益于面向对象高复用性和可移植性,实际上的代码量并没有很大的增加,可虽然如此,但是所花费的时间并没有减少,原因在于对于类、类间关系、类的调用方式的设计和铺陈的要求越来越高,其过程也越来越复杂。
三个周期的学习下来,我基本掌握了类和对象的声明、创建、使用和重载等基本操作,然后是继承和多态的基本概念和各种使用方法,接下来便是抽象类和接口类的区别和各自的调用形式,再往后便是有关异常和JavaFX的学习。另一方面,还有穿插其中的字符串、正则表达式和java中的一些数据结构如HashMap、Array List等的使用方法。就我个人感觉而言,本课程的广度不错但深度有待扩展(不过这可能是因为专业要求不同吧)。
三个作业周期中,第二个周期对我而言是最有难度的。在这个周期中,我经历了简单UML类图到复杂UML类图、有UML类图到无UML类图的两次挫败。这让我意识到了我的面向对象的思想并不够坚定和强烈,带来的后果就是在对整个项目进行规划设计时思路不够完善和紧凑甚至出错,也就是所谓的整段垮掉,其具体体现在于无法理解复杂UML类、设计出来的UML类图和面向过程的写法并无二样。不过幸好,经过反复思考和寻求他人帮助后这一方面有了不小的进步。
到了后期,我逐渐接触到java中的各种数据结构,留给我最深印象的就是java中极其简便的操作。类似的,还有界面编程Java FX,让我更深刻地体会到java对于类的封装会带给实际编程乃至应用到硬件层面多少便利性(当然这是以牺牲时间和空间为代价的)。尤其是在了解到Java FX之后,这种通过转变思想带来的另一维度的对编程语言的优化带给我的震撼更是无以复加——原来写代码可以像拼积木一样直观且有趣!
二、学期以来的对于OO编程的理解
最重要也是最基本的一点:必须严格遵守面向对象编程的七大原则:开闭原则、里氏代换原则、迪米特原则(最少知道原则)、单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则。
面向对象和面向过程只是代码的两种组织方法,就好比建造一幢大厦是选择一颗沙一粒石地浇筑(机器语言)、一方砖一块瓦地砌起(汇编语言)抑或是一根柱一堵墙地黏合(面向过程编程语言)甚至是一层楼一层楼地垒起(面向对象编程)。既然选择了封装程度最高、最方便却也最不稳妥的建造方式——面向对象编程——那就要非常注重整体结构的稳定性、各个部件的安全性和部件间组合方式的可靠性,也就是说在编程过程中必须对程序的整体脉络有清晰的把控(UML类图的设计)、对类的设计必须遵循几大原则以及在调用类时严格遵守抽象类和接口类等类间关系的编排规则。
另一方面,得益于Java边编译边运行的特点,善用Debug功能可以帮助我们及时发现并纠正编程过程中的逻辑错误,通过设置不同的断点便可以高效地找出错误之处,并且在使用Debug功能中,能让我们对程序的逻辑脉络有更清晰直观的感知。
以上便是我这一学期以来编程过程中体会最深刻的两点,也可以说是于我个人最深刻的亮点所在吧。
三、课程收获
课程收获最主要是编程能力的提升。虽然几乎每次大作业都让我抓耳挠腮焦头烂额,但是在这么密集的代码量施压下,我的编程能力有了显著的提高,但是和真正的大佬比起来还是有不小差距的,我认为这部分差距主要在于缺乏有关算法的训练,日后一定要多注重这方面的积累和训练。还有就是因为课堂的节奏偏快,无法做到面面俱到,因此对于我的自学能力和时间管理能力也是一次不小的考验。还有就是现在正在写的博客总结作业,只要每次都认真对待,这种定期回顾已学过知识的习惯还是非常有意义的。
四、课堂建议
首先在这样一个特殊时期,Java课是我认为唯一一门极其适合线上教学甚至其效果可能比线下教学还要好的课程,能让我们非常清晰地观看老师的演示和讲解,加上一定的互动,效果可谓是非常理想。另外,在作业驱动、实验驱动的模式下,我们会自发地去学习相关知识,而不是老师喊一嗓子我们才走一步,这样的学习模式我觉得十分适合现在这个学习资源随手可得的信息时代,而且没有了期末考这种应试教育的产物,能让我们更加专注于专业技能的培养而不是为了考试去通宵背题库——当然前提这正是一门技术实践型学科而不是理论研究型学科。总之就两个字,满意!
五、最后再扯点什么凑个字数
一个学期下来,这门课程给我打开了一扇新的大门,但同时也打开了很多扇紧随其后通往未知的小门。学得越多越觉得自己渺小,毕竟人作为存活在知识海洋中的一个生物,永远都无法窥得知识的全貌。我所学的专业以后也许不一定用得上多深奥的Java知识,但是这门课程给我带了一个全新的、可能的方向,在我的求学迷雾中亮起了一丝微弱的光,这就足够了。
面向 对象 编程。