Loading

Object-Oriented Programming 课程总结

🌟 OOP 第三次大作业之课程总结

回顾这一学期的 Java 面向对象课程学习,仿佛一场充满挑战与惊喜的冒险,每一个学习环节都像沿途的风景,深深印刻在我的脑海中。


🚀 (一)前言:跌跌撞撞的学习之路

Blog 作业:从空白文档到知识梳理

起初是个 "甜蜜的负担"
每次面对空白文档都绞尽脑汁:既想梳理知识,又渴望表达独特见解。还记得第一次写 Blog 时,对着屏幕发呆许久才憋出寥寥数语。但随着不断尝试,慢慢找到了节奏,每次写完一篇,看着知识理解从模糊到清晰,成就感便油然而生。

PTA 作业:编程闯关之旅

先苦后甜的成长体验
刚开始觉得特别难,尤其是那道电梯题目,耗费了特别久的时间。但后面的 PTA 作业逐渐适应,越来越得心应手。因为我觉得课程组关注的不是题目难度,而是掌握面向对象的设计原则和思想。

实验作业:从理论到实践

"实战演练场"的奇妙体验
从把大象装进冰箱的生动例子,到使用 JavaFX 实现 GUI 界面,虽然难度不高,却让我真正体会到将代码变成实际应用的乐趣。

线上课程:学习的预热

面向对象学习过程的预热
在我们第一次了解到面向对象技术的就是从线上课程,从集合框架,到面向对象设计原则,再到十分高效的正则表达式,虽然说一开始看的是会觉得比较枯燥,但是对于之后真的有很大的用处。

线下课程:核心的学习

学习真本领的地方
在线下课程中,老师重点给我们讲了面向对象的设计思想,而不是基础语法,这让我明白这种思想的重要性,也让我明白了在解决一到题目之前要多想


🚀 (二)面向对象技术总结:从懵懂到成长

🧩 (1)核心三剑客:封装、继承与多态 基础

1. 封装:数据的守护者

实践感悟:在航空货物系统开发中,通过封装:

  • 数据验证:在Cargo类中通过setWeight(double weight)方法校验重量,若输入负值则抛出异常,确保货物数据合法性;
  • 操作审计:封装setStatus(String status)方法时,自动记录状态变更日志(如“2025-06-18 货物已加入”),便于追溯操作轨迹;
  • 安全隔离:将calculateShippingFee()计费算法设为私有方法,外部仅能通过getTotalFee()获取结果,防止核心逻辑被篡改;
  • 业务抽象:封装CargoType枚举类管理货物类型(普通/危险品/加急),通过getHandlingRules()方法暴露对应处理规则,隐藏底层实现细节。

2. 继承:代码复用的艺术

// 几何图形继承体系
public abstract class Shape {
    public abstract double calculateArea();
}

public class Circle extends Shape {
    @Override
    public double calculateArea() { /* 实现 */ }
}

重构经验:在上面代码中,过度继承可能导致:

  • 新增三角形类时代码冗余
  • 方法重写混乱

解决方案:采用浅继承+组合模式

3. 多态:灵活性的源泉

// 支付系统多态实现
public interface PaymentMethod {
    void processPayment(double amount);
}

public class PaymentProcessor {
    public void executePayment(PaymentMethod method) {
        method.processPayment();  // 多态调用
    }
}

突破时刻:在航空货物管理系统中,用多态替代switch-case

  • 新增支付方式无需修改处理器
  • 实现了解耦和扩展性

🧠 (2)抽象类与接口:架构的艺术

特性 抽象类 接口
核心区别 "是什么"的抽象 "能做什么"的契约
继承 单继承 多实现
典型场景 模板方法模式 策略模式/适配器模式

血泪教训:在航空货物管理系统中:

  • 错误使用接口导致重复实现
  • 无法封装公共状态

重构方案:抽象类提供骨架实现 + 钩子方法


🧰 (3)技术工具箱深度探索

1. 集合框架:数据管理的利器 好用

分类 接口/类 特点 典型应用场景
Collection体系 List(有序可重复) 元素有顺序,可存储重复值 学生名单、任务列表
ArrayList 数组实现,随机访问效率高 频繁查询数据
LinkedList 链表实现,增删操作效率高 消息队列、频繁插入删除场景
Set(无序不可重复) 元素无顺序,自动去重 数据去重、唯一值校验
HashSet 基于哈希表,查询性能最优 快速判断元素是否存在
TreeSet 可按自然顺序或自定义排序 成绩排名、有序数据展示
Map体系 Map(键值对存储) key唯一,通过key快速查找value 字典、配置项存储
HashMap 哈希表实现,查询/插入效率高 缓存、用户信息存储
TreeMap 按key排序,支持范围查询 按时间排序的日志数据

