Blog 3:课程总结

Blog 3

前言

整门面向对象程序设计课程难度不小,作业量也不少。首先是基础的 PTA 作业与实验任务,其中 PTA 作业难度梯度明显,既包含基础语法练手题,也有涉及接口、继承与多态等综合性强的迭代作业,题目难度呈层层递进的特点,对逻辑思维要求较高。实验环节虽整体难度可控,但代码编写量较大,且需耗费大量时间撰写规范的实验报告,从环境搭建到算法实现都需细致打磨。此外,Blog 作业要求将编程思路与实践心得系统化输出,从选题到技术细节梳理都需投入较多心力,还需动手绘画类图进行以及进行代码分析等,工作量较大。线上课程虽内容丰富且作业多为基础性练习,易于掌握。线下的课程分为教师授课与学生翻转课堂两个环节,教师授课阶段课程难度适中,较易接受,能够及时理解与跟进课堂。但线下教学中的学生翻转课堂环节,因需自主拆解复杂知识点并完成讲授,对知识理解深度要求较高,学习挑战性相对更强,而且部分学生小组的课程讲解不够清晰规范,较难理解。

面向对象技术总结

在面向对象程序设计课程中,通过 PTA 作业与实验实践以及线上线下课程的多元练习,我对面向对象程序设计的技术已经有了大致熟悉,对相关技术形成了较为系统的认知框架。但是,对核心技术点形成了差异化的掌握情况。

首先,在继承、多态、抽象类及接口的核心技术领域,已具备扎实的实践能力,能够精准把握抽象类的设计理念,熟练运用抽象类定义基类模板,将对象的公共属性和行为进行有效抽象,构建统一的规范框架,为子类的扩展提供清晰的结构指导。能够熟练定义父类并实现子类继承,在父类与子类的继承实现中能够合理规划类的层次关系,准确识别可复用的属性和方法,通过继承机制实现代码的高效复用与扩展,确保子类在遵循父类设计规范的基础上,实现个性化功能的定制开发。在多态行为的实现方面,具备灵活运用接口机制的能力。不仅能够熟练使用 Java 内置的功能接口,如 Comparator 接口定制排序策略,还能根据实际需求自主设计接口,通过定义抽象方法规范行为契约,让不同的实现类根据自身特性提供具体的行为实现,从而实现系统功能的动态扩展。这种多态设计方式,有效提升了代码的灵活性与可维护性,使系统能够轻松应对需求变化带来的功能调整。此外,通过PTA 迭代的多次作业,已经能够较好的通过继承体系来完成类的扩展,积累了丰富经验,能够从容应对需求变化带来的类结构调整。

在集合框架的深入应用方面,虽然我熟练掌握了 List 和 Map 的基础增删改查操作,但对底层实现原理与场景适配的理解还停留在表面,应用能力尚且比较欠缺,以 ArrayList 为例,我尚未透彻理解其动态扩容机制在大数据量存储时对性能的影响,也难以精准判断在何种场景下选择 ArrayList 或 LinkedList 更优。对并发容器的理解仍停留在基础使用层面,仅能完成基础操作,对其算法逻辑等核心实现原理知之甚少。

对于异常处理模块里的知识,能够大致掌握。在多次实验已经课后作业中操作使用try-catch 嵌套,形成了 “预处理 - 捕获 - 恢复” 的完整处理逻辑,在文件读取、网络请求等操作中进行异常捕获和处理。

目前明显的不足在于类结构划分设计上,类结构划分不够合理与严谨,类设计时易出现职责耦合,没有很好地实现单一职责原则,在处理 PTA 复杂题目时,常常出现类的职责划分不清晰的情况,因类模块边界模糊导致代码重构困难。

此外,JavaFX 技术的学习也存在明显短板。目前我仅能完成 Button、Label 等基础界面组件的布局,以及利用几何图形绘制简单的界面元素,对动画实现的掌握局限于简单的 PathTransition,能够实现元素沿特定路径移动的效果,但在 TimeLine 动画控制方面,对于复杂的时间序列动画还缺乏足够的实践经验与技术积累。在交互逻辑设计上,难以实现用户与界面之间复杂且流畅的交互,使用交互进行实时检测并给出反馈等功能还存在较大的提升空间。

踩坑心得

在面向对象程序设计课程的学习之旅中,我在不断探索与实践的过程中走过不少弯路,也积累了许多宝贵的经验教训。其中,一些看似微小的错误,如单词拼写错误、数组越界、标点遗漏、括号不匹配以及数据格式输入错误等,都曾给我的学习带来困扰,也让我在错误中获得了成长。

首先,单词拼写错误是初期编程时常犯的问题。由于 Java 中类名、方法名、变量名等都需严格遵循驼峰命名规则,且单词拼写必须准确无误,而我在编写代码时,常常因为对单词记忆模糊或粗心大意,导致拼写错误。这种错误在编译时往往难以察觉,却会在运行时引发 “找不到方法” 的异常。这让我意识到,编程不仅是逻辑的实现,更是对细节的把控。后来,我养成了使用eclipse自动生成代码功能的习惯,同时在编写代码后,会仔细检查关键命名,大大减少了此类错误的发生。​

