第三次总结Blog
**面向对象程序设计课程学习总结**
一、前言:课程学习概要
在面向对象程序设计这门课程的学习过程中,我经历了从理论到实践的全面锤炼,通过 Blog 作业、PTA 编程任务、实验项目以及线上线下课程的系统学习,对面向对象编程思想有了深入的理解与掌握。
课程工作量与难度概述
课程内容丰富,涵盖了面向对象编程的核心概念与实践应用。从基础的类与对象定义,到复杂的系统架构设计,每个学习环节都层层递进。Blog 作业中,我通过记录编程实践的心路历程,深入思考面向对象编程的本质;PTA 作业则通过一系列编程题目,从身份证校验码计算到复杂的电梯调度系统、航空货运管理系统,逐步提升了编程实战能力;实验环节从简单的 "大象装冰箱" 模拟开始,逐步引入继承、多态、接口等高级特性,最终实现了带有图形界面的复杂系统。
线上课程提供了灵活的学习资源,线下课程则通过老师的讲解与互动,加深了对重难点的理解。整体而言,课程工作量适中,难度梯度设置合理,从基础概念到复杂应用逐步提升,既保证了初学者的入门,又为深入学习提供了挑战。
二、面向对象技术总结
封装、继承与多态:面向对象的核心
封装:数据与行为的统一

通过 PTA 作业中电梯系统的设计,我深刻理解了封装的重要性。将电梯的状态、运行逻辑封装在独立的类中,通过私有属性和公共方法实现数据的保护与访问控制。例如,在电梯类中,将当前楼层、运行方向等属性设为私有,通过公共方法进行操作,避免了外部直接访问可能导致的数据不一致。
在实验项目中,动物类与电器类的设计进一步强化了封装概念。每个类都明确了自己的职责,如动物类封装了体重、攻击力等属性,以及攻击、移动等行为,电器类则封装了容量、状态及动物管理逻辑。这种封装使得代码结构清晰,维护性大大提高。
继承:代码复用的基石
继承的应用贯穿于整个课程学习。从简单的点线面几何图形继承体系,到复杂的动物类层次结构(大象、狮子、老虎继承自抽象动物类),我学会了如何通过继承实现代码复用与功能扩展。
在航空货运管理系统的 PTA 作业中,通过 Person 基类派生出 Customer、Sender、Receiver 等子类,复用了基础的个人信息管理功能,同时添加了各自特有的属性与行为。这不仅减少了代码重复,还使得类的层次结构更加清晰,符合 "is-a" 的面向对象设计原则。
多态:接口统一与行为差异
多态的应用是课程中的一大重点与难点。通过抽象类与接口的使用,实现了 "同一个接口,不同实现" 的多态特性。例如,在图形类的 PTA 作业中,定义抽象基类 Element,派生出 Point、Line、Plane 等子类,每个子类实现自己的 display () 方法,通过基类引用调用时展现出不同的行为。
在实验中,动物类的 roar () 方法通过多态实现了不同动物的差异化叫声,电器类的排序方法也通过多态支持不同的排序策略。这种多态性使得系统具有更强的扩展性,当需要添加新的动物或排序策略时,只需实现相应的接口或继承抽象类,而无需修改原有代码。

