Jian-clever

导航

 

面向对象程序设计课程总结性Blog

一、前言

回顾整个Java课程的学习,从最初对Java语言的未知到能够独立完成复杂的代码,Java带给我的不仅是知识的积累,更是设计思维的全面提升。课程涵盖了Blog作业、PTA编程题、实验项目以及线上线下课程学习,各环节紧密连接,形成了完整的知识体系。 PTA作业从基础的类设计到复杂的系统模拟,难度逐步递增,尤其是电梯调度、航空货运管理等题目,要求将理论知识与实际应用结合,对封装、继承、多态等核心概念进行了考察。Blog作业则要求我对每阶段的学习进行系统性总结,梳理设计思路、分析代码复杂度,极大地提升了我技术文章的写作能力。实验环节通过动手实践,让我对Java框架等技术有了更直观的理解。 线上课程的视频讲解细致,线下课程的互动讨论则解决了许多理解上的困惑。整体来看,课程工作量适中,但部分综合性题目(如多次迭代的电梯问题)难度较大,需要花费大量时间调试和优化代码,但正是这些挑战让我深刻体会到Java的精髓。

二、面向对象技术总结

一.封装:

封装是面向对象的基础,通过将数据(属性)和操作(方法)封装在类中,实现了信息隐藏。在PTA作业中,我理解了封装的重要性: - **在电梯类设计中,将电梯的状态(当前楼层、运行方向)和行为(移动、开关门)封装为Elevator类,外部只能通过定义的方法访问,避免了数据的非法修改。 在货物类设计中,在航空货运系统中,Cargo类封装了货物的尺寸、重量等属性,以及计费重量、运费计算等方法,确保了数据的安全性。我基本掌握封装的使用,但在初期设计中存在属性暴露的问题(如直接访问类的私有属性),后期通过代码重构逐步改进。对于复杂系统中封装粒度的把握不够精准,有时会将过多功能封装在一个类中,导致类的职责不够单一。

二. 继承与多态

继承实现了类的层次结构,多态则让不同类的对象可以通过统一接口交互,这是面向对象的核心特性。点线面问题重构通过抽象类Element定义display()方法,Point、Line、Plane子类重写该方法,实现了多态输出。客户与货物分类在航空货运系统中,Customer抽象类派生出个人客户和企业客户,Cargo抽象类派生出普通货物、加急货物和危险品,通过多态实现不同类型的计费逻辑。最后我能够熟练使用继承建立类的关系,通过多态实现行为的动态绑定。在PTA作业中,多次通过继承简化代码结构,如电梯问题的三次迭代中逐步优化类的继承关系。 不过我对里氏替换原则的理解不够深入,有时子类重写父类方法时未能保持行为的一致性,导致程序出现隐性错误。

三.抽象类与接口

规范与契约 抽象类和接口为系统设计提供了规范: 抽象类的应用在魔方问题中,Solid抽象类定义了几何体的基本属性和抽象方法,Cube和Regular子类实现具体计算逻辑。对于接口的使用,虽然课程中接口的应用较少,但在雨刷系统的扩展设计中,我尝试通过接口定义不同的速度计算策略,提升了代码的扩展性。最后我能够根据需求设计抽象类,但对接口的应用场景理解不够全面,更多停留在理论层面。

四.集合框架

数据结构的高效应用 Java集合框架在复杂系统中至关重要。电梯问题中使用LinkedList实现内外请求队列,通过Queue接口规范队列操作。 在点线面问题中,GeometryObject类使用ArrayList存储不同几何对象,实现了增删遍历操作。 最后我熟悉List、Queue等常用接口的使用,能够根据场景选择合适的集合实现类(如ArrayList vs LinkedList)。 然而,对Map接口和泛型的使用不够熟练,在需要键值对存储的场景(如客户信息查询)中未能充分发挥集合框架的优势。

五.报错

程序健壮性的保障 异常处理机制让程序能够优雅地处理错误。在各PTA题目中,对无效输入(如超出范围的楼层、错误的格式)进行异常处理,避免程序崩溃。 报错,在航空货运系统中,对载重超出的情况进行判断,抛出定制异常并给出友好提示。经过学习能够使用try-catch处理常见异常,自定义异常类来封装业务错误。对异常链的使用和异常处理的最佳实践了解不足,有时会捕获所有异常导致调试困难。

六.JavaFX

图形界面的初步探索 虽然课程中JavaFX的内容较少,但通过实验项目对图形界面开发有了初步了解。使用Scene、Stage等基本组件实现简单界面布局。。通过事件监听器实现按钮点击等交互逻辑。 掌握JavaFX的基本使用,能够开发简单的图形界面。。对JavaFX的高级特性(如FXML、数据绑定)了解有限,界面设计不够美观。

三、采坑心得

一.设计缺陷导致的迭代复杂

在电梯问题的三次迭代中,初期设计的不足导致后续修改成本极高。使用大量if-else穷举逻辑,未考虑代码复用,导致getTargetFloorAndDirection方法复杂度极高(最大块深度8),每次迭代都需要修改核心逻辑。 因此在开发复杂系统前,必须进行充分的类设计和架构规划,遵循单一职责原则,避免将所有逻辑集中在一个方法中。

二.调试技能改进

初期不熟悉IDEA的断点调试功能,导致排查错误效率极低。当内外请求同时存在时,电梯偶尔会停留在-1楼,由于不会设置断点,花费数小时才发现是目标楼层初始化值未正确更新。通过查阅文档和实践,掌握了条件断点、变量监视等技巧,调试效率大幅提升,这是课程中最宝贵的技能收获之一。

三.多态应用中的小问题在点线面问题中,错误地重写父类方法导致多态失效。Line类的display方法未正确调用Point类的display,而是直接输出坐标,违反了多态原则。重写父类方法时,必须确保行为的一致性,优先通过父类接口调用,而非直接访问子类实现。

四.浮点数计算的精度

在运费计算中,直接使用double导致精度误差。2000.0 * 0.8 计算结果为1599.9999999999998,而非1600.0。改用BigDecimal进行精确计算,通过setScale方法保留指定小数位。

四、改进建议及总结

一.课程改进建议

1.验提交系统太死板生硬,空耗了大量时间。并且实验提交系统的运行规则和IDEA有一些细节上的差异,导致根本不知道代码哪里出错的问题。

2.反转课堂给了部分同学一个很好的展现自我的机会,但是对于大部分同学而言,正面效果一般

3.学堂在线的提醒不到位,我甚至一开始都没有进群,精力都在做课设上,最后错过两个章节。身边很多同学都错过了一到两个章节,这样的扣分有一些残忍而又不合理了。

4.在平时的作业中,没有出现因为没按照要求设计类而0分的情况,而在考试中却必须按照要求。轻视规则导致我0分当然是我的问题,但是希望可以改进,考试比平时严格是不合理的。

二.个人学习总结

通过这门课程,我实现了从面向过程到面向对象编程思维的转变,深刻理解了"封装变化、隔离依赖"的设计哲学。从电梯调度的状态管理,到航空货运系统的复杂业务逻辑,每一个作业都是对面向对象核心概念的深度实践。 最宝贵的收获是学会了如何分析问题、设计架构,并通过迭代优化代码。虽然过程中遇到了诸多挑战,但每一次调试成功、每一次代码重构后的优化,都让我对面向对象技术有了认识。 我将继续深化学习,提升代码的可维护性和扩展性,同时加强对Java的探索。

posted on 2025-06-21 17:28  24201632-徐健  阅读(16)  评论(0)    收藏  举报