面向对象课程总结性Blog
本学期的 Java 课程即将结束,在这一学期的学习旅程中,我收获颇丰。从 Blog 作业记录学习心得,到 PTA 平台上不断攻克编程难题;从实验室里的实践操作,再到线上线下课程的知识汲取,每一项学习任务都像是一块块基石,搭建起我对这门学科的认知大厦。回顾这段学习历程,各项学习任务在工作量与难度上各有特点,层层递进。
一.各项学习任务概要
1.PTA 作业侧重于对编程实践能力的提升与考验。除了一开始的对电梯调度的逻辑分析难度很大以外,其余的作业难度适中,都能够成功做出来。而且 PTA 采取了迭代的方式,通过对题目的理解和逐步破解,我的编程能力得到了显著提升,认识题目的角度也更加完善,逻辑思维也更加严谨。
2.实验环节是将理论知识转化为实际应用的关键途径。实验的工作量较大,遇到问题需要反复排查和调试时,更是耗时耗力。而且实验更加考验我们的耐心,在没有类似idea或者eclipse等外部插件时,需要我们手动去逐字编辑,为了确保正确性,着实是对我们耐心的一种考验与磨练。在这个过程中我学会了如何在实践中发现问题、分析问题并解决问题,加深了我对课程知识的理解和掌握。
3.本门课程采取了线上和线下相结合的方式,方式新颖,配合得当。线上课程具有丰富的学习资源,讲了很多线下没讲的内容,值得我们反复观看与学习。线下老师跳脱传统讲课方式,采用生动形象的例子,帮助我们很好的理解与吸收知识,且讲述了很多书上没有的内容,让我们对相应的编程思想有了初步的把握。
4.这几次的 Blog 作业贯穿整个课程的学习,要求我们定期对所学知识进行梳理、总结,并分享自己的理解与感悟。在这个过程中,不仅锻炼了我的文字表达能力,更促使我深入思考课程内容,对所遇到的困难和不足进行反思,对知识点的把握有了更深的理解。而这几次的 Blog 是对完成的题目进行反思和总结,要对这一阶段的学习资料进行查找,工作量和难度都不太大。
总的来说,这门课程的各项学习任务相辅相成,让我充分的掌握了 Java 学习的面向对象编程思想以及几大设计原则的灵活运用,还培养了自主学习、独立思考和解决问题的能力。这些收获不仅可以运用到我的学业上,也对我的生活产生了潜移默化的积极影响。
二、面向对象技术总结
1.封装
封装是面向对象编程的核心原则之一,它将数据(属性)和操作数据的方法绑定在一起,并通过访问修饰符(如 private、protected、public)控制外部对这些成员的访问。封装的主要目的是隐藏内部实现细节,提供统一的公共接口,增强代码的安全性和可维护性。例如,在一次 PTA 雨刷程序功能扩展设计的题目里,要求程序能够根据雨刷系统的类型自动匹配其业务逻辑,两种系统的最大档位不同,因此我设计了一个 private 的 maxPos 属性,在不同的系统里通过对其的 getter,setter 可以设计想要的最大档位。这让我学习到了如何灵活的运用封装保证数据的安全性和扩展,以及后续对数据进行校验和逻辑处理。不过,有时我也会出现过度封装的情况,对一些本不需要外部访问的属性也创建了访问方法,增加了代码的冗余度。
2.继承
继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和层次化设计。通过学习,我能够充分理解继承的特性,在代码复用,代码重写以及 IS - A 关系里运用继承,通过创建子类继承父类的属性和方法,减少了大量重复代码的编写,提高了开发效率。在设计具有层次关系的程序结构时,继承能帮助我建立清晰的类层次体系,体现 “is - a” 的关系,使代码逻辑更加直观易懂。但在使用过程中,我也意识到要注意避免继承的滥用,否则可能导致类之间的耦合度过高,维护困难。例如在动物类的继承体系中,若不合理设计父类,父类的修改可能会对众多子类产生意想不到的影响。
3.多态
多态是同一操作作用于不同对象可以有不同的解释,产生不同的执行结果。多态允许不同类的对象通过相同的接口进行调用,从而实现 “一个接口,多种实现”,以通过继承、接口和方法重写实现。例如,在实验三中将大象、老虎、狮子装进电器里,我用父类的 Animal 引用指向不同的子类,通过调用 animal.enterElectric () 时会根据实际对象类型执行不同的实现。多态极大地提高了代码的灵活性和可扩展性,但在使用时也容易出现类型转换错误等问题,需要对 Java 的类型系统有更深入的理解,才能准确把握。
4.抽象类和接口
抽象类为子类提供了一个通用的模板,不能被实例化,只能作为父类被继承,其中可以包含抽象方法,强制子类去实现。在 PTA 作业中,通过定义抽象的图形类,为不同的具体图形类(如圆形、矩形)提供统一的接口规范,使得代码具有良好的扩展性。接口则定义了一组方法签名,不包含实现,类实现接口来表明它具备某种行为。在实验中,使用 Comparator 和 Comparable 接口对集合进行排序,让我体会到接口在实现特定功能方面的强大作用。不过,在实际应用中,我有时会纠结于何时该使用抽象类,何时该使用接口,需要进一步通过实践来加深理解和区分。
5.集合框架
Java 集合框架提供了丰富的数据结构和算法,如 List、Set、Map 等。在 PTA 作业和实验中,我经常使用 ArrayList 和 LinkedList 来存储和操作数据。ArrayList 适合频繁访问元素的场景,而 LinkedList 在频繁插入和删除元素时表现更优。通过对集合框架的学习和使用,我提高了数据处理的效率,但对于一些更复杂的集合类型,如 TreeSet、HashMap 的底层实现原理,还需要进一步深入研究,以便在实际应用中能够更合理地选择和使用。
6.异常
异常处理机制让程序能够更优雅地应对运行时出现的错误。通过 try - catch - finally 结构,我们可以捕获并处理异常,增强程序的健壮性。在处理文件 I/O 操作等可能抛出异常的场景时,我学会了正确地进行异常处理。但有时也会因为捕获异常的范围不当,导致难以排查真正的问题,或者在应该抛出异常的情况下,错误地返回了特殊值,影响了程序的正常逻辑。
7.JavaFX
通过实验项目,我接触到了 JavaFX,学习了如何构建图形用户界面。掌握了 JavaFX 应用的基本结构,学会使用各种布局管理器来设计界面,以及处理用户交互事件等。然而,JavaFX 在多线程编程方面存在一定挑战,如长时间运行的任务可能阻塞应用线程导致界面冻结,需要合理使用 Platform.runLater () 等方法来解决。同时,创建复杂的动画和过渡效果也需要花费较多精力去学习和实践。
三.踩坑心得
在 PTA 作业中,我曾花费大量时间为一个包含众多字段的类生成不必要的访问方法,导致代码冗长复杂,后来才意识到应根据实际需求合理封装。在学习继承和多态时,我时常混淆方法重载和方法重写的概念,导致程序出现逻辑错误,经过多次调试和对比学习才逐渐清晰。在实验过程中,由于实验系统不支持复制粘贴,手动敲入大量代码时容易出现拼写错误,排查错误耗费了大量时间,这让我认识到仔细和耐心的重要性。在异常处理方面,不恰当的异常捕获曾掩盖了真正的错误根源,使问题排查变得困难,这也让我明白要准确把握异常处理的粒度。
四.改进与总结
1. 对课程的建议
课程内容整体丰富且全面,但在一些知识点的衔接上,可以提供更清晰的引导,帮助学生更好地过渡。例如在从基础语法到面向对象特性的转变过程中,增加一些综合性的示例和讲解,让学生更自然地理解和应用新的概念。
2. 对作业和实验的建议
PTA 作业可以增加一些提示信息,特别是在一些难度较大的题目上,帮助学生更快地找到解题思路,而不是盲目地尝试。实验方面,优化实验系统,允许适当的代码复制粘贴功能,减少因手动输入错误导致的时间浪费,让学生能够更专注于实验内容本身。同时,可以增加一些实验拓展内容,供学有余力的学生进一步探索和提升。
浙公网安备 33010602011771号