一、前言
对整门课程的概要性总结,从工作量与难度两大江都度展开分析,总体说明学习体验。
(一)工作量评估
学习任务 | 工作量星级 | 详细说明 |
---|---|---|
Blog 作业 | ⭐⭐⭐ | 工作量在可接受范围。Blog作业主要是在每次的PTA迭代作业完成后,要求我们对这次迭代作业或者是对于课程的学习,完成一个总结型的文章,然后时间要求在一周时间内完成。考虑到需要回顾之前学到的内容并进行总结,要想高质量的完成的话,需要在规定的这一周时间里,每天要时不时的抽时间出来完善Blog内容。需每日投入时间完善内容。 |
PTA 作业 | ⭐⭐ | 工作量中等。抛开第一次的迭代PTA作业难度不谈,总体的题目集题量设计都在3-5题之间,要求完成的时间在7-12天不等。如果对题目集知识点掌握良好的话,一般在规定的时间内抽出一个下午的时间就能够完成,然后在花个2,3天的空闲时间去优化自己代码的结构就可以。所以说在工作量上中等。 |
实验 | ⭐⭐⭐⭐⭐ | 工作量过多,难以保质保量的完成。在没有然后便捷功能的前提下,手打200-600行代码,工作量巨大。并且无法保证没有错误的一比一复刻,在后续的改错中一个少打的大括号在多个错误当中,都可能成为致命痛点🤯,甚至需要花2h去找错误并且改正。并且加上还要编写实验报告,可谓是雪上加霜。所以说工作量巨大。(合理性放到后面谈) |
线上课程 | ⭐ | 工作量简单,首先前面的网课内容如果有自己已经熟练掌握了的话,完全可以开倍速完成,然后课后的题目也不多。并且完成的时间周期长。 |
线下课程 | ⭐⭐ | 工作量中等。每周三节课(两节理论学习一节实验),课程量设计合理,作业主要消化老师上课讲的内容,并且完成老师上课布置的课堂任务。 |
(二)难度评估
学习任务 | 难度星级 | 详细说明 |
---|---|---|
Blog 作业 | ⭐⭐ | 难度中等,主要可能就是第一次做的时候有点束手无策,不清楚内容怎么来编写,结构不清晰。但经过几次锻炼后,有了一个规范的行为逻辑和合理的结构后难度就不大了。 |
PTA 作业 | ⭐⭐⭐ | 难度中等偏上。第一次的电梯迭代题目,难度大。其他几次的PTA题目集,难度虽然不怎么大,但是要真正理解合理的设计结构并且灵活运用还是有一定的难度的。 |
实验 | ⭐⭐⭐ | 难度中等偏上。虽然说实验的工作量大,但是难度并没有很大。其次,难度主要体现在正确的理解实验报告要求书里面的要求,并且按照要求合理的编程实现出来。 |
线上课程 | ⭐ | 难度简单。网课的内容认真听了的话还是很容易听懂的,然后题目设置的也比较基础。 |
线下课程 | ⭐⭐⭐ | 难度中等偏上。课上老师讲的内容理解起来有点困难,老师讲课的速度有点快。 |
二、面向对象技术总结
在面向对象技术的学习过程中,通过PTA作业、实验等多个教学环节,我对封装、继承、多态等核心概念及相关技术有了深入的理解与实践。以下将结合具体教学环节,总结个人对各项技术的掌握情况。
📦 1. 封装
在PTA作业和实验中,封装的应用无处不在。以航空货物管理系统实验为例,我将货物的名称、编号、长宽高等属性进行私有化,通过提供公有的getter和setter方法来访问和修改这些属性。这不仅保证了数据的安全性,还实现了数据的隐藏,使外部代码无法直接对属性进行非法操作。很好的体现了代码的封装性。
通过PTA作业和实验的锻炼,我深刻认识到封装是面向对象编程的基础。它将数据和操作数据的方法捆绑在一起,形成一个独立的单元。使外部的代码不能直接改变其中的属性。在初期学习时,我经常混淆属性的访问权限,导致数据的安全性无法得到保障。经过多次作业和实验的打磨,我逐渐掌握了封装的要领,但在复杂业务逻辑中,如何合理地封装方法和属性,但要真正实现高内聚低耦合,还需要进一步学习和实践。
🔗 2. 继承
继承是实现代码复用的重要手段,可以很有效的减少代码的使用量,并且也符合人的思维模式。例如在实验中,要求我们实现把不同动物装进不同电器这一过程中,就要求我们能够很好的运用继承关系。定义合适的父类电器类和动物类,并且实这一类事物共有的方法和属性。
这一过程让我清晰地理解了继承的层次结构和优势,通过继承,子类可以复用父类的代码,减少了重复书写的代码。但在使用继承时,我也遇到了一些问题,比如继承关系过于复杂导致代码难以维护,以及方法重写时的权限问题。目前,我对继承的基本使用较为熟练,但在优化继承结构、避免继承带来的代码复杂性方面以及判断是否要使用继承关系方面还有所欠缺。
🔮 3. 多态
多态的概念在PTA题目点线面当中中得到了充分体现。我定义了一个基本元素抽象父类,然后通过继承创建了点类、线、面类等具体图形类。在展示这些基本元素时时,使用抽象类的引用指向具体点线面类的对象,调用统一的展示方法,根据对象的实际类型执行不同的展示逻辑。很好的实现了多态的优势。
点击查看题目详细

