第三次Blog作业

第三次Blog作业
前言
初接触这门 Java 课程时,线上学习的模式让我得以通过学堂在线平台快速勾勒出知识框架。课程不仅系统讲解了 Java 的基础概念,还深入剖析了核心设计思想与实验流程,为入门搭建了清晰的认知路径。随着线下授课的展开,线上线下的协同教学模式如同双轨并行,让基础知识的根基愈发牢固。课程作业依托 PTA 平台布置,11 次题目集紧密贴合教学进度,形成了 “即学即练” 的实践闭环。其中迭代题的设计颇具挑战性,像电梯调度问题的第一版实现就曾让我陷入困境,后来通过拆解问题逻辑、反复推敲规律才逐步突破。而航空货运管理系统的迭代虽相较简单,但多态等新知识的融入又让我经历了从困惑到贯通的学习历程。5 次实验则将知识应用推向更深层次,尤其是 “动物进入容器” 实验中,JavaFX 动画与交互编程的陌生领域曾让我举步维艰,所幸通过翻转课堂的主动学习模式,在讲台分享中深入理解了 FX 组件的运作机制,最终顺利完成了实验目标。

面向对象技术总结
(1)封装
学习收获:封装的核心在于将数据与操作逻辑捆绑,隐藏内部实现细节,仅通过接口对外提供服务。在电梯调度系统中,我将电梯的运行状态(当前楼层、方向)及请求处理逻辑封装在Elevator类中,通过getter/setter严格控制数据访问,避免外部直接修改导致状态紊乱。在航空货运系统中,货物的重量计算逻辑(如体积重与实际重的比较)被封装在Goods类及其子类中,外部仅能通过getFinalWeight()获取计费结果,确保业务逻辑的一致性。
实践反思:早期设计中,Elevator类的run()方法混杂了请求调度、状态更新和日志输出等功能,违背单一职责原则,导致方法复杂度高达 33。此外,航空货运系统初期未对货物尺寸、重量进行合法性校验,当输入非法数据时易引发程序异常,暴露了封装层面的校验缺失。
(2)继承
学习收获:继承通过子类复用父类属性与方法,实现代码的扩展与复用。在点线面几何问题中,抽象父类Element定义display()方法,Point与Line子类继承后各自实现显示逻辑,避免了重复编码。航空货运系统中,Goods抽象类派生出OrdinaryGoods(普通货物)、DangerousGoods(危险货物)等子类,通过重写finalWeight()方法实现不同货物的计费规则,体现了 “共性抽取、个性扩展” 的设计思想。
认知误区:魔方问题中曾错误地将Solid类型强制转换为Cube类型,引发类型转换异常,本质是对继承体系中类型兼容性理解不足。此外,为追求复用而过度使用继承,导致类层级过深(如SpecialGoods多层继承Goods),增加了代码维护难度。
(3)多态
学习收获:多态使同一操作在不同对象上产生差异化行为。点线面问题中,通过Element类型引用调用display()方法,自动委派至Point、Line等子类的具体实现。航空货运的支付模块中,PaymentWay抽象类定义支付接口,AlipayPayment、WechatPayment等子类实现不同支付逻辑,客户端代码可统一通过接口调用,无需关心具体实现,体现了 “接口抽象、实现分离” 的设计优势。
应用短板:初期常因方法签名不匹配(如返回值类型不一致)导致多态失效,对父类与子类方法重写的规则掌握不扎实。此外,在电梯请求处理中,未能充分利用多态处理不同类型请求(如紧急请求与普通请求),仍依赖if-else分支判断,代码扩展性受限。
(4)抽象类
学习收获:抽象类通过抽象方法强制子类遵循接口规范,同时提供部分实现以复用代码。Element抽象类定义display()抽象方法,确保所有子类必须实现图形显示逻辑;Goods抽象类要求子类重写finalWeight()方法,保证计费规则的统一接口。这种 “模板化” 设计在雨刷系统重构中尤为显著,不同类型雨刷通过继承抽象基类共享核心逻辑,同时扩展特有功能。
设计缺陷:曾混淆抽象类与接口的应用场景:在支付方式设计中,误用抽象类而非接口,导致无法支持多继承场景(如同时实现PaymentWay与Discountable接口)。此外,抽象类的接口设计有时未预留足够扩展点,如Goods抽象类未考虑未来新增货物类型的特殊属性,导致子类扩展时需修改父类代码。
(5)接口
学习收获:接口定义行为契约,实现类必须履行全部方法声明,是松耦合设计的关键。雨刷系统重构中,通过接口规范各组件(如电机、控制器)的交互行为,使模块间依赖于抽象而非具体实现。航空货运的支付模块虽未直接使用接口,但策略模式(PaymentWay抽象类)本质上模拟了接口功能,新增支付方式时只需实现接口,符合开闭原则。
应用局限:对接口的应用停留在基础层面,未充分利用其多继承优势(如Flyable & Swimmable接口组合)。接口粒度设计也存在问题:部分接口包含过多方法(如GoodsService接口同时定义计费、存储、运输方法),违背接口隔离原则,增加了实现类的复杂度。
(6)集合框架
学习收获:Java 集合框架提供高效的数据结构与算法,简化数据管理。电梯调度中使用ArrayList管理内外请求队列,通过add()、remove()实现请求的动态维护;几何图形系统用ArrayList存储点线面对象,结合迭代器实现批量遍历。航空货运系统则利用集合存储货物列表、航班信息,借助HashMap实现货物编号到货物对象的快速映射。
性能优化不足:对集合高级特性(泛型、Comparator、并行流)使用有限,如电梯请求队列未使用泛型约束请求类型,导致类型安全隐患。在选择集合类型时未充分考虑业务场景:货物查询频繁的场景中仍使用ArrayList而非HashSet,查找效率低下。
(7)异常处理
学习收获:异常处理机制提升程序健壮性,通过捕获运行时错误避免程序崩溃。航空货运系统中对货物重量(如负数)、尺寸(非正数)进行合法性校验,若输入非法则抛出IllegalArgumentException;电梯调度过滤非法楼层请求(如负楼层),防止无效数据干扰系统逻辑。
意识薄弱点:早期作业缺乏异常处理意识,电梯输入模块未过滤非法字符,导致程序因NumberFormatException崩溃。此外,异常处理方式粗放:部分场景仅用try-catch包裹代码块却未做具体处理,或直接抛出Exception而非细分异常类型,不利于错误定位与修复。
(8)JavaFX
学习收获:JavaFX 提供富客户端开发能力,在 “动物进入容器” 实验中,通过Button、Canvas等组件实现交互界面,结合事件监听(如点击按钮触发动物移动)与动画过渡(TranslateTransition)展示动态效果。翻转课堂的讲解实践让我深入理解了Scene布局、FXML加载等基础机制,掌握了简单动画的实现逻辑。
技术瓶颈:仅停留在基础组件使用,对复杂布局(如GridPane嵌套)、数据绑定(ObservableList)等高级特性理解不足。实验中面对 JavaFX 代码时,因缺乏对Stage生命周期、事件冒泡机制的认知,常出现界面响应异常,需进一步系统学习。

