第三次blog作业

面向对象程序设计课程总结
前言
Blog作业回顾
这学期的Blog作业对我来说是个全新的体验。第一次写Blog时简直一头雾水,完全不知道该怎么组织内容。后来偷偷瞄了眼室友的作业才恍然大悟——原来就是把实验的运行结果、类图这些整理出来,再把写代码时遇到的坑都"坦白交代"就行了。到第二次写Blog时就顺手多了,不过每次还是要花不少时间。最麻烦的是,代码通常是一两天前写的,到写Blog时很多小问题已经被IDEA自动解决了,结果写总结时反而想不起来遇到过哪些困难。

PTA作业历程
PTA作业前4次以及后续每次题目集的基础题难度都还算友好,基本都是类设计相关的内容,两小时内都能搞定。整体来说属于中等难度,比如雨刷挡风玻璃的迭代问题、点线面问题的重构这些,努努力都能完成。但电梯那道迭代题真是让我头大!题目要求一直在变,连AI都搞不定,逼得我不得不去自学List和ArrayList的用法。虽然最后也没完全做出来,但至少让我真正学到点东西。后来通过第一次Blog总结,我才清楚地认识到自己在Java学习上的不足,也制定了后续的学习计划。说实话,最怕的还是那个查重系统,生怕一不小心就被拉进黑名单取消考试资格,这种压力反而促使我认真看了不少网课。

航空货运那道迭代题感觉比电梯简单些,我独立完成了整个题目。虽然代码量依然很大,但这次经历让我更有耐心,也更有信心坚持把题目做完。这道题也为后续的JavaFX实验打下了基础(不过JavaFX写起来真是又臭又长,太折磨人了)。

实验经历
五次实验中,最让我印象深刻的就是JavaFX那次。第一次看到那些Button、Pane、Animation的代码时,我整个人都是懵的:这都是些啥?完全看不懂!幸好老师安排了翻转课堂,当我硬着头皮准备讲解fx组件时,突然就开窍了——原来布局就是把组件当积木拼,再给每个积木写"动作剧本"就行!最后成功做出动物进容器的动画时,那种成就感简直爆棚。虽然实验提交系统不能复制粘贴,手打代码打到手指抽筋,但看到最终成果时觉得一切都值了。

线上线下课程
线上课程就像开盲盒,先导课把Java基础概念和设计思路一股脑抛出来,虽然节奏快得像开了倍速,但至少让我明白这门课要学什么。线下课老师直接拎着知识点开讲,这种线上预习+线下复盘的模式,让基础知识打得特别牢固,就像先看攻略再打怪,少走了很多弯路。

面向对象技术总结
封装技术
封装就像给代码穿上"防护服"。在动物容器实验中,我把Elephant类的weight属性设为private,通过setWeight()方法添加非负校验,这样就能防止非法数据污染业务逻辑。PTA航空货运系统中,Goods类封装了体积重量计算:外部调用getBillableWeight()时,内部自动比较实际重量与体积重量(widthlengthheight/6000),完全隐藏了计算细节。不过在大项目中,我对"模块职责单一化"的理解还不够,曾经让Order类同时负责数据存储和业务计算,导致类复杂度偏高。

继承与多态
第10次PTA的继承多态专项训练让我意识到自己在这方面的不足。题目要求通过继承实现类之间的共性抽取,用多态实现同一方法在不同子类中的不同表现。刚开始我连继承关系都理不清,更别说多态的方法重写规则了。后来慢慢明白,继承就像家族遗传,子类自动获得父类的特性;多态则让同一个方法在不同子类中有不同表现。航空货运中,Customer父类定义getDiscountRate()抽象方法,IndividualCustomer子类返回9折,CorporateCustomer返回8折,这就是典型的多态应用。

