前言:
java课程的第三阶段即将结束,本次博文将重点介绍整门课程的学习体会、对面向对象的理解并简单总结一下java课程最后一阶段的作业与学习情况。
1、作业过程总结:
①第三阶段的三次作业:
第一次作业:雨刷程序功能扩展设计,需要做到在给定的汽车手动风挡玻璃雨刷程序的基础上,对程序进行重构(Refactoring),使得程序可以对功能进行扩展,即需要做到面向对象课程的“开-闭”原则。
第二次作业:统计Java程序中关键词的出现次数,本次作业主要考察对List、Set、Map以及正则表达式的应用和算法效率的考察。
第三次作业:表达式求值,使用stack编写程序,从键盘输入一个合法的表达式,对该表达式进行求值并输出,主要考察对stack和类的设计。
②通过作业逐步理解面向对象:
通过第一次作业在原有的代码上修改程序,体现面向对象的可扩展原则,即“开-闭”原则。第二次作业更多的是考察对List、Set、Map和正则表达式的应用以及对代码速率的思考。第三次作业是考察是否能够设计简单的面向对象的类与编程。
③作业过程中遇到的问题及解决方法
第二次作业,对List、Set、Map不同情况下的速率的比较没有清晰的比较,导致所写的代码没有达到速率的要求。经过多次的尝试比较找到了一种较快的方法,但是没有系统的比较。
第三次作业,我对类的设计与面向对象的基本原则没有到达要求,无论是单一职责原则还是“开-闭”原则都没有在自己的代码中得到很好的体现,这也是这次以后学习的方向。
④每次作业花费的时间比例
⑤对编程过程的严谨性的认识及教训
在编写代码的逻辑的严密性还是具有问题,在第三次作业下的表达式求值中,忽略负数,和符号的优先级的问题导致作业时间的加大,以及在分类时的不熟悉导致编写代码多次大规模修改。
2、OO设计心得:
通过三个阶段的学习,我认为面向对象的编程思想是抽象,将一个个具体的对象和问题抽象化成一个具有相同特性和行为的对象的抽象的类,增加代码的通用性、维护性、可扩展性等等,与C语言相比,C语言的结构化设计方法将审视问题的视角定位于不稳定的操作之上,并将描述客体的属性和行为分开,使得应用程序的日后维护和扩展相当困难,而面向对象思想的思维方法让代码的可读性和维护性都得到了非常好的提高。但是具体到实际的问题时,类的设计又是一个十分复杂的问题,要想编写出一个优秀的代码,做到代码的封装性、复用性(健壮性)、多态、继承、抽象类、接口、单一职责原则、“开-闭”原则等编码要求又显得难度较大,这也是我接下来学习的方向和努力的地方。简单的语法可以快速的学会,但一个语言的思维却是需要长时间的积累与实践
3、课程收获:
通过三个月的学习,我的收获:
①面向对象的编程思维,即将构成问题的各个事务分解成各个对象,与上学期所学习的C语言的思维不同,不再是将一个系统被分解成若干个过程,再一步一步来实现。
②程序的封装性的重要性:将一些数据和代码设为私有,仅仅提供一个接口供其使用,不仅简化了使用者在使用中的复杂性,更是使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。
③代码的复用性:更新程序对于软件来说非常常见而且频繁,如果每一处更新都需要将代码重新进行改变,将是一个及其危险且复杂的问题,在面向对象的思维方式中类的设计对于这个问题提出了较好的解决方法,即增加代码不改变原先的代码,却可以实现方法的增加。
④继承、多态、抽象类、接口、聚合、依赖等等:在C语言中之前学习的过程中没有对类与类关系的学习,而面向对象对于继承、多态等类与类之间关系的介绍,提高我对处理问题方法的增加。
⑤单一职责和“开-闭”原则:如何实现在处理一个问题是用过面向对象的方式正确的实现,不仅仅要处理好类内部的属性和方法,其中类与类之间的关系也是需要正确编写的。优秀的代码不一定是类与类之间没有任何聚合性,虽然那也不可能,在不同的需求下我们的代码对单一职责在类之间的关系有所不同。
4、对课程的建议:
通过短短的三个阶段的学习,关于本课程最大的学习困难不再是一开始关于java语法的学习了,更多的是关于面向对象的思维的锻炼和培养,并且我自己在这方面的学习还具有较大的漏洞。所以我建议该课程的学习课时应该加长,不仅仅要学习java的语法,更要对面向对象的思维加以锻炼。