NCHU-OOP-课程总结
这个学期我深入学习了以 Java 语言为基础的面向对象程序设计课程。这门课程打开了我对程序设计思想与程序设计模式的全新认知,让我从最初对类的懵懂无知,到逐步理解并运用面向对象的思想进行编程。课程涵盖了封装、继承、多态、抽象类、接口、集合框架、异常以及 JavaFX 等丰富内容,让我收获颇丰,同时也暴露出我的许多不足之处,接下来是我对本学期课程学习的详细总结。
首先,我站在个人的角度,对于这门课程进行一个概要性的总结。总的来说,这门课程的工作量还是挺大的,既有线上的课程学习与习题测试,还有实验,PTA作业,Blog作业。不过这些任务大多都有其作用,例如线上课程有助于我们对于知识提前预习,有一个初步的认识。PTA作业帮助我们巩固学习到的知识与技术,而Blog作业则让我们养成总结反思的好习惯,如此形成一个良好的闭环。但是我也认为过多的工作量也容易导致学生急于应付了事,而导致效果打了折扣。
接着,我来对面向对象技术进行一个总结。封装是我接触到的第一个面向对象的重要概念。这个思想是我上个学期在学习C语言时从来没有考虑过的问题。它将数据和操作数据的方法封装在一起,通过访问修饰符来控制对类中成员的访问。在学习过程中,我通过大量练习,掌握了使用 private 修饰符隐藏类的成员变量,然后通过 public 的 getter 和 setter 方法来访问和修改这些变量,以此实现数据的安全性和一致性。例如,在设计一个学生类时,将学生的年龄、成绩等属性设为 private,外部无法直接访问和修改,只能通过特定的方法来获取和设置。这不仅避免了非法数据的录入,也让代码的结构更加清晰。通过实践,我深刻认识到封装就像是给数据安上了一个保险柜,使程序更加健壮和安全。不过,在复杂类的封装设计上,我有时会对访问修饰符的选择感到犹豫,不能快速确定最合适的封装级别,导致代码的可维护性和扩展性受到一定影响。同时在对于类的设计上,还没有形成很好地设计思路,在面对复杂问题时会有些手足无措,这些也是后续还需要加强的地方。