这种动态绑定的特性让代码更加灵活和可扩展,当需要添加新的图形类型时,只需要创建新的子类并实现绘制方法即可,无需修改原有代码。在PTA作业中,我也多次运用多态的思想解决问题,但在涉及复杂的多态层次结构和方法重载时,有时会出现混淆,对多态的深层次应用还不够熟练。
⚙️ 4. 抽象类
抽象类作为一种特殊的类,在课程学习中起到了规范和约束的作用。在航空货物管理系统的作业里,我定义了一个抽象支付类,其中包含了抽象的支付方法。具体的支付方式,如微信支付类、支付宝支付类等,都继承自这个抽象支付类,并实现抽象的支付方法。
通过抽象类,我明确了不同支付方式的共性和差异,为具体支付类的实现提供了统一的标准。但在抽象类的设计上,我有时难以准确判断哪些方法应该定义为抽象方法,哪些属性应该放在抽象类中,对抽象类的设计原则和应用场景还需要进一步加深理解。
🔌 5. 接口
接口在课程中的应用场景十分广泛,它与抽象类不同,更强调实现类的行为规范。在航空货物管理系统的PTA作业中,我定义了一个商品费率计算接口,包含了商品的基本操作方法,如普通货物、加急货物、危险货物等,都实现了这个接口,从而保证了不同的货物都具备统一的操作方法,但却可以使用不同的费率计算方法。让代码的扩展性和可维护性大大提高。
接口的使用让代码的扩展性和可维护性大大提高,实现了不同类之间的松耦合。但在接口的多继承和接口与抽象类的选择上,我还存在一些困惑,需要进一步学习相关知识,明确它们的适用场景。
🗃️ 6. 集合框架
集合框架在处理大量数据时发挥了重要作用。在统计Java程序中关键词的出现次数的PTA作业中,我使用ArrayList来存储Java中关键字信息,通过它提供的各种方法,分割并储存元素,删除注释元素,遍历元素去查找,方便地对Java关键字数据统计进行操作。在处理键值对数据时,我使用了HashMap,实现了Java关键字与次数的快速映射。
通过实践,我掌握了常见集合类的基本使用方法,但对于集合框架的底层实现原理,如ArrayList的扩容机制、HashMap的哈希算法等,了解还不够深入。在处理大量数据时,如何根据具体需求选择合适的集合类,以提高程序的性能,也是我需要进一步学习的内容。
⚠️ 7. 异常
异常处理在保证程序稳定性方面至关重要。在文件读写的航空货物管理系统的PTA大作业中,我经常会遇到文件不存在、文件读取错误等异常情况。通过try-catch-finally语句块,我可以捕获并处理这些异常,避免程序因异常而崩溃。同时,我还自定义了一些异常类,用于处理特定业务逻辑中的异常情况。
虽然我掌握了异常处理的基本语法和常用方式,但在使用上老是会报错。而且我在异常的合理抛出和捕获层次设计上还存在不足,有时会出现过度捕获或捕获不全面的情况,影响程序的健壮性。
💻 8. JavaFX
JavaFX在图形界面开发方面展现出强大的功能。在航空货物管理系统的PTA大作业中,我使用JavaFX创建了美观的用户界面,包括窗口、按钮、文本框等组件,并通过事件监听机制实现了组件之间的交互。同时通过翻转课堂这种新颖的形式也更能让我对这一部分去有更深入的了解,才能更好的完成内容的设计和讲解。
点击查看登录界面
点击查看主界面

