• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
hyq638
博客园    首页    新随笔    联系   管理    订阅  订阅

第3次Blog作业

前言


本学期的面向对象程序设计课程内容丰富、节奏紧凑,涵盖了 Blog 作业、PTA 编程任务、实验操作以及线上线下课程等多个教学环节。PTA 作业的题目数量较多,难度呈阶梯式上升,从基础的语法练习逐步过渡到复杂的项目设计,像航空货运管理系统和电梯调度程序等题目,对逻辑思维和代码设计能力提出了很高的要求。实验课则侧重于实践操作,帮助我们将理论知识应用到实际项目中,但实验提交系统的使用体验还有待提高,有时会耗费较多时间在敲大量代码上。线上课程提供了丰富的学习资源,方便我们随时复习和巩固知识点,在线下课中,老师教学各种设计模式和java类,有时总结pta的难题,帮助我们更好学习面向对象课程。整体而言,课程的工作量较大,但通过这些多样化的教学环节,我们的编程能力得到了显著提升。


面向对象技术总结


封装

在航空货运管理系统中,将Customer(客户信息)、Goods(货物属性)、Flight(航班信息)等数据封装为独立类,通过private修饰符隐藏内部属性,仅暴露getter/setter方法。例如Goods类封装体积重量计算逻辑getVolumeWeight(),外部仅需调用方法即可获取结果,避免数据直接篡改。
封装实现了数据安全性与代码模块化,当修改Goods类的运费计算规则时,只需调整内部方法,不影响外部调用逻辑,显著降低系统耦合度。

继承与多态

题目集 8 到题目集 9 中,将Customer抽象为AbstractCustomer,派生出Individual(个人客户,含身份证号)和Team(团队客户,含营业执照号),通过重写getCustomerType()方法区分类型;Goods抽象类派生出NormalGoods(普通货物)、FragileGoods(易碎品,运费加价 20%)等子类,重写rate()方法实现差异化计费。
多态优势:订单类Order通过父类引用调用不同子类的rate()方法,无需关心具体货物类型,体现 “运行时多态” 特性,代码可扩展性提升。

抽象类与接口

在电梯题目集中,定义抽象Request类规范请求基本属性(楼层、方向),派生出InternalRequest(内部请求)和ExternalRequest(外部请求);通过RequestHandler接口分离请求处理逻辑,使Controller类专注于调度策略,符合 “单一职责原则”。
规范约束:抽象类强制子类实现核心方法(如Request.getFloor()),接口统一不同模块的交互方式,避免代码逻辑混乱。

集合框架

集合框架在电梯队列管理与泛型应用中展现出显著优势:LinkedList 作为队列实现先进先出机制,通过 offer 和 poll 方法高效处理电梯请求,链表结构支持动态扩容,适合高频次的请求添加与处理;搭配 HashSet 利用哈希表快速去重,能过滤连续相同的楼层请求,避免电梯重复停靠,提升运行效率。泛型在乘客管理中通过 ArrayList实现编译期类型检查,杜绝运行时类型转换异常,获取元素时无需强制类型转换,简化代码逻辑,明确的类型声明也提升了代码可读性,而集合框架的标准接口设计确保了模块间的职责分离,便于系统扩展与维护,链表与哈希表的内存按需分配特性也实现了资源的高效利用。

异常处理

在电梯程序中,使用正则表达式<\d+>$|<\d+,(UP|DOWN)>$校验输入格式,若匹配失败则抛出InvalidRequestException,并提示用户重新输入;处理货物重量时,通过try-catch捕获NumberFormatException,避免程序因非法输入崩溃。
优点:自定义BusinessException封装数据校验异常,区分系统异常与业务逻辑异常,便于错误定位与处理。

JavaFX