集合框架是Java中处理数据的核心工具,通过接口与实现类的分离设计,让开发者能根据场景选择最优数据结构。学习时需重点掌握:

  • ListSetMap三大体系的区别:List适合有序重复数据,Set用于去重,Map则解决键值对快速查询问题;
  • 实现类特性:如ArrayList的数组底层适合查询,LinkedList的链表结构适合增删,HashMap的哈希表实现让查询效率达O(1);
  • 应用场景:比如用TreeSet做成绩排序,HashMap实现用户缓存,LinkedList处理消息队列等。

掌握集合框架就像拥有“数据容器工具箱”,能根据需求快速选取合适工具,让代码效率与可读性同步提升。

2. 异常处理:系统的安全网 项目开发必备

分类 概念/类 特点 典型应用场景 处理方式示例
异常体系 Throwable 所有异常和错误的父类 - -
Exception 程序可处理的异常,分为受检查异常(Checked)和非受检查异常(Unchecked - -
RuntimeException 非受检查异常(无需强制处理),如NullPointerExceptionArrayIndexOutOfBoundsException 程序逻辑错误导致的异常 使用try-catch捕获或让调用者处理
Error 系统级错误,如OutOfMemoryErrorStackOverflowError 程序无法处理,通常由JVM抛出 优化代码或增加资源(如扩大内存)
处理机制 try-catch-finally 捕获并处理异常 读取文件、网络请求等可能出错的操作 try包裹可能出错的代码,catch捕获特定异常并处理,finally用于释放资源(如关闭文件)
throws 声明方法可能抛出的异常,由调用者处理 方法内部无法完全处理异常时 在方法签名中使用throws声明异常类型,由调用该方法的代码负责处理异常
throw 手动抛出异常 自定义业务异常 根据业务逻辑条件,使用throw手动抛出异常对象(如参数校验不通过时)
自定义异常 继承Exception 创建符合业务需求的异常类 业务规则校验(如余额不足、权限拒绝) 定义继承自ExceptionRuntimeException的类,添加构造方法用于传递异常信息

最佳实践

  • 创建领域特定异常
  • 实现异常转换(SQLException→业务异常)
  • 全局异常处理器统一处理

3. JavaFX:GUI开发之旅 掌握不是很好

graph TD A[Stage] --> B[Scene] B --> C[布局Pane] C --> D[控件/图表] D --> E[事件处理/数据绑定]

学习路径

  1. 基础布局(掌握VBox/HBox/GridPane)→ 2. 事件处理(按钮点击等交互)→ 3. 数据绑定(属性自动同步)→ 4. 组件封装→ 5. CSS样式美化

关键学习体会

  • 布局系统:从随意摆放控件到理解约束机制,用Scene Builder工具大幅提升效率

  • 数据交互:发现Observable对象与界面的自动同步功能,减少大量手动更新代码

  • 线程安全:曾因在后台线程修改UI导致程序崩溃,从此牢记使用Platform.runLater()

下一步目标

  • 学习3D图形开发,尝试制作简单的三维模型展示
  • 研究数据可视化组件,实现动态更新的图表效果
  • 掌握页面转场动画,提升界面交互体验

JavaFX让程序从命令行交互走向可视化界面,是面向用户的重要一步。


🛠 (4)设计模式实战精要 现在会的还不多

1. 工厂模式:对象的诞生

// 简单工厂模式
Shape circle = ShapeFactory.createShape("CIRCLE");

// 工厂方法模式
UIFactory factory = new WindowsUIFactory();
Button button = factory.createButton();

应用场景:在跨平台应用开发中:

  • 隔离具体类创建
  • 轻松支持新平台
  • 保持客户端代码稳定

2. 单例模式:唯一的王者

// 双重检查锁定单例
AppConfig config = AppConfig.getInstance();
String value = config.getConfigValue("key");

实战应用:全局配置管理:

  • 确保所有模块访问同一配置实例
  • 避免重复加载配置文件
  • 提供统一访问点

3. 状态模式:行为的变形金刚

// 电梯状态模式
elevator.setState(new MovingState());
elevator.move();  // 行为随状态变化

解决痛点:在电梯控制系统中:

  • 消除大量if-else状态判断
  • 避免状态转换时的条件竞争
  • 降低新增状态的风险

4. 策略模式:算法的自由切换

// 排序策略应用
sorter.setStrategy(new QuickSort());
sorter.executeSort(data);  // 随时切换算法

项目价值:在数据分析工具中:

  • 运行时动态切换算法
  • 新增算法不影响现有代码
  • 提升单元测试便利性

(5)面向对象设计原则:编程世界的生存法则 重要

在编程进阶的路上,面向对象设计原则才是 “隐藏BOSS”,它们就像游戏攻略,能帮代码少走弯路:

原则名称 核心要点
开闭原则OCP 对扩展开放,对修改关闭,让代码轻松应对新需求,无需大幅改动原有逻辑
单一职责原则SRP 一个类只负责一项任务,确保职责清晰,避免功能混杂造成代码混乱
里氏替换原则LSP 子类能够完全替代父类,保障继承体系稳定可靠
依赖倒置原则DIP 高层模块不依赖底层模块,而是依赖抽象,提升代码可维护性与扩展性
接口隔离原则ISP 将接口拆分为多个小而精的接口,让实现类仅依赖所需接口,防止接口臃肿

这些设计原则相辅相成,掌握它们就像拥有了代码优化的"万能钥匙"。好代码不仅要实现功能,更要经得起时间和需求变化的考验。

这些设计原则看似独立,实则相辅相成。开闭原则像 “主心骨”,指引代码走向灵活扩展的道路,可以说真正用好了开闭原则就好像军师运筹帷幄,决胜千里之外,只需要在现有基础啊上改进而不是推到重来;单一职责原则是 “代码质检员”,确保每个类都专注高效;里氏替换原则为继承关系保驾护航,依赖倒置原则打破层级束缚,接口隔离原则则避免接口臃肿。掌握它们就像拥有了代码优化的 “万能钥匙”,让我在编程路上越走越顺,也让我明白好代码不仅要实现功能,更要经得起时间和需求变化的考验。


💡(三) 采坑心得:在失败中汲取力量

1. 代码规范之痛

"随意命名"的代价
初期不重视规范,变量名随意取,代码排版混乱。结果后期维护时连自己写的代码都看不懂!后来通过代码审查逐渐养成良好习惯:

  • 采用驼峰命名法
  • 保持统一缩进风格
  • 模块化组织代码

2. 调试技巧的觉醒

从盲目修改到精准定位
曾经遇到问题就像在黑暗中瞎摸,盲目修改代码浪费大量时间。学会使用IDE断点调试后:

// 调试技巧三步法:
1. 设置关键断点
2. 逐行跟踪变量变化
3. 观察调用堆栈

3. 注释价值的再发现

"导航灯"的启示
曾认为注释是"无用功",结果项目复杂后完全忘记设计思路。现在深刻理解:

graph LR A[关键代码块] --> B[详细注释] C[复杂算法] --> D[逻辑说明] E[类设计] --> F[设计意图]

4. 知识学习的误区

欲速则不达的教训
急于求成未理解透原理就写代码,导致逻辑错误频出。现在坚持:

  • 先深入理解理论
  • 画UML厘清关系
  • 再动手实践

5. 解题习惯的重塑

谋定而后动的智慧
拿到电梯题目时未认真阅读需求,导致方向错误大量返工,尤其是在写拿到电梯的题目的时候,我并没有认真阅读题目,导致我没有理清需求,甚至我把它丢给 AI,把他认为理解的需求当做题目的需求,实际上有很大的出入。现在采用:

  1. 仔细分析需求
  2. 梳理功能模块
  3. 画流程图规划结构
  4. 编写伪代码框架

(四) 改进建议及总结:感恩与期待

1. 课程建议

1️⃣希望增加更多实际案例
建议在讲解知识点时,加入:

  • 热门开源项目片段分析
  • 商业开发中的真实代码示例
  • 复杂系统的设计演进过程

2. 总结感言

成长的基石

这门课程虽然充满挑战,但也让我收获满满。它不仅让我掌握了 Java 面向对象编程的核心技术,更培养了我解决问题的能力和坚韧不拔的学习态度。然而,学习过程中也存在一些小遗憾,知识的连贯性还有提升空间,部分知识点过渡不够自然,有时会让人感到吃力。

// 致谢代码
System.out.println("感谢老师的耐心教导 ✨");
System.out.println("感谢同学的热心帮助 🤝");
System.out.println("感谢坚持努力的自己 💪");

这些宝贵的经历和知识,将成为我未来编程道路上的坚实基石,引领我走向更远的地方!


最后结语
面向对象不仅是编程范式,更是一种思维艺术。当封装、继承、多态从概念变为手中的工具,当设计原则内化为编码本能,我真正体会到了"对象看世界"的魅力。这学期的每一行代码,每一次调试,每篇博客,都是构建编程大厦的砖瓦,而这座大厦,才刚刚奠基...

posted @ 2025-06-19 00:14  anymore-stay  阅读(25)  评论(0)    收藏  举报

Loading