南昌航空大学JAVA大作业分析Blog3

一、前言
作为计算机科学与技术专业的核心课程,Java面向对象编程在本学期教学中贯穿了理论与实践的结合,通过PTA作业、实验、线上课程和线下授课的多维度教学方式,帮助我全面掌握了面向对象编程的核心思想和Java语言特性。从整体的学习体验来看,课程的设置既系统又循序渐进,工作量适中但具有挑战性,特别是在理解面向对象设计原则和应用复杂数据结构方面。PTA作业部分涵盖了从基础语法到复杂系统设计的逐步进阶,最具代表性的是电梯调度程序的三次迭代开发。这三次作业要求从单一电梯类设计逐步扩展到包含乘客类、队列类、控制类的完整系统,难度层层递进,每次迭代都引入新的设计挑战。航空货运系统作业则综合考察了继承、多态、异常处理等关键概念。最后的图形计算作业则是对抽象类、接口和集合框架的灵活应用。实验环节与课程内容同步,特别是JavaFX图形界面开发实验,虽然在实际操作中遇到环境配置和API学习曲线的挑战,但最终完成时带来的成就感显著提升了学习兴趣。线上课程提供了扎实的理论基础,而线下课程中的互动答疑和设计讨论则解决了我在实际编程中遇到的诸多困惑。整体而言,这门课程在理论与实践之间建立了良好的平衡,使我对面向对象编程有了系统深入的理解。
二、面向对象技术总结
封装
封装作为面向对象的基础原则,本学期通过多个作业得到深入实践。在电梯调度程序中,我学会将电梯的状态(当前楼层、运行方向)和行为(移动、开门等)封装在类内部,对外只暴露必要接口。这种设计有效防止了外部对对象内部状态的直接修改,提高了系统的安全性和健壮性。航空货运系统中,通过将货物信息和计费逻辑封装在产品类中,实现了"高内聚、低耦合"的设计目标,当计费规则变更时,只需修改相应类而不影响整个系统。

继承与多态
继承和多态技术在航空货运系统中得到集中体现。通过创建Customer抽象基类和IndividualCustomer、CorporateCustomer子类,我学会了如何建立类层次结构;货物类体系(普通货物NormalProduct、加急货物ExpeditedProduct、危险品DangerousProduct)的设计则展示了多态的强大优势:使用统一的产品接口处理不同类型的货物,程序可扩展性显著提高。在图形计算作业中,通过抽象形状AbstractShape和具体子类(圆形、矩形等)的继承体系,结合Comparable接口实现排序,深刻体会到多态在程序灵活性中的核心价值。

抽象类与接口
抽象类和接口作为面向对象的高级特性,在课程学习中有突破性理解。抽象类在图形计算作业中作为所有形状的基类,定义公共接口(如getArea())同时实现公共功能(如compareTo()),完美解决了代码复用问题。则使系统模块化程度显著提升。特别是在航空货运支付系统中,WechatPay、AliPay等不同支付策略实现同一接口,系统扩展变得非常灵活。

集合框架
Java集合框架在实际项目中的应用是本学期的重点突破。在电梯调度中使用LinkedList管理请求队列,利用其高效的插入删除特性;图形计算作业中通过ArrayList存储形状对象,并配合Collections.sort()实现排序,深刻理解了不同集合类型的适用场景。在航空货运系统中使用集合管理多件货物,体会到集合框架在管理对象组方面的巨大优势。通过实践比较ArrayList和LinkedList的性能差异,让我掌握了根据具体场景选择合适集合的能力。

异常处理
异常处理机制学习经历了从认识到熟练的过程。最初编写代码时倾向于忽略异常处理,导致程序健壮性不足;在老师指导下,逐渐形成"及早失败"的理念:在电梯调度中检查楼层范围有效性;在航空货运系统中验证重量值合法性并抛出清晰的自定义异常;在图形计算中输入阶段设置校验。这些实践让我理解了异常不仅是错误处理手段,更是设计契约式编程的重要工具。

JavaFX技术
JavaFX作为课程引入的GUI技术,虽然在环境配置和API学习上经历了挫折,但最终通过完成图形界面应用收获了宝贵经验。事件驱动模型的学习带来了编程思维的转变,从传统的顺序执行转向事件回调机制。虽然JavaFX的学习曲线较陡峭,但它对理解现代软件开发有重要启发意义。