踩坑心得

  1. 基础语法与逻辑构建的盲区
    电梯调度的初始困境:首次尝试电梯调度程序时,在 main 函数中堆砌了近 200 行代码,逻辑交织如同乱麻,连自己复盘时都难以理清执行脉络。这让我深刻意识到,面向对象编程必须先建立清晰的类结构设计,后续将状态与行为封装进 Elevator 类后,代码的可读性与可维护性显著提升。
    迭代开发的策略误区:电梯迭代题第二版开发时,错误地采取了推倒重来的策略,两天时间耗费在重复编码中。后来才领悟到 “增量开发” 的精髓 —— 应先确保原有功能的稳定性,再逐步叠加新需求,盲目重构只会在 Deadline 压力下加剧开发风险。
  2. 面向对象思维的转型挑战
    继承关系的误用陷阱:在航空货运系统设计中,为追求代码复用让危险货物类继承普通货物类,却因特殊业务规则的冲突导致父类逻辑紊乱。这一教训让我明白,“组合优于继承” 的设计原则更为实用,多用 “has - a” 关联关系而非强制 “is - a” 继承关系。
    多态应用的浅层实践:支付模块初期开发时,在管理类中使用大量 if - else 判断支付方式,代码扩展性极差。重构时引入策略模式与接口机制后,新增支付方式只需实现接口即可,真正体会到 “面向接口编程” 带来的灵活性。

通过课程学习与项目实践,我对封装、继承、多态等面向对象核心概念的理解从理论层面过渡到了应用层面,能够在电梯调度、航空货运等系统中合理运用抽象类、接口与集合框架进行模块设计。在复杂项目开发中,尝试遵循单一职责、开闭原则等设计规范,逐步提升代码的可维护性。但在 JavaFX 高级特性运用、异常处理机制完善、集合框架深度应用等方面仍存在明显短板,需要通过系统性学习与更多项目实践来弥补。

改进建议及总结
设计模式深化:重点研究工厂模式、观察者模式等常用设计模式,理解其在复杂系统中的应用场景,通过实际项目练习提升架构设计能力,降低模块间的耦合度。
JavaFX 进阶学习:以 FXML 布局与数据绑定为切入点,深入探索 JavaFX 的动画引擎与自定义组件开发,结合案例实践掌握复杂界面的布局策略,提升 GUI 应用的交互体验设计能力。
异常处理体系化构建:系统学习 Java 异常体系,建立规范的异常处理流程,针对输入校验、资源释放等场景设计定制化异常类,增强程序在边界条件下的稳定性。
集合框架高级特性应用:深入掌握泛型擦除机制、Comparator 函数式接口及并行流处理等技术,根据业务场景选择最优集合类型(如 ConcurrentHashMap 用于高并发场景),提升大数据量处理效率。
通过课程学习与项目实践,我对封装、继承、多态等面向对象核心概念的理解从理论层面过渡到了应用层面,能够在电梯调度、航空货运等系统中合理运用抽象类、接口与集合框架进行模块设计。在复杂项目开发中,尝试遵循单一职责、开闭原则等设计规范,逐步提升代码的可维护性。但在 JavaFX 高级特性运用、异常处理机制完善、集合框架深度应用等方面仍存在明显短板,需要通过系统性学习与更多项目实践来弥补。这门课程如同面向对象编程的启蒙之旅,从语法夯实到架构设计,从单一功能实现到复杂系统集成,每一次作业与实验都是认知迭代的契机。尽管在学习过程中频繁遭遇思维瓶颈,但通过拆解问题、重构代码、总结规律的循环实践,逐渐建立起面向对象的编程思维。未来需以更系统的学习计划填补技术盲区,在实际项目中锤炼代码设计能力,让面向对象的思想真正融入软件开发的全流程。

posted @ 2025-06-21 22:29  soShy  阅读(19)  评论(0)    收藏  举报