抽象类与接口:设计的抽象与规范
抽象类:部分实现的模板
抽象类的使用在复杂系统设计中尤为重要。在电梯调度系统的 PTA 作业中,抽象类定义了电梯的基本行为框架,子类实现具体的调度逻辑。这种方式既保证了代码的复用,又强制子类遵循统一的接口规范。
实验中的 Electric 抽象类定义了电器的基本属性与方法,IceBox、Microwave 等子类继承并实现具体功能,确保了整个电器体系的一致性与可扩展性。
接口:行为的契约
接口的应用使得系统组件之间的松耦合成为可能。在实验四与实验五中,定义 Attackable 接口规范了动物的攻击行为,实现该接口的动物类必须提供攻击相关的方法。这种接口编程的方式使得系统模块之间依赖于抽象而非具体实现,提高了代码的可维护性与可测试性。
在排序功能中,通过 Comparator 接口实现不同的排序策略,使得排序逻辑与数据类分离,符合 "开闭原则",便于添加新的排序方式而不修改原有代码。
集合框架:数据管理的利器
Java 集合框架的应用在课程中逐步深入。从最初的数组使用,到 PTA 作业中使用 ArrayList、LinkedList 等动态集合管理请求队列,再到实验中使用 ObservableList 实现图形界面的数据绑定,我掌握了不同集合类型的特点与适用场景。
在电梯调度系统中,使用队列存储电梯请求,通过 List 管理楼层状态;在航空货运系统中,使用数组与集合结合存储货物信息。特别是在 JavaFX 图形界面的实验中,通过 ObservableList 实现数据与界面的自动同步,深刻体会到集合框架在现代 Java 编程中的重要性。
异常处理:程序健壮性的保障
虽然课程中异常处理的内容相对较少,但在 PTA 作业与实验中,我学会了基本的异常处理机制。例如,在输入处理中添加空指针检查,在文件读取时使用 try-catch 块处理可能的 IO 异常,在数组操作前检查边界条件等。
这些实践让我认识到异常处理不仅是代码的 "错误处理" 部分,更是程序健壮性设计的重要组成部分。尽管在复杂异常场景的处理上还有不足,但基本的异常处理习惯已经养成。
JavaFX:图形界面的开发
实验五引入 JavaFX 图形界面开发,是对面向对象编程的综合应用。从布局管理(BorderPane、HBox 等)到事件处理(鼠标点击、按钮动作),再到动画效果(动物移动动画),我掌握了 JavaFX 的基本开发流程。
通过将之前的动物 - 电器模拟系统转化为图形界面应用,学会了如何将业务逻辑与界面展示分离,如何使用 JavaFX 的属性绑定与事件机制实现交互功能。这部分内容虽然难度较大,但通过实践加深了对面向对象设计在 GUI 应用中的理解。
技术掌握情况总结
已掌握的技术:封装、继承、多态的基本应用,抽象类与接口的设计,Java 集合框架的常用类(List、Queue 等),基本的异常处理,JavaFX 的基础界面开发。
需要进一步提升的技术:复杂异常处理机制,JavaFX 的高级特性(如自定义组件、数据可视化),设计模式的深入应用(如工厂模式、观察者模式),多线程编程在图形界面中的应用。
三、采坑心得:弯路与经验
设计初期的职责混乱
在 PTA 电梯作业的初期,我将输入处理、调度逻辑、输出操作等功能集中在一个类中,导致类的职责过于复杂,代码维护困难。例如,evaloter 类同时处理请求解析、电梯调度和结果输出,违反了 "单一职责原则"。
经验教训:在系统设计初期,应明确每个类的职责,遵循 "单一职责原则",通过类的合理拆分降低耦合度。可以通过绘制类图辅助设计,确保每个类专注于一个核心功能。
继承与接口的误用
在实验三的动物类设计中,曾错误地将一些动物特有的行为放在基类中,导致子类不得不实现一些不适用的方法。例如,将 "攻击" 行为放在抽象动物基类中,而大象类实际上不具有攻击性,造成了设计上的不合理。
经验教训:继承关系应严格遵循 "is-a" 原则,接口的定义应聚焦于行为契约而非实现细节。在设计继承体系时,应先明确基类的共同特征,避免将特殊行为放入基类。接口的设计应考虑其适用性,确保实现类确实需要该接口定义的行为。
集合操作的空指针风险
在多个 PTA 作业和实验中,曾因未检查集合是否为空或元素是否存在而导致空指针异常。例如,在处理请求队列时,未检查队列是否为空就直接获取元素,导致程序崩溃。
经验教训:对集合进行操作前,必须检查集合是否为空(isEmpty ()),在访问集合元素前检查元素是否为 null。可以使用 Java 8 的 Optional 类或防御性编程来避免空指针异常,养成良好的编程习惯。
多态实现中的类型转换问题
在实验四的比较器实现中,由于类型转换错误导致排序逻辑异常。例如,在比较动物战斗力时,未正确处理不同子类的类型,导致运行时异常。
经验教训:在多态应用中,类型转换应谨慎进行,尽量通过接口或抽象类定义统一的操作,避免过多的强制类型转换。可以使用 instanceof 关键字进行类型检查,确保转换的安全性。
JavaFX 界面与业务逻辑的耦合
在实验五的图形界面开发初期,将业务逻辑(动物攻击、电器管理)与界面代码混合在一起,导致代码结构混乱,维护困难。
经验教训:遵循 MVC(模型 - 视图 - 控制器)设计模式,将业务逻辑(模型)与界面展示(视图)分离,通过控制器处理用户交互。这样可以提高代码的可维护性与可测试性,便于后续功能扩展。
四、改进建议与总结
课程改进建议
实验内容的渐进式设计
现有实验从简单到复杂逐步推进,但在某些环节可以增加过渡性实验。例如,在引入 JavaFX 之前,可以增加一个使用 Swing 或更简单的图形库的实验,作为 GUI 开发的入门,降低学习难度。
设计模式的早期引入
面向对象设计模式是提升代码质量的重要手段,可以在课程中期适当引入简单的设计模式(如工厂模式、观察者模式),通过实例讲解其应用场景,帮助学生养成良好的设计习惯。
多线程编程的结合
电梯调度等场景天然适合多线程编程,可以在 PTA 作业或实验中加入多线程实现,如电梯的多线程调度、图形界面的异步操作等,提升学生对并发编程的理解。
代码审查与重构环节
可以在课程中增加代码审查与重构练习,让学生分析现有代码的不足,提出改进方案并实施重构。这有助于培养学生的代码优化能力,深入理解面向对象设计原则。
个人学习总结
通过本门课程的学习,我系统掌握了面向对象编程的核心概念与实践技能,从类与对象的基础到复杂系统的设计与实现,每个环节都经历了从理论到实践的完整过程。PTA 作业锻炼了我的编程实战能力,实验项目提升了综合应用水平,Blog 作业则促进了对编程思想的深入思考。
在学习过程中,我深刻体会到面向对象编程不仅是一种编程技术,更是一种解决问题的思维方式。通过封装、继承、多态等特性,将现实世界的复杂问题抽象为计算机可处理的对象模型,这种思维方式对今后的软件开发具有深远影响。
尽管在技术掌握上还有不足,如复杂设计模式、多线程编程等方面需要进一步学习,但课程奠定的基础为未来的深入学习提供了良好的起点。我将继续巩固所学知识,通过更多的项目实践提升自己的软件开发能力,逐步成长为一名合格的软件开发者。
浙公网安备 33010602011771号