一、前言
本学期的Java面向对象程序设计课程采用的是线上课和线下课结合,同时通过PTA作业,实验,Blog将理论与实践相结合的模式,让我们较为系统地学习并掌握面向对象编程的核心思想和技术实现。
首先,本门课程通过学堂在线的线上课程达到一个预习与知识补充的效果,然后通过线下课程对知识进行更加具体详细的讲解,一段时间之后便开始了PTA平台上的各种习题,这是这门课程的主体部分,一般是一个星期一次,题量三到五题不等,任务量因题目难度而变,一般较为适中,难度则是根据学习阶段和题目考察的方向变化,比如之前考察的电梯调度程序考察的是算法,后面的航空货运管理则更倾向于考察我们对类的设计,要求我们符合面向对象程序设计的思想,总体难度递增,之后还有就是本门课程的实验动物装进电器中,总共五个,都是在上一次实验上进行迭代,平均六到八个学时,难度适中,然后每次的PTA迭代性大作业都会有Blog作业来对之前几次的作业进行整理复盘,我觉得这是相当重要和实用的,可以让我们对知识进行比较系统的梳理,形成结构化认知,对所学内容碰到的错误进行复盘。
整体而言,本门课程的工作量安排和难度层次都较为适中,达到了理论与实践相结合,较为系统和全面,能够让我们对面向对象程序设计思想有较为深入的理解,收获诸多。
二、面对对象技术总结
封装
首先封装作为面向对象的基础原则,一直贯穿于这个学期,几乎每次的PTA作业都会得以应用。首先我是从线上线下课初步了解学习了封装思想,然后通过做题加深理解。比如在电梯调度程序三次迭代作业中,第一次作业就对封装运用不够熟练,很多地方只是对功能进行实现,并没有通过多个类对其进行封装,不符合单一职责原则,所以后面的第二次作业,我学会把电梯的状态和行为单独封装在一个类内部等等。这样设计可以有效防止了外部对对象内部状态的直接修改,提高了系统的安全性和健壮性,同时代码可读性也更好,因为是迭代作业这样还可以节约工作量。航空货运系统中,通过将货物的信息和计费逻辑单独进行封装,实现解耦合设计,当计费规则变更时,只需修改相应类而不影响整个系统。
继承
继承是面对对象编程的非常重要的思想概念,继承概念其实挺好理解,最为典型的例子我觉得就是当时老师课上讲的Shape图形类,其子类可以是Circle圆形,Rectangle矩形等等,后面的PTA里面的点线面问题还有实验里的Animal类作为大象,老虎和狮子的父类等等也都能够很好体现继承思想。通过继承,我们可以减少很多重复的代码,通过继承父类的从而无需再在其子类当中重新定义共有的属性方法等等,同时继承还可以提高代码的可扩展性和可维护性,这是尤为重要的,有了继承,我们可以更加方便的添加新功能,且代码会变得便于修改,同时代码的可读性也会大大提高。而且,继承是实现多态的基础,有了继承才便于我们去使用多态。
多态
多态同样也是面对对象编程的非常重要的概念,多态允许使用父类类型的引用来指向其子类的对象,并通过父类的接口调用方法。这样的话,编写代码就可以不依赖于具体的子类类型,而是依赖于父类的通用接口。比如说我们实验的Animal类有shout方法来表示动物进入电器后的叫声,通过多态我们就可以引用Animal类型的方法,而无需知道具体是大象,老虎还是狮子对象。这样做的好处有很多,可以增强代码的可扩展性,可维护性,提高代码的灵活性可读性和解耦合。
抽象类和接口
抽象类和接口,从一般命名中看,抽象类一般作为名词,和子类呈现一种“is”的关系,而接口则一般命名形容词,可怎么的,和子类呈现一种“can do”关系,更倾向一种行为关系。抽象类只能够单继承,而接口允许一个类实现多个接口,从而支持多继承的特性,这样使得类可以同时具备多种行为而不破坏单一继承规则。比如Comparable接口定义的compareTo方法,还有航空货运管理系统中对支付方式的类定义,下面子类AliPay支付宝支付,WeChatPay微信支付还有CashPay现金支付等等。抽象类和接口促进了代码的复用,提高了代码的可扩展性,可维护性,解耦合等等。
集合框架
集合框架是一组工具集合,可以极大的简化一些操作,提高代码可读性,可维护性和复用性。这个学期中也多次用到了集合框架,比如在电梯调度程序中使用LinkedList管理请求队列,通过一些比如add(),remove()等等方法,便于对电梯内部成员进行增删改查操作;还有图形计算面积的作业中通过ArrayList存储形状对象,并应用Collections.sort()实现排序,通过这些习题,我们较为深刻的理解了集合框架的好处和不同集合类型的适用场景。
异常处理
异常处理是课程比较后面学的,它是通过捕获和处理异常,使得程序可以在遇到错误的时候继续运行,而不是直接就崩溃。通常有文件找不到FileNotFoundException数组越界ArrayIndexOutOfBoundsException空指针引用NullPointerException等等,通过处理异常,这样就可以便于找到是哪一部分出错,便于调试和维护。
JavaFx技术
JavaFX作为课程引入的GUI技术,通过我们自行通过互联网学习,并且在课堂上进行知识分享,这个机会是我们比较缺少的,所以体验上还行。通过阅读课本然后上网上csdn还有听别的同学分享等等方式,我初步的学习了解了JavaFx的一些基础知识应用,我学习了如何使用 JavaFX 创建窗口、布局组件、添加事件监听器,对事件监听处理等等。但是,由于教学时间比较少,然后内容又非常多,所以虽然现在能够完成一些简单的界面设计,但实现复杂交互和界面美观优化等方面,我还存在很多不足,需要进一步学习和探索。
踩坑心得
在本门课程的学习过程中,我走过不少弯路,同时也积累了宝贵的经验教训。刚开始学Java的时候,由于还没从C语音面向过程适应过来,我对代码的编写还是停留在功能的实现上,所以最初的几次作业的类结构上设计的不好,这一点在之后的迭代性作业上得到了狠狠的教训。后来又是在继承多态抽象类那里碰到了问题,什么时候使用继承,什么时候用抽象类还是用接口,两者之间有什么区别,还有子类要实现接口功能等等问题。另外,在处理集合框架和异常处理时,我也遇到了一些问题,比如什么时候用ArrayList什么时候用LinkedList,他们的优缺点等等。还有在捕获异常时,使用了过于宽泛的异常类型,使得程序无法准确处理具体的错误。通过这些教训经验,我对面对对象设计的理解更加深刻,同时让我对于一些报错不再感到害怕,能够去处理一些问题。
改进建议及总结
课程内容总结
本学期的Java面向对象程序设计这门课程为我面对对象编程打下了良好的基础,让我以后不管是学习C++还是Python等都有一个较好基础。本门课程,由易到难,线上线下课程并行,理论和实践相结合,题目任务量适中,难度也有难有易,整体综合性来讲很棒,让我收获很大,学到了很多。最为精华的我觉得就是迭代性大作业加上之后的博文Blog总结,让我从刚开始太难了不想写到后来也能够成功完成并且一次次的收获新的知识,这种成长成就感能帮助我们学习知识。
改进建议
首先就是我觉得线上课程讲的内容太少了,一个是对课程知识讲的太浅了,很多就是简单的提了一下,这样压力就给到了线下课程,如果我某一次课程我的状态不好,可能听课效果不佳,课后想补就会比较麻烦;
再一个就是其实可以多一些课外知识的补充视频,比如线上课的正则表达式,我觉得还可以加上lamda表达式等等作为拓展;
然后,建议老师在课堂上增加更多的互动环节,比如分组讨论等,鼓励大家积极参与,营造更加活跃的学习氛围;
另外,虽然我们作业有PTA的大作业还有实验,但是对于那种选填考察基本常识的题目训练还是比较缺少的,希望老师可以在线上布置一些相关的常识性小题目给我们;
还有就是学校的实验提交系统我觉得有点简陋了些,刚开始有一些bug,比如我前面写了中文,后面即使我的输入法切换了英文后面还是中文输入法,而且字体又小,后面的报错改起来也麻烦,所以希望优化一下实验提交系统;
最后在此感谢一下老师的教导,老师辛苦了。
浙公网安备 33010602011771号