抽象类与接口
抽象类像是不完整的蓝图,包含部分实现方法,强制子类完成剩余部分;接口则是纯行为契约,只定义要做什么,不管怎么做。实验中,Shape抽象类定义draw()方法,Circle实现类负责具体绘制逻辑;Comparable接口让动物对象可按重量排序。我现在能区分它们的使用场景:抽象类用于"模板复用"(如Animal抽象类包含共同属性),接口用于"能力约束"(如Swimmable接口)。不过有时还是会把接口设计得过于臃肿,比如曾经在Animal接口里塞进eat()、move()等太多方法,违反了接口隔离原则。

集合框架
集合框架就像Java提供的万能工具箱。电梯调度中,我用ArrayList管理请求队列,它能按顺序记录所有内外部的电梯请求,自动扩容,特别适合这种动态增长的场景。PTA统计单词频率时,HashMap<String, Integer>记录出现次数;航空货运中用ArrayList存储货物列表;实验用HashSet自动过滤重复动物。我现在能熟练使用ArrayList的增删改查,用Collections.sort()排序,但对Comparator定制排序还不够熟练。

异常处理
异常处理就像给程序买保险。我学会了用try-catch-finally处理意外情况,比如文件操作时捕获IOException,货物重量非法时抛出InvalidWeightException。翻转课堂GUI设计中,用try-catch包裹用户输入解析,防止非数字输入导致崩溃。不过自定义异常用得还不多,业务错误经常直接用System.out.println提示,这点需要改进。

踩坑心得
电梯调度算法的坑
第一次写电梯调度时,程序总是莫名其妙地报非零返回错误。我以为是算法逻辑有问题,反复检查调度流程无果。后来单步调试才发现,读取输入楼层时用了int存储,导致超过范围的数值被截断成负数(比如31楼变成-xxx)。改成Integer并添加范围校验后才解决。这个坑教会我:永远不要假设用户输入是合法的,必须做严格的校验!

航空货运的格式坑
航空货运作业总是显示"部分错误",我盯着代码看了两小时,计费逻辑、载重校验都没问题。最后把输出复制到记事本逐字比对,才发现"flight number:"和"航班号"之间少了个空格!就因为这个肉眼难辨的细节,导致评测不通过。从此我养成了输出前先用println打印比对的好习惯。

JavaFX的数据绑定坑
动物容器实验里,往TableView添加新动物后界面死活不刷新。原来我用的是普通ArrayList,没换成JavaFX的ObservableList,而且动物属性也没用SimpleStringProperty包装。改成可观察类型后,数据变化自动反应到界面。这个坑让我明白:JavaFX控件就像木偶,必须用Observable集合当"线"才能联动。

改进建议与总结
课程建议
希望能多讲作业题目,因为经过思考的问题印象更深,知道哪里不懂。

实验提交系统实在太难用了,建议支持复制粘贴,每次都坐在电脑前面好几个小时,或者哪怕不让复制粘贴,也弄得好用点吧,就像IDEA里面的功能一样也行啊,好多重复的东西就不用一遍遍的打了。

异常处理应该早点结合基础代码讲解

学习收获
这学期最大的转变是从"写代码"变成"设计代码"了。从最初憋200行电梯程序都费劲,到现在能把航空货运系统拆分成货物、航班、支付等独立模块。动物容器实验让我真正理解了"面向对象不是背语法",而是像搭积木一样设计类与类的关系。现在写完代码会自觉检查复杂度,用单元测试覆盖边界情况,甚至敢看JDK源码研究ArrayList扩容机制,感觉自己真的进步了!

面向对象的核心是五大设计原则:

单一职责:一个类只做一件事

开闭原则:对扩展开放,对修改关闭

里氏替换:子类必须能替换父类

接口隔离:接口要小而专

依赖倒置:依赖抽象而非实现

这些原则就像编程的指南针,帮我写出结构清晰、易于维护的代码。虽然现在还不能完美运用,但至少有了努力方向。下学期要继续钻研设计模式,争取写出更专业的Java代码!

posted @ 2025-06-19 18:06  王鹏鹏飞  阅读(16)  评论(0)    收藏  举报