第三次blog作业-课程总结

第三次blog作业-课程总结
一、前言
首先,我们先讲线上课程。在线上课程中我们通过学堂在线快速地了解这门课程Java的基本内容,和相关设计思路以及实验步骤,让我们能够快速的入门。伴随着线上,线下也开始了授课,通过线上线下双管齐下来让我们打牢基础。平时的作业我们都会布置在pta平台上,有11次题目集,每次的题目集都跟课程紧密相连,主打即学即用,让我们快速上手。当然也有迭代题。这个就很头疼了。每次做这个迭代题都要想很久很久,一开始根本没入门,我的电梯迭代第一版就没做出来。导致我后面进展很慢很慢,其实也怨我没把得分点搞明白,为此我还特地去做了电梯专门研究规律。Emmm,然后第二次第三次就做出来了。费了九牛二虎之力吧。然后呢来到了航空空运管理题这个迭代比电梯要简单了但是这里用到了多态等等新的内容吧我再次慢下来了。然后学完知识点再去做就很快做完。实验的话5次实验。动物进入容器的思维在这里面不仅用到了之前的多态,抽象类,父类子类接口,还有最重要的动画与交互Javafx。这个就头疼了因为代码根本看不懂做起来很痛苦,所幸老师采取了翻转课堂。这样我通过上台讲课的方式了解了许多fx组件,也学会了很多最后也是顺利完成了实验。
二、面向对象技术总结
(1)封装
学习收获
概念理解:封装是将数据和操作数据的方法绑定在一起,隐藏对象的内部实现细节,仅对外暴露必要的接口。在电梯调度程序中,我将电梯的状态(当前楼层、运行方向等)和操作(添加请求、运行电梯)封装在Elevator类中,通过getter和setter方法控制对状态的访问,确保了数据的安全性和一致性。
实践:在航空货运管理系统中,我将货物的基本信息(名称、重量、尺寸等)和计费逻辑封装在Goods类及其子类中,外部只能通过特定方法获取货物的计费重量,而无需了解具体的计算过程(如体积重量与实际重量的比较)。
认知体会
封装能够有效降低代码的复杂性,使类的职责更加清晰。通过限制对内部状态的直接访问,可以避免外部代码对对象状态的意外修改,提高了代码的可维护性和可靠性。例如,在电梯类中,通过封装请求队列的管理方法,确保了请求的添加和处理遵循特定的规则,避免了外部代码直接操作队列可能导致的逻辑错误。
存在不足
在早期的电梯作业中,Elevator类的run方法承担了过多的功能,包括请求调度、状态更新和输出显示等,违背了封装的单一职责原则,导致方法复杂度较高(如第一次作业中Elevator1.run()的复杂度达到 33)。
对输入数据的封装校验不够全面,如在航空货运系统中,初期没有对货物尺寸、重量等输入进行严格的合法性检查,导致程序在处理非法数据时容易出错。
(2)继承
学习收获
概念理解:继承是子类继承父类的属性和方法,允许在不重复编写代码的情况下扩展父类的功能。在点线面问题中,我定义了抽象父类Element,Point类和Line类继承Element,共享display()方法的声明,同时各自实现具体的显示逻辑。
实践:在航空货运系统中,设计了Goods抽象类,OrdinaryGoods(普通货物)、DangerousGoods(危险货物)和UrgentGoods(加急货物)继承Goods,重写finalWeight()方法实现不同类型货物的计费重量计算。
认知体会
继承使得代码的复用性大大提高,通过建立类之间的父子关系,可以在不修改父类代码的情况下,通过子类扩展新的功能。例如,在雨刷系统重构中,通过继承基类实现不同类型雨刷系统的功能,使得程序能够灵活适应不同的需求变化。
存在不足
在魔方问题中,SquareCube类错误地将Solid类型强制转换为Cube类型,导致类型转换异常,这表明对继承关系中的类型兼容性理解不够深入。
有时为了复用代码而过度使用继承,导致类之间的继承关系过于复杂,增加了代码的理解和维护难度。
(3)多态
学习收获
概念理解:多态是指同一个操作作用于不同的对象,可以有不同的解释和产生不同的执行结果。在点线面问题中,通过Element类型的引用调用不同子类(Point、Line、Plane)的display()方法,实现了多态特性。
实践:在航空货运系统的支付模块中,定义了PaymentWay抽象类,AlipayPayment、WechatPayment和CashPayment继承PaymentWay,实现不同的支付逻辑,客户端代码可以统一通过PaymentWay接口调用支付方法,而无需关心具体的支付实现。
认知体会
多态是面向对象编程的核心特性之一,它使得代码具有更强的灵活性和可扩展性。通过多态,我们可以编写与具体对象类型无关的代码,提高了代码的复用性和可维护性。例如,在电梯调度程序中,使用多态处理不同类型的请求,使得系统能够轻松应对请求类型的扩展。
存在不足
在早期的多态应用中,对父类和子类之间的方法重写规则掌握不够熟练,容易出现方法签名不匹配的情况,导致多态无法正确实现。
对多态在实际场景中的应用场景挖掘不够深入,有时未能充分利用多态特性来简化代码结构。
(4)抽象类
学习收获
概念理解:抽象类是包含一个或多个抽象方法的类,不能直接实例化,必须由子类继承并实现所有抽象方法。在点线面问题中,Element抽象类定义了display()抽象方法,强制子类必须实现该方法。
实践在航空货运系统中,Goods抽象类定义了finalWeight()抽象方法,要求子类根据货物类型实现具体的计费重量计算逻辑,确保了所有货物类型都遵循统一的接口。
认知体会
抽象类为子类提供了一个统一的模板,强制子类遵循特定的接口规范,同时又允许子类根据自身特点实现具体的功能。通过抽象类,可以很好地实现代码的复用和扩展。例如,在雨刷系统中,抽象类的使用使得不同类型的雨刷系统能够共享相同的接口,便于系统的维护和升级。
存在不足
对抽象类与接口的区别理解不够透彻,有时会混淆两者的应用场景,导致设计不够合理。
在抽象类的设计中,有时未能充分考虑子类的扩展需求,导致抽象类的接口不够灵活。
(5)接口
学习收获
概念理解:接口是一种抽象类型,定义了一组方法的签名,实现接口的类必须实现所有接口方法。在雨刷系统重构中,使用接口规范了雨刷系统各组件的行为。
实践:在航空货运系统中,虽然没有直接使用接口,但通过策略模式(类似于接口的实现)实现了不同支付方式和客户折扣的算法,如PaymentWay抽象类类似于接口,定义了支付的行为规范。
认知体会
接口是实现松耦合设计的重要手段,它使得类与类之间的依赖关系基于接口而非具体实现,提高了代码的可扩展性和可维护性。例如,在支付模块中,通过接口定义支付行为,使得新增支付方式时只需实现接口,而无需修改现有代码,符合开闭原则。
存在不足
对接口的应用不够广泛,更多时候使用抽象类来实现类似的功能,没有充分发挥接口在多继承场景下的优势。
在接口的设计中,有时未能准确把握接口的粒度,导致接口包含的方法过多或过少,影响了接口的易用性。
(6)集合框架
学习收获
概念理解:Java 集合框架提供了一组常用的数据结构和算法,用于存储和操作数据。在电梯调度程序中,使用ArrayList管理内部和外部请求队列,实现了请求的添加、删除和遍历。
实践:在几何图形管理系统中,使用ArrayList作为容器类,存储点、线、面对象,并实现了添加、删除和遍历操作;在航空货运系统中,使用集合存储货物列表、航班信息等。
认知体会
集合框架的使用大大简化了数据管理的难度,提供了丰富的 API 来操作数据,提高了开发效率。例如,在电梯调度中,使用集合管理请求队列,使得请求的添加和处理更加便捷,同时可以利用集合的迭代器实现对请求的遍历。
存在不足
对集合框架的高级特性(如泛型、迭代器、 Comparator 等)使用不够熟练,更多时候仅使用了基本的添加、删除和遍历操作。
在选择集合类型时,没有充分考虑数据操作的特点(如查找、插入、删除的频率),导致有时选择的集合类型效率不高。
(7)异常处理
学习收获
概念理解:异常处理用于捕获和处理程序运行过程中可能出现的错误,提高程序的健壮性。在早期的作业中,我逐渐认识到异常处理的重要性,并开始尝试在代码中添加异常处理逻辑。
实践:在航空货运系统中,对货物尺寸、重量等输入进行合法性检查,当输入不合法时抛出异常或进行相应的错误处理;在电梯调度程序中,对非法的楼层请求进行过滤。
认知体会
良好的异常处理机制可以使程序在面对错误时更加稳定,避免因异常情况导致程序崩溃。通过捕获异常并进行适当的处理,可以提供更友好的用户反馈,同时也便于开发人员调试和定位问题。
存在不足
异常处理的意识不够强,早期的作业中经常忽略对输入数据的合法性检查和异常处理,导致程序在遇到非法输入时容易出错(如电梯作业中输入非法字符导致程序报错)。
对异常类型的选择和自定义异常的使用不够熟练,更多时候使用了简单的条件判断来处理错误,而不是规范的异常处理机制。
(8)JavaFX
学习收获
概念理解:JavaFX 是用于构建富客户端应用程序的框架,提供了创建图形用户界面的 API。在实验环节的 “动物进入容器” 实验中,首次接触 JavaFX,了解了其基本组件(如按钮、文本框、画布等)和事件处理机制。
实践:通过翻转课堂的方式,我上台讲解 JavaFX 组件的使用,学会了使用 JavaFX 实现简单的动画和交互效果,如动物进入容器的动画展示。
认知体会
JavaFX 为 Java 应用程序提供了强大的图形界面开发能力,相比传统的 AWT 和 Swing,JavaFX 具有更现代的 API 和更好的用户体验。通过 JavaFX,可以轻松实现动画、过渡效果和交互式界面,提升应用程序的用户体验。
存在不足
对 JavaFX 的掌握程度较低,仅停留在基本组件的使用和简单动画的实现,对复杂界面的布局、数据绑定等高级特性了解甚少。
在实验中,面对 JavaFX 的代码时感到困惑,理解和编写代码的难度较大,需要进一步学习和实践。
三、采坑心得
1.开局暴击:基础语法与逻辑陷阱
(1)电梯作业翻车现场
错误示范:第一次写电梯调度,直接在 main 函数里堆了 200 多行代码,逻辑混乱到自己都看不懂。
惨痛教训:一定要先设计类结构!后来用Elevator类封装状态和行为,代码瞬间清爽。
经验值 + 1:面向对象编程第一步 —— 学会 “分模块” 思考。
(2)迭代题的连环暴击
典型错误:电梯迭代题第二版直接推翻第一版重写,浪费整整两天时间。
顿悟时刻:应该用 “增量开发”,先保证旧功能正常,再扩展新需求。
血的教训:千万别高估自己的重构能力,尤其是 deadline 逼近时!
2.面向对象的思维转型阵痛
(1)继承的甜蜜陷阱
翻车案例:在航空系统里为了复用代码,让DangerousGoods继承OrdinaryGoods,结果危险货物的特殊规则把父类逻辑搅得一团糟。
新技能 get:多用 “has-a” 关系,少用 “is-a” 关系。
(2)多态的玄学时刻
迷惑行为:写支付模块时,直接在PayManager类里用大量 if-else 判断支付方式。
重构后:用策略模式 + 接口,新增支付方式只需实现PaymentWay接口。金句收藏:“面向接口编程,而不是面向实现”—— 真・智慧。
四、改进建议及总结
学习总结
通过 PTA 作业和实验的实践,我对面向对象的核心概念(封装、继承、多态)有了较为深入的理解,并能够在实际编程中应用这些概念。同时,对抽象类、接口、集合框架等技术也有了一定的掌握,能够运用这些技术进行简单的系统设计。在航空货运管理系统等复杂项目中,尝试应用设计原则(如单一职责原则、开闭原则等),提高了代码的可维护性和可扩展性。
改进建议
深化面向对象设计原则:进一步理解和应用设计原则,如单一职责、里氏代换、开闭原则等,提高代码的设计质量,减少类之间的耦合度。
加强异常处理能力:提高异常处理的意识,学会合理使用异常处理机制,对程序中的各种异常情况进行全面的处理,提高程序的健壮性。
深入学习 JavaFX:利用课余时间深入学习 JavaFX 的高级特性,如 FXML布局、数据绑定、自定义组件等,提高图形界面开发能力。
拓展集合框架的应用:学习集合框架的高级特性,如泛型、 Comparator、并行流等,根据不同的业务场景选择合适的集合类型,提高数据处理效率。
多实践复杂项目:通过参与更多的复杂项目,如网络应用、数据库应用等,综合运用所学的面向对象技术,提高解决实际问题的能力。

通过对这些面向对象技术的总结,我认识到自己在很多方面还存在不足,需要不断学习和实践,才能真正掌握这些技术,提高自己的编程水平。

posted @ 2025-06-17 00:11  一抹淡影  阅读(52)  评论(0)    收藏  举报