面向对象程序设计课程总结
一、前言(课程整体概要性总结)
在完成这一学期的 Java 面向对象课程学习后,我对编程的认知和实践能力都有了提升。总的来说这学期的课程还是挺充实的,通过 Blog 作业、PTA 作业、实验、线上课程以及线下课程等多种形式,一步步引导我们掌握面向对象编程的技术与知识。
(一)Blog 作业:
Blog 作业主要是对PTA作业和这一阶段学习的总结,是一个反思不足和不断学习的过程。总的来说,工作量并不是很大,但第一次写的时候,看见“不得少于3000字”,还是有点"头大"。
(二)PTA 作业:
PTA 作业的内容与每一阶段的学习内容相匹配,帮助我们更好理解课程内容、知识。总的题目集并不是很难,题目量也不是很多,但有三次作业是个例,三次电梯算法是多少人的噩梦。
(三)实验:
实验主要围绕“大象装入冰箱”展开,一次次的迭代,从前四次的程序内容完善到第五次的GUI界面,实现了从代码到程序的具象化过程。实验的总体难度是不大的,主要考查个人的设计能力。
(四)线上课程:
线上课程算是对课堂内容的一些补充,对我们学习还是很有帮助的。
(五)线下课程:
线下课程则是学习的核心场所,帮助我们更好掌握这么课程,老师通过课件、代码和实例为我们讲解面向对象的设计思想和知识。
二、面向对象技术掌握情况总结
(一)三大特征:封装、继承与多态
1.封装
封装是面向对象编程的重要特性之一,它将数据和操作数据的方法封装在一起,隐藏对象的内部实现细节,只对外提供公共的访问接口。在 PTA 作业中,我通过定义类和成员变量、编写访问器方法(getter 和 setter)等方式,深入理解了封装的概念和作用。
在学习过程中,我掌握了如何合理地对类的属性进行封装,以保证数据的安全性和一致性。在设计航空货运管理系统时,将客户、货物和航班的属性封装起来,通过 setter 方法进行合法性验证,避免无效数据的录入。通过实际编程,我认识到封装不仅提高了代码的安全性,还增强了代码的可维护性和可复用性。当需要修改类的内部实现时,只要保持对外接口不变,就不会影响到其他使用该类的代码。
然而,在复杂的程序中,我有时会出现封装过度或不足的情况。比如,将一些本应提供给外部调用的方法也进行了过度封装,导致在其他类中无法正常使用;或者对一些关键属性的封装不够严谨,没有充分考虑到数据的边界条件和异常情况。
2.继承
继承是实现代码复用的重要手段,它允许一个类继承另一个类的属性和方法,从而减少代码的重复编写。在课程学习中,我学会了如何定义子类继承父类,以及在子类中重写父类的方法和添加新的属性和方法。
在设计魔方问题和图形卡片游戏时,定义一个抽象的图形父类,包含计算面积和体积的抽象方法,然后让三角形、矩形等子类继承图形父类,并实现相应的计算方法。通过这种方式,不仅实现了代码的复用,还体现了面向对象编程的层次结构和分类思想。
在学习继承的过程中,我也遇到了一些问题。比如,在子类重写父类方法时,容易忽略方法的访问权限和参数列表的一致性要求,导致编译错误。另外,在多重继承的模拟实现(通过接口)中,对于接口中默认方法的使用和冲突解决,理解还不够深入。
3.多态
多态是面向对象编程的核心特性之一,它使得不同类型的对象可以对同一消息做出不同的响应。在课程中,我通过方法重载和方法重写两种方式理解和掌握了多态的概念和应用。
在编程中,经常会遇到需要根据不同的参数类型或数量实现不同功能的方法重载问题,这让我深刻体会到方法重载在提高代码灵活性方面的作用。而在实验项目中,通过子类重写父类的方法,实现了基于动态绑定的多态性。在动物进入电器实验中,不同的动物继承自一个抽象的动物类,并重写了叫声方法,在运行时根据动物的不同调用相应的叫声方法,实现了多样化的叫声。
虽然对多态的基本概念和应用有了一定的掌握,但在复杂的继承关系和多态场景下,有时会出现类型转换错误和方法调用混乱的情况。比如,在将父类对象转换为子类对象时,没有进行有效的类型检查,导致运行时出现 ClassCastException 异常。这说明我在多态的实际应用和异常处理方面还需要更多的经验积累。
(二)抽象类与接口
1.抽象类
抽象类是一种不能被实例化的类,它通常包含抽象方法,用于为子类提供一个公共的接口和实现框架。在课程学习中,我通过定义抽象类和抽象方法,以及让子类继承抽象类并实现抽象方法,理解了抽象类的作用和应用场景。
在期中考试王者荣耀伤害计算游戏中,定义一个抽象的伤害计算类,根据不同的角色的属性值,实现计算英雄剩余血量。这样,通过抽象类可以将具有共性的行为和属性进行抽象和封装,提高代码的抽象程度和可扩展性。
在使用抽象类的过程中,我有时会混淆抽象类和普通类的区别,在不应该使用抽象类的场景下错误地定义了抽象类。另外,对于抽象类中抽象方法和非抽象方法的组合使用,以及抽象类与接口的选择,还需要进一步加深理解和把握。
2.接口
接口是一种特殊的抽象类型,它只包含常量和抽象方法的定义,不包含方法的实现。接口用于实现多重继承的效果,使得一个类可以实现多个接口,从而具备多种不同的行为和功能。
在动物进入电器实验中,我学会了定义接口和实现接口的类。在实验中,定义了Aggressive接口,让动物类实现该接口,以此进行攻击,判断攻击性以及吃动物的操作。
然而,在接口的使用过程中,我也遇到了一些问题。比如,在多个接口中存在同名方法时,实现类如何正确处理方法的实现和冲突解决;以及接口的版本控制和扩展问题,当接口需要添加新的方法时,如何保证已实现接口的类不受影响。这些问题都需要我在今后的学习和实践中进一步探索和解决。
(三)集合框架
Java 集合框架提供了一组丰富的接口和类,用于存储和操作数据。在课程中,我学习了 List、Set、Map 等常用集合接口及其实现类,如 ArrayList、HashSet、HashMap 等。
通过学习,我掌握了如何根据不同的需求选择合适的集合类型。例如,当需要有序存储元素且允许重复时,选择 ArrayList;当需要存储唯一元素时,选择 HashSet;当需要存储键值对时,选择 HashMap。同时,我也学会了对集合进行添加、删除、遍历等基本操作,以及使用迭代器和增强型 for 循环遍历集合。
但是,在集合的性能优化和高级应用方面,我还存在不足。比如,对于不同集合类型在不同操作场景下的时间复杂度和空间复杂度了解不够深入,导致在实际应用中可能选择了不合适的集合类型,影响程序的性能。另外,对于集合框架中的泛型、Collections 工具类的高级用法等,掌握得还不够熟练。
(四)异常
异常处理是保证程序稳定性和可靠性的重要机制,它用于处理程序运行过程中可能出现的错误和异常情况。在课程中,我学习了 Java 的异常体系,包括受检异常和非受检异常,以及如何使用 try-catch-finally 语句块进行异常捕获和处理。
在 PTA 作业和实验中,我经常遇到各种各种异常情况,如空指针异常、数组越界异常等,