此外,数组越界问题则反映出我对数据边界的忽视。在使用数组进行数据存储和操作时,我常常因为对数组长度计算错误,或是在循环遍历数组时没有正确设置边界条件,导致访问到数组不存在的索引位置。经历多次这样的错误后,我学会了在使用数组前,仔细规划数据存储和访问逻辑,在循环语句中反复确认边界条件,并且利用调试工具逐行检查代码,及时发现和修正潜在的越界风险。

其次,标点符号遗漏、括号不匹配这类错误,看似简单,却频繁出现。一个分号的遗漏可能导致语句无法正确结束,一对括号不匹配则会使整个代码块逻辑混乱。在编写复杂的条件判断和循环语句时,我曾因为括号嵌套层数过多,导致括号数量难以核对,程序出现语法错误却难以定位。后来,我采用了分步骤编写代码的方式,先完成核心逻辑,再逐步补充细节;同时,利用eclipse的代码格式化和语法高亮功能,直观地检查标点和括号的完整性,有效降低了此类错误的发生概率。

然后是数据格式输入错误同样带来过不少麻烦。在处理用户输入时,我有时没有充分考虑数据格式的多样性和用户输入的不确定性,导致程序在运行时因无法解析数据格式而报错。或是没有考虑PTA题目里的具体输入输出格式,导致输入输出的数据不符合要求,多次对题目里可能存在的空值、格式不一致等情况进行处理,结果程序运行到特定数据行时崩溃。这让我明白,在进行数据输入操作时,必须提前做好格式校验和异常处理,通过正则表达式、类型转换检查等方式,确保输入数据的正确性和完整性。

再者,我还常犯方法重载与重写混淆错误。方法重载要求在同一类中,方法名相同但参数列表不同;而方法重写是子类对父类中具有相同方法名、参数列表、返回类型的方法进行重新实现。我时常混淆这两个概念,在子类重写方法时,不小心修改了参数列表,导致原本的重写变成了重载,程序运行结果不符合预期。

还有就是我常常踩忽略构造函数初始化的坑,不愿意花费时间编写函数构造方法。创建类的对象时,构造函数用于初始化对象的属性。如果在定义类时,没有正确编写构造函数,或者在创建对象时,没有按照构造函数的参数要求进行实例化,就可能导致对象的属性处于错误状态。例如我常常定义了一个构造函数需要传入两个参数的类,但创建对象时只传入了一个参数,程序从而报错。

最后还有一个我经常犯的错误是字符串比较错误,在 Java 中,使用 “==” 比较字符串时,比较的是字符串对象的内存地址,而不是字符串的内容。因此,比较字符串内容是否相等,应该使用equals()方法。如果错误地使用 “==” 来比较字符串内容,可能会得到错误的判断结果。

回顾整个学习过程,这些错误虽然曾让我陷入困境,但也让我深刻认识到编程中严谨性和细节的重要性。每一次错误的排查和修正,都是对编程思维的锻炼和提升。未来,我将继续保持谨慎的态度,加强对代码的检查和测试,避免重复犯错,不断提升自己的编程能力和问题解决能力。

改进建议及总结

通过本门面向对象程序设计课程的学习,我在理论知识与实践能力方面均取得了显著提升。在核心技术掌握上,对继承、多态、抽象类及接口等概念有了深入理解,并能熟练应用。例如,运用抽象类构建基类模板,规范子类的设计与实现;通过接口实现多态行为,提升代码的扩展性与复用性。在集合框架、异常处理等模块也积累了一定经验,但在部分细节,如集合底层原理、自定义异常封装等方面仍需加强。​

课程采用线上线下结合、理论与实践并重的教学模式,PTA 作业与实验实践环节帮助我将理论知识转化为实际编程能力。然而,在学习过程中也暴露出自身不足,如类结构设计不够合理,JavaFX 技术掌握欠缺等,这些问题为后续学习指明了改进方向。

对于线上课程,课程时常较短,知识点难以深入理解。对于线下课程,教师授课环节没话说,我认为负责教授我专业课的老师很认真也很复杂,将知识点讲解得很清晰也很透彻,同时讲练并行,师生互动,课堂效率很高:而对于翻转课堂环节,一些学生小组就显得不够严谨与负责,讲解模糊,很难学到知识。

此为我认为,当前实验系统存在一些不足。首先是该实验系统需要连接校园外网才能登陆,而校园外网较不稳定,连接很容易中断从而导致实验系统也断开连接,这使得有一些还未来得及保存的以及编写好的代码消失,需要耗费时间重新编写。其次,实验系统没有粘贴功能,导致在完成实验迭代升级任务时,有一些不需要修改的代码也需要重新编写,需要耗费大量时间重复输入相同代码,不仅枯燥乏味,还降低了学习效率。同时,实验系统无法将代码复制到 Eclipse 等工具中进行调试查错,使得我们只能依赖系统有限的反馈信息排查问题,增加了调试难度。后面实验系统升级出了拷贝功能还是挺不错的,要是有局部代码复制粘贴就会更加便捷了。

24201637-张睿

posted @ 2025-06-17 18:18  Rayyy_yyy  阅读(11)  评论(0)    收藏  举报