在 JavaFX 的学习实践中,我通过 “动物入电器” 模拟实验掌握了基础图形界面开发能力。在技术应用上,学会使用 BorderPane、VBox 等布局容器搭建界面框架,通过 Rectangle、Circle 等几何图形绘制电器与动物图形,并利用 Button、Text 等 UI 组件实现信息展示与交互提示。对于事件处理机制,能够通过setOnMouseClicked绑定点击事件,响应选择操作;借助 Timeline 和 KeyFrame 实现动画效果,控制对象按指定速度移动,初步理解了 JavaFX 动画的时间轴与帧驱动原理。对 JavaFX 技术的认知层面,我意识到其相较于传统 Swing 框架,提供了更现代的响应式布局、CSS 样式定制能力,以及基于 Lambda 表达式的简洁事件处理逻辑。特别是Platform.runLater方法解决了多线程环境下 UI 更新的线程安全问题,ObservableList实现数据与界面的自动同步,这些特性体现了 JavaFX 在构建交互式应用上的优势。
目前短板:一是对 FXML 标记语言和控制器类的结合使用不够熟练,尚未掌握 UI 布局与业务逻辑分离的开发模式;二是 CSS 样式定制仅停留在基础属性调整,缺乏复杂选择器、动画过渡等高级样式的实践经验;三是未深入学习数据绑定机制,在大型项目中难以高效管理数据与界面的双向同步;四是对 JavaFX 的 3D 图形、多媒体处理、图表组件等扩展功能几乎没有接触,在复杂可视化场景开发中能力不足;五是缺乏 MVVM 等架构设计经验,面对复杂交互逻辑时,代码的模块化与可维护性较差。后续需要通过系统学习和项目实践,针对性补足这些技术缺口。


踩坑心得


在课程学习中,我曾因需求理解偏差导致程序逻辑错误,例如在电梯调度程序中未注意 “连续相同请求需过滤” 的要求,致使队列存在重复请求而电梯频繁停靠,在航空货运系统中又因误解危险品运费加价 50% 的规则导致计费结果错误,这让我意识到读题时需逐句标注关键条件,通过 “输入 - 处理 - 输出” 流程图辅助理解并与同学讨论确认需求;初期编程时还存在类设计缺陷,如第一次电梯作业将所有逻辑集中在 Elevator 类,使其代码量达 171 行且 updateDir () 方法嵌套深度达 4 层,后续通过拆分为 Elevator(状态管理)、Controller(调度逻辑)、RequestQueue(请求处理)等类,将单类代码量控制在 80 行以内,复杂度降低 50%,这让我深刻体会到遵循 “单一职责原则” 的重要性,即每个类仅负责一项核心功能,如 Goods 类专注货物属性与计费计算,Order 类管理订单流程;代码复用不足也是常见问题,处理不同类型货物时,NormalGoods.rate () 与 FragileGoods.rate () 存在大量重复代码,通过抽象父类 Goods 提取公共逻辑并让子类重写差异化部分,使代码重复率从 40% 降至 10%,这表明利用继承提取公共属性与方法、通过接口实现行为复用可避免 “复制 - 粘贴” 式编程;调试效率低下曾让我在电梯方向判断错误时耗费数小时通过打印日志逐行排查,直到学习使用 IDEA 的断点调试功能,通过观察变量实时值快速定位到 updateDir () 方法中方向状态更新的逻辑错误,才意识到掌握 “二分法调试”、变量监视、调用栈分析等工具对提升问题定位效率的关键作用。


改进建议及总结


改进建议

在课程优化方面,PTA 作业可通过增加边界测试样例,如电梯最小 / 最大楼层请求、货物重量为 0 等异常场景,全面覆盖程序可能出现的问题,提升代码健壮性;同时对无类图题目提供基础类框架,例如航空货运系统中 Customer 类的属性模板,降低设计难度,帮助学生更快构建合理的程序架构。实验教学需优化提交系统稳定性,增设实时错误提示功能,减少因系统问题带来的时间浪费,并引入代码评审环节,组织小组互评,及时发现类耦合度过高、方法复杂度超标等设计缺陷。在学习方法上,应重视前期设计,运用 UML 类图梳理系统结构,明确类间关系,避免编码后反复重构;借助 SourceMonitor 等工具分析代码圈复杂度,将方法复杂度控制在 10 以内,定期重构复杂方法;此外,还需加强课后拓展学习,通过练习策略模式重构 rate () 方法、探索多线程编程实现电梯多请求并发处理等实践,进一步提升工程开发能力 。

总结

通过本学期学习,不仅掌握了 Java 面向对象编程的核心技术(封装 / 继承 / 多态),更培养了从需求分析到系统设计的完整开发思维。在 PTA 作业与实验中,从 “功能实现” 逐步过渡到 “代码优化”,深刻体会到设计原则对系统可维护性的重要性。未来将继续深化设计模式应用,加强 JavaFX 界面开发与多线程编程能力,为复杂项目开发奠定坚实基础。


posted @ 2025-06-22 17:06  黄玉清  阅读(18)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3