通过不断积累学会了如何正确地捕获和处理异常,以及在异常发生时如何提供有用的错误信息。例如,在读取文件时,使用 try-catch 语句捕获文件不存在、读取错误等异常情况,并在 catch 块中输出相应的错误提示,提高程序的健壮性。
然而,在异常处理的实践中,我有时会出现异常捕获过于宽泛或过于狭窄的问题。过于宽泛的捕获可能会掩盖真正的错误原因,不利于调试;过于狭窄的捕获则可能无法处理所有可能的异常情况,导致程序出现未处理的异常。此外,对于自定义异常的使用和异常链的处理,还需要进一步学习和掌握。
(五)JavaFX
JavaFX 是 Java 平台用于创建富客户端应用程序的框架,它提供了丰富的图形用户界面(GUI)组件和布局管理功能。在课程的实验环节中,我接触到了 JavaFX 的基本使用,包括创建窗口、添加按钮、文本框等组件,以及使用布局管理器进行界面布局。
通过实验和航空货运管理系统的设计,我学会了如何使用 FXML 文件进行界面设计和代码分离,提高代码的可维护性和可读性。同时,也掌握了如何处理组件的事件响应,如按钮的点击事件等。
但是,JavaFX 的功能非常强大,我目前只是掌握了一些基本的使用方法。对于复杂的界面特效、动画效果以及与后端数据的交互等高级应用,还需要进一步学习和探索。另外,在 JavaFX 应用程序的性能优化和跨平台兼容性方面,也缺乏足够的了解和实践经验。
三、采坑心得
(一)概念理解不深入导致的问题
在学习面向对象编程的初期,由于对封装、继承、多态等概念的理解不够深入,在编程实践中经常出现错误。比如,在使用继承时,没有正确理解子类和父类之间的关系,导致在重写方法时出现错误;在使用多态时,对动态绑定的原理理解不透,导致方法调用不符合预期。
为了避免这些问题,我意识到在学习新知识时,不能仅仅停留在表面的代码实现上,要深入理解概念的本质和原理。可以通过阅读相关的书籍、资料,以及与同学和教师进行讨论,加深对概念的理解。同时,多进行实践练习,在实践中不断总结和反思,逐步提高对概念的掌握程度。
(二)代码调试能力不足
在完成 PTA 作业和实验项目的过程中,经常会遇到程序运行错误的情况。由于代码调试能力不足,往往花费大量时间才能找到问题所在。
为了解决这个问题,可以使用调试工具,如 Eclipse 的调试功能。通过设置断点、单步执行等操作,逐步跟踪代码的执行过程,查看变量的值,从而快速定位错误原因。同时,我也学会了通过输出调试信息的方式,在关键位置打印变量的值和程序的执行流程,辅助调试。通过不断的练习和实践,我的代码调试能力有了明显的提高。
(三)缺乏代码规范意识
在编程过程中,我曾经忽视代码规范,导致代码结构混乱,可读性差。当需要对代码进行修改和维护时,遇到了很大的困难。例如,变量命名不规范、代码缩进混乱、注释缺失等问题,使得自己和他人在阅读代码时难以理解代码的逻辑。这点在电梯题目集中深刻的体现,写到后面,确实有些看不懂自己的代码了。
为了养成良好的代码规范习惯,我开始学习和遵循 Java 的代码规范标准,如命名规范、注释规范、代码布局规范等。在编写代码时,时刻注意代码的规范性,提高代码的可读性和可维护性。
四、改进建议及总结
(一)对教师教学的建议
增加案例讲解的多样性:在讲解面向对象技术和其他知识点时,除了课本上的案例,可以引入更多实际项目中的案例,让我们更好地理解知识点在实际开发中的应用场景。例如,可以分享一些开源项目中的代码片段,分析其中是如何运用封装、继承、多态等技术的。
加强课堂互动:在课堂教学中,增加更多的互动环节,如提问、小组讨论等。通过互动,及时了解我们的学习情况和困惑,解答疑问,提高课堂参与度和学习效果。同时,鼓励我们分享自己的学习经验和见解,促进同学之间的交流和学习。
(二)对作业和实验的建议
加强作业和实验的反馈机制:在作业和实验提交后,教师可以提供更详细的反馈意见。除了指出错误和问题外,还可以对代码的优点和不足之处进行分析,提供改进的建议和思路。及时、有效的反馈可以帮助我们更好地理解知识点,提高编程能力。
(三)课程学习总结
总的来说这么课程的教学方式还是不错的,从多方面使我们获取了面向对象的知识,是一门充实的课程。通过这门面向对象程序设计课程的学习,我不仅掌握了面向对象编程的基本技术和知识,还提高了编程实践能力和解决问题的能力。在学习过程中,虽然遇到了各种困难和挑战,但通过不断地努力和探索,都能够逐步克服。同时,我也认识到自己在编程学习中还存在很多不足之处,需要在今后的学习和实践中不断改进和提高。
这门课程的学习经历让我深刻体会到,编程学习是一个不断积累和实践的过程。只有通过大量的练习和实践,才能真正掌握编程技术,提高编程水平。在未来的学习中,我将继续保持学习的热情,不断学习新的知识和技术,努力提升自己的编程能力。

浙公网安备 33010602011771号