技术点 学习收获 典型应用 自我掌握情况 提升方向
封装 掌握 private 成员+ public Getter/Setter 的基本做法;学会通过不可变类保证对象安全 PassengerProduct 设计 ★★★★☆ 继续精炼领域模型,避免“万金油”类
继承 能够建立合理的 is‑a 关系,抽取父类共性 Rectangle→BoxCircle→Ball ★★★★☆ 警惕过度继承,考虑组合
多态 熟悉动态绑定、向上转型、接口回调 getRate() 的不同货物计费策略 ★★★☆☆ 深入理解里氏替换原则
抽象类 会在抽象层面定义模板方法与公共属性 AbstractShapeCustomer ★★★☆☆ 加强对模板方法模式的运用
接口 掌握单继承 + 多接口的设计;会用 Comparable 排序 Comparable<AbstractShape> ★★★★☆ 进一步应用函数式接口、Lambda
集合框架 熟悉 ListMap 基本用法与迭代器 LinkedList<Passenger> 请求队列 ★★★★☆ 学习并发集合与流式操作
异常处理 能够区分受检与非受检异常;在输入校验环节抛自定义异常 航班超载、楼层越界 ★★★☆☆ 强化异常链与日志体系
JavaFX 了解 MVC 架构与界面控件,能实现简单窗体 课后小练习:实验5 ★★☆☆☆ 继续练习事件驱动与样式分离

三、采坑心得
设计原则理解偏差
在电梯调度首个版本中,将所有功能塞入单一电梯类的做法,很快导致代码膨胀、难以维护。通过三次迭代才真正理解单一职责原则的价值:将调度逻辑分离到控制类,请求管理独立为队列类,乘客行为封装到乘客类,最终形成清晰的职责划分。这个经验让我认识到设计阶段合理划分类职责的重要性,宁可多花时间分析需求,也不要急于编写代码。

继承滥用导致僵化设计
航空货运系统初版中,为每种货物类型创建独立子类(如NormalProduct、ExpeditedProduct等),虽然实现了计费差异化,但当需要支持更多类型时出现"类爆炸"。通过重构改用策略模式,将计费规则抽离为独立策略对象,系统扩展性显著提升。这教训让我明白:继承是强大的工具,但过度使用会导致系统僵化;组合优于继承的理念在实际设计中非常实用。

状态管理混乱问题
电梯调度中电梯状态(停止、移动、开门)和方向(上行、下行)最初混杂管理,导致逻辑复杂。通过引入状态模式将不同状态行为分别封装在状态类中,系统可读性和扩展性得到显著改善。这个经验让我理解到:对于复杂状态机,使用模式化设计可大幅降低认知负担。

集合选择不当
在图形计算作业中,最初使用ArrayList存储形状对象,但当需求转变为频繁在集合中部插入删除时,LinkedList性能优势显现。

过度设计陷阱
电梯调度第三版曾尝试引入设计模式,但过度抽象反而增加了系统复杂度。在老师指导下回归简约设计,平衡了灵活性和可理解性。这让我认识到合理把握设计粒度的关键:避免过早优化,满足当前需求前提下保持适度的前瞻性设计。
四、改进建议及总结
课程内容总结
本学期的Java面向对象编程课程构成了我编程能力的重要基石。从基础语法到设计原则,从核心概念到高级特性,课程内容层层递进,理论与实践的平衡掌握恰当。最具价值的是通过三个核心项目(电梯调度、航空货运、图形计算)进行的迭代式学习,这种循序渐进的设计帮助建立了扎实的知识结构,培养了解构复杂问题的能力。
个人能力发展
通过本课程的学习,我的编程思维经历了质的转变:

​​对象思维能力​​:学会了将现实问题转化为对象网络进行建模;
​​复用驱动开发​​:在设计中寻找通用性,建立可扩展的架构;
​​测试意识提升​​:理解未经验证的代码不可信任,培养测试驱动思维;
​​文档习惯养成​​:通过Javadoc编写API文档,提升代码可读性。
在学习过程中,我最大的收获不是语法细节的记忆,而是面向对象设计思想的建立:理解变化点是设计的核心,合理封装变化是良好架构的基础。这种思维对解决任何规模的软件开发问题都有指导价值。
结语
本学期的Java面向对象编程课程是我编程成长的重要一步。通过系统学习,我不仅掌握了Java语言特性,更重要的是建立了面向对象的设计思维,这将成为我应对复杂软件工程挑战的核心能力。教师的精心指导、合理的课程结构、富有挑战性的实践项目共同促成了这段宝贵的学习经历,期待在未来的项目开发中继续深化这些理念和技术。

posted @ 2025-06-21 12:19  NJD很无聊  阅读(19)  评论(0)    收藏  举报