总结

一、前言
本课程以Java语言为载体,系统性地构建了面向对象编程(OOP)知识体系。通过为期16周的学习,共完成:

PTA编程作业

实验任务

线上课程视频

线下研讨课

关键挑战:实验任务从“单向链表实现”到“JavaFX图形化库存系统”的跨度较大,需快速整合多模块技术栈。

二、面向对象技术总结
2.1 封装技术
核心认知:通过访问控制符实现数据隐藏

实践案例:PTA作业《银行账户管理系统》中

java
public class BankAccount {
private String accountId; // 账户ID封闭存储
private double balance; // 余额强制通过方法访问

// 外部仅能通过公共方法操作数据
public void deposit(double amount) { 
    if (amount > 0) this.balance += amount;
}

}
掌握不足:初期未合理使用final修饰不可变字段

2.2 继承与多态
技术实践:

继承层次构建:实验二《几何图形系统》中建立Shape→Circle/Rectangle层级

多态应用:使用父类Shape声明对象,运行时动态绑定子类方法

java
List shapes = new ArrayList<>();
shapes.add(new Circle(5.0));
shapes.add(new Rectangle(3,4));

for (Shape s : shapes) {
System.out.println("Area: " + s.calculateArea()); // 多态调用
}
认知误区:曾误将instanceof作为类型判断常规手段,后优化为策略模式

2.3 抽象类与接口
差异化应用:

技术 适用场景 课程案例
抽象类(Abstract) 存在部分共性实现的模板设计 实验四《UI组件库》中AbstractButton
接口(Interface) 定义跨继承体系的行为契约 PTA作业《支付系统》的Payable接口
典型问题:实验五中混淆接口默认方法与抽象类抽象方法的优先级

2.4 集合框架
技术矩阵:

集合类型 时间复杂度 课程应用场景
ArrayList O(1)随机访问 PTA《学生成绩管理系统》
LinkedList O(1)头尾操作 实验三《音乐播放列表》
HashMap O(1)哈希检索 实验六《单词频率统计器》
经验教训:未预分配容量导致ArrayList在实验七万级数据插入时性能下降40%

2.5 异常处理
进阶路线:

graph LR
A[基础语法] --> B[内置异常捕获]
B --> C[自定义异常体系]
C --> D[异常链传递]

关键进步:从统一捕获Exception到精准处理IllegalArgumentException

缺陷记录:实验八中未正确关闭文件流导致资源泄漏

2.6 JavaFX技术栈
技术图谱:

plaintext
界面布局
├─ Pane布局体系
├─ FXML可视化设计
└─ CSS样式分离
事件机制
├─ 事件冒泡
├─ 过滤器
└─ 处理器链
数据绑定
├─ Property监听
└─ Observable集合
成果:独立实现《图书馆管理系统》GUI,支持数据CRUD操作

瓶颈:TableView动态刷新存在渲染延迟问题

三、采坑心得
3.1 设计模式应用失误
问题场景:实验三《电商订单系统》中直接创建对象

java
// 原始代码
Order order = new Order(); // 紧耦合实现
重构方案:引入工厂模式解耦

java
public class OrderFactory {
public static Order createOrder(String type) {
if ("VIP".equals(type)) return new VIPOrder();
else return new StandardOrder();
}
}
经验总结:当存在多个相似对象的创建逻辑时,应优先考虑工厂模式

3.2 集合线程安全问题
故障现象:实验七多线程导入数据时出现ConcurrentModificationException

原理分析:ArrayList的modCount机制与迭代器检查冲突

解决方案:

java
// 错误方式
for (Item item : itemList) {
if (condition) itemList.remove(item);
}

// 正确方案
Iterator iter = itemList.iterator();
while (iter.hasNext()) {
Item item = iter.next();
if (condition) iter.remove(); // 使用迭代器安全删除
}
3.3 JavaFX线程阻塞陷阱
问题重现:

java
button.setOnAction(e -> {
Thread.sleep(5000); // UI线程阻塞!
updateLabel();
});
优化方案:

java
button.setOnAction(e -> {
new Thread(() -> {
// 后台执行耗时操作
Data result = loadDataFromDB();

    Platform.runLater(() -> {
        // 回归UI线程更新
        updateUI(result); 
    });
}).start();

});
四、改进建议及课程总结
4.1 课程优化建议
模块 现存问题 改进方案
实验指导书 异常处理示例不足 增加自定义异常设计场景(如ISBN校验异常)
PTA题库 集合框架题目偏重基础操作 增设并发集合(ConcurrentHashMap)实战题目
JavaFX教学 数据绑定案例深度不够 补充TableView与ObservableList高级绑定案例
课堂组织 设计模式渗透不足 在实验任务中强制应用1-2种设计模式
4.2 技术能力成长
范式转换:从面向过程的函数思维(C语言)到对象协作的建模能力

工程意识:通过异常处理机制建立鲁棒性编码习惯

架构认知:理解接口作为系统解耦核心的价值

4.3 未来学习方向
深化领域:泛型编程与类型擦除机制

横向扩展:Spring Boot框架中的OOP实践

技术整合:JavaFX与JDBC数据库联动优化

结语:
本课程通过严谨的实践训练,使本人系统掌握了面向对象程序设计的核心方法论。在克服了初期封装设计不足、多态理解偏差等技术瓶颈后,最终能够独立完成基于MVC架构的JavaFX应用开发。课程设置的渐进式难度曲线虽具挑战性,但正因如此才得以实现从语法使用者到系统设计者的蜕变。建议后续课程可加强设计模式与架构思想的贯穿教学,使学生在掌握语言特性的同时,提升软件工程全局观。

posted @ 2025-06-22 23:51  新欢远胜旧爱  阅读(25)  评论(0)    收藏  举报