继承的学习让我体会到了代码复用的强大魅力。通过继承,子类可以拥有父类的属性和方法,避免了重复编写相同的代码。在实验中,我创建过一个动物类作为父类,其中包含动物的基本属性和行为方法,然后通过继承创建大象类、狮子类等子类,子类不仅继承了父类的特性,还可以根据自身特点重写和扩展方法。例如,大象类和狮子类继承了动物类的 “叫” 这个方法,但它们叫的方式不同,就可以在子类中重写该方法。在这个过程中,我理解了继承的层次结构和 super 关键字的使用,super 关键字可以方便地调用父类的属性和方法。然而在多重继承关系的处理上,我还存在一些困惑,尤其是当多个父类存在同名方法和属性时,如何正确地调用和处理,还需要进一步学习和实践。
多态是面向对象编程中最具魅力的特性之一。它使得同一个方法调用可以根据对象的不同表现出不同的行为。在学习过程中,我掌握了通过方法重载和方法重写来实现多态。方法重载是在同一个类中,方法名相同但参数列表不同;方法重写是子类重写父类的方法,实现不同的功能。比如,在图形绘制程序中,定义一个图形类,包含输出方法,然后创建圆形类、矩形类等子类继承图形类并重写输出方法。当调用输出方法时,根据对象的实际类型执行相应的输出逻辑。多态让程序更加灵活和可扩展,提高了代码的复用性和可维护性。但在实际应用中,我有时会混淆方法重载和重写的概念,导致在编写代码时出现逻辑错误,对多态在复杂业务场景中的运用还不够熟练。
抽象类的学习让我明白了它作为一种特殊的类,主要用于被继承,起到规范和模板的作用。抽象类中可以包含抽象方法,这些方法只有声明没有实现,必须由子类去实现。通过抽象类,我学会了将一些具有共性的属性和方法提取到抽象类中,子类继承抽象类并实现其抽象方法,从而实现代码的统一管理和扩展。例如,创建一个抽象面积计算类,包含抽象的计算面积的方法,然后创建圆计算面积类、矩形计算面积类等子类继承计算面积类并实现计算面积的方法。这让我认识到抽象类在构建程序框架和规范代码结构方面的重要性。不过,在抽象类与普通类的选择和设计上,我还缺乏足够的经验,有时不能准确判断哪些类应该设计为抽象类,哪些应该是普通类。
接口是一种更加纯粹的抽象,它只包含常量和抽象方法。接口的出现解决了 Java 单继承的局限性,一个类可以实现多个接口。在学习过程中,我掌握了接口的定义和实现,以及接口在实现多态和提高代码可扩展性方面的应用。比如,在一个航空管理系统中,定义一个 “支付接口”,包含支付方法,然后让支付宝支付类、微信支付类等实现该接口。这样,系统可以根据不同的需求选择不同的支付方式,极大地提高了系统的灵活性。但在接口的设计和使用过程中,我对接口的粒度把握不够准确,有时定义的接口过于复杂或过于简单,影响了代码的质量和可维护性。
集合框架的学习为我处理大量数据提供了强大的工具。我学习了 List、Set、Map 等常用集合接口及其实现类,如 ArrayList、LinkedList、HashSet、HashMap 等。通过实践,我掌握了不同集合的特点和适用场景,ArrayList 和 LinkedList 的区别在于数据存储和访问方式的不同,前者适合随机访问,后者适合频繁的插入和删除操作;HashSet 和 TreeSet 在元素存储和排序上各有特点;HashMap 和 TreeMap 在键值对存储和查找效率上也有所差异。在实际编程中,我能够根据具体需求选择合适的集合来存储和操作数据,例如在一个学生成绩管理系统中,使用 HashMap 来存储学生的学号和成绩,方便快速地根据学号查询成绩。然而,对于集合框架中的一些高级特性,如集合的泛型使用、迭代器的复杂操作以及集合的并发处理等,我还了解得不够深入,在实际应用中有时会出现类型转换错误或数据处理效率低下的问题。对于异常机制处理我有了初步的了解,但在实际应用中,我有时对异常的捕获和处理不够全面,可能会遗漏一些潜在的异常情况,导致程序在某些特殊情况下出现意外错误。
JavaFX 是用于构建图形用户界面(GUI)的技术。通过学习,我掌握了 JavaFX 的基本组件,如按钮、文本框、标签等的使用,以及布局管理器的应用,能够创建简单的图形界面程序。我还学会了使用 FXML 文件来分离界面设计和业务逻辑,提高代码的可维护性和可读性。在实践过程中,我完成了一个简单的学生信息管理界面,通过 JavaFX 实现了数据的展示和基本操作。然而,JavaFX 的学习让我意识到自己在图形界面设计方面的不足,对于复杂界面的布局设计、动画效果的实现以及与后端业务逻辑的深度整合等方面,还需要进一步学习和实践。
踩坑心得
在这门课程的学习过程中,我曾经走过一些弯路。比如一开始学习Java的时候还沉浸在之前C语言的面向过程编程思维之中,导致在类的设计与封装出现了较多的问题。再例如对于继承复用与合成复用的运用场景还没有理的很清楚,导致我在面对一些较复杂的需求时并没有很好地实现面向对象的设计原则。这些教训教会我在学习之初需要弄懂基本概念,理解其本质。还有就是我不会忘记被电梯程序折磨的痛苦,做了十几个小时才弄好,这也让我真正地认识到了实际工程问题的复杂。还有对于正则表达式还是不熟悉,还需要多加练习巩固。

改进建议及总结
总的来说,这门课程还是让我学到了不少东西,让我初步掌握了面向对象编程思维(要想彻底地掌握还需要后续大量的练习与实践),学习了类的封装,抽象类,接口,继承,多态还有一些实用的集合框架以及设计模式。还有一点小小的建议就是希望能优化一下课程任务,减少一些工作量(因为这个学期确实很忙,课程又多,还要花大量的时间做项目),同时适当增加一些更加偏向实际的作业,让我们不仅仅停留在理论和理想的温室中。
总结与展望
通过这个学期面向对象程序设计课程学习,我对Java语言和面向对象编程有了较为系统的认识和掌握,从封装、继承、多态等核心概念,到抽象类、接口、集合框架、异常处理以及 JavaFX 等重要内容,每一部分都让我在编程能力和思维方式上得到了提升。但我也清楚地认识到自己存在的诸多不足,在一些技术的深入理解和应用上还需要加强。在未来的学习中,我计划通过阅读相关书籍、观看教学视频以及参与实际项目等方式,进一步巩固和提升自己的 Java 编程技能,弥补知识短板,为后续的专业学习和实践打下坚实的基础。
浙公网安备 33010602011771号