然而,JavaFX的布局管理和样式设置相对复杂,我在布局的自适应和样式的个性化定制方面遇到了不少困难。对于JavaFX的动画效果和多媒体处理功能,我还没有深入学习和实践,掌握程度有待提高。
三、踩坑心得
在整门课程的学习过程中,我走过不少弯路,也积累了许多宝贵的经验教训。以下是三个最深刻的踩坑经历及反思:
🚧 1. 理解题目要求后再去编程
"盲目编码导致的返工,比理解需求花费的时间多十倍不止"
在第一次电梯调度PTA作业中,我犯了一个致命错误:看到题目后立即开始写代码。题目要求实现单部电梯的动态调度算法,但当时的我我并不了解单部电梯的Look调度算法。直到提交时才发现不符合需求,提交了30、40次有依旧不对,后来只能在段老师提供的算法解析后,不得不通宵重写80%的代码。
其他具体教训:
-
在航空货物管理系统实验中,因未注意"不同客户有不同的计算折扣"的要求,导致总金额错误,导致题目无法正常完成。
-
PTA题目集7中,因为忽视"必须使用接口实现多态"的限制条件,导致设计模式错误被扣30%分数
-
完成实验五时,没有看清楚实验五要求的界面布局,盲目的根据自己的想法去设计ui界面,后来发现界面布局必须按照实验指导书上的来,导致布局代码要全部修改。
应对策略:
- 建立需求清单:将每个要求转为具体检查项
- 绘制流程图:先用流程图验证逻辑可行性
- 互相讨论:与同学交叉验证需求理解
🔥 2. 实践远大于理论学习
"看十遍教程不如亲手敲一遍代码"
在JavaFX学习中,我看了两周教程,但实际开发航空货物界面时却对界面设计,事件逻辑的处理,文件的操作和异常处理当中表现的束手无策。
问题分析
在理论学习中虽然可能听懂了,但是在实际编程过程中总会遇到一些不知道的问题,或者是对知识点的遗忘导致无法下手。
解决方法
- 在进行了一定的理论学习过后,一定要进行自我的编程训练,在报错中调试,在不断的问题解决中得到编程和理论知识的运用的提升。
- 同时我们也可以去故意制造系统的错误从而去更好更深入的去了解底层机制,进而使自己的知识面更加广阔。
- 切记不能以为自己以为听懂了理论知识就代表自己对这一部分的内容以及完全掌握。听懂了≠会运用。
🧩 3. 代码优化的持续追求
"完成功能只是开始,优雅实现才是目标"
在这种迭代模式的PTA作业当中,如果我们仅仅满足于第一次代码设计的结构,而不去不断优化自己的代码,提高代码的可扩展性和维护性的话。那么在下一次是迭代中我们就可能会花比别人多一倍的时间去优化自己的代码结构。
以及在PTA作业Java关键字或是电梯调度的代码中,我们也可以去优化自己的算法,降低复杂度。
优化对比案例:
点击查看代码
// 初始版本 - 嵌套循环O(n²)
for(String word : allWords) {
for(String keyword : keywords) {
if(word.equals(keyword)) {
count++;
}
}
}
// 优化版本 - HashSet查找O(1)
Set<String> keywordSet = new HashSet<>(keywords);
for(String word : allWords) {
if(keywordSet.contains(word)) {
count++;
}
}
常见问题:
- 可扩展性低:在航空货物系统使用直接数值计算运费
- 类设计不合理:将货物管理、支付、报表全放在Main类
- 耦合度高:处理界面逻辑代码直接写在JavaFX代码中
可以参考的代码优化路线:
- 基础重构:消除重复代码→抽取方法
- 设计进阶:应用设计模式→工厂+策略
- 性能提升:时间复杂度分析→算法优化
- 工程化:规范的文件管理结构
💡 核心领悟
通过多次踩坑经历和学习历程,我们也可以推导并总结出面向对象开发的公式:
完整需求理解 × 不断实践修改 × 持续代码优化 = 高质量交付
这三者不是顺序关系而是乘积关系,任何一项缺失都会导致整体质量归零
在期末的航空货物管理系统大作业中,我严格践行这个公式:
- 先用2天时间分析需求,设计具体的界面布局和功能,以及事件处理。
- 不停的进行代码重构和优化。
- 功能实现后消除一些不必要的代码
- 引入设计模式优化结构
- 不断增加界面ui控件、优化界面布局使界面美观
四、改进建议及总结
(一)课程总结
面向对象编程之旅
整门课程以面向对象技术为核心,通过PTA作业、实验,学堂在线线上课程等多样化的教学形式,构建了理论与实践相结合的教学体系。最大的亮点是采用渐进式迭代设计,从基础的封装、继承到复杂的设计模式应用,以及迭代式的题目集,形成了层层递进,环环相扣的教学方法。还有一些创新的地方:
-
翻转课堂
在JavaFX章节,学生通过课前自己找资料学习、制作PPT、课堂中学生来讲课的在这种方式,有效培养了自主学习能力、团队沟通能力以及语言组织能力。这种方式让我对JavaFX界面开发有了深刻理解
-
开发的全过程
在最近几次的作业当中,航空货物管理系统贯穿多个教学环节,从简单的类设计到复杂UI开发,体现了软件设计的完整过程
-
学生能提出建议 在Blog中,有了学生的意见,课程组能够针对广大学生的痛点,进行改进,从而不断优化课程设置,共同进步。
但课程也存在明显不足:实验工作量与回报比例失衡的问题有待改进。
(二)改进建议
1. 实验环节优化
问题现状
-
重复性的工作过多 花了时间但没有得到实际面向对象设计能力的提升
-
调试时间远超合理范围 每次调试修改问题都要好久。而且这种没有目的的调试也不能高效的提升学生调试问题的能力(时间全浪费在找问题上面了)
-
打击学习积极性: 毫无必要的困难和挫折感会迅速浇灭学生的学习热情,让他们觉得编程就是痛苦和折磨。
改进建议
-
在实验系统当中加入实时报错的显示,让学生能够更加高效的调试自己的程序。
-
加入自动补全和插入基本代码的功能,比如一些重复性高,无实际训练意义的代码(Getter,Setter之类的)可以自动生成或者插入。
上面这些建议能解决当下的一些问题,但是长远来说,还是需要锻炼学生们在企业常用软件怎么来编程的能力,满足企业需求,增加学生就业竞争力。理解底层原理确实很重要,但在真正的编程当中,能够更快上手,高效的调试并解决问题才是关键。
(三)学习成果总结
技术能力提升
在整个面向对象过程的学习中我对Java的基本语法,封装、继承、多态、抽象类、接口、集合框架、异常以及JavaFX等相关内容都有了一个较为全面的掌握。
思维模式转变
从C语言当中的面向过程的编程转变为了现在Java的面向对象编程。从关注"如何实现功能"转变为"如何组织对象协作"。
(四)未来提升方向
深入了解底层原理
补全集合框架、JVM内存管理等底层知识
复杂系统设计和团队协作能力
学习如何去设计一个复杂的系统,并且去了解怎么做到良好的团队合作,提高效率。
扩展一些设计模式
去了解并学习一些优秀设计模式,提高自己代码的质量。
正如软件工程大师Martin Fowler所说:
"任何傻瓜都能写出计算机能理解的代码,优秀的程序员写出的是人能理解的代码"你在学习本门课程时遇到了哪些挑战?欢迎在评论区分享你的解决方案!感谢您的阅读!