第三次Blog作业

前言

(对整门课程的Blog作业、PTA作业、实验、线上课程以及线下课程的工作量、难度等进行概要性总结)

1. Blog作业

工作量:★★★★☆ (4/5)

每几周一篇技术博客,约1500-2000字
需要结合实际代码示例和分析
后期需要加入UML图等设计元素

难度:★★★☆☆ (3/5)

初期较简单,主要是语法和基础概念
后期涉及设计模式和架构时难度提升
表达清晰的技术思想比编码本身更具挑战

2. PTA作业

工作量:★★★☆☆ (3/5)

平均每周2-3题,题目数量适中
部分题目需要反复调试和优化

难度:★★★★☆ (4/5)

基础题目考察语法掌握
综合题目涉及算法与OOP结合
部分题目对时间复杂度和设计模式有严格要求

3. 实验环节

工作量:★★★★★ (5/5)

实验报告撰写耗时较长
代码实现需要反复测试和修改

难度:★★★★☆ (4/5)

从简单类设计到完整系统开发循序渐进
后期实验涉及多线程、网络编程等复杂概念
调试和异常处理考验综合能力

4. 线上课程

工作量:★★☆☆☆ (2/5)
视频观看和在线测验时间可控
讨论区参与要求适度

难度:★★☆☆☆ (2/5)

内容多为概念讲解和基础示例
可作为线下课程的补充

5. 线下课程

工作量:★★★☆☆ (3/5)

课前预习和课后复习需要时间
课堂练习和随堂小测压力适中

难度:★★★☆☆ (3/5)

理论讲解深入浅出
课堂互动和即时反馈有助于理解
部分设计思想需要课后消化

课程主要收获:

掌握了面向对象的核心思想(封装、继承、多态)
熟悉了常用设计模式的应用场景
提升了系统设计和代码重构能力
培养了良好的编程习惯和文档撰写能力

总结

面向对象程序设计课程通过多元化的教学方式,有效培养了我们的编程思维和工程能力。虽然工作量较大,但收获与付出成正比,为后续软件开发和系统设计打下了坚实基础

面向对象技术总结

(结合各个教学环节(PTA作业,实验)重点总结个人对封装、继承、多态、抽象类、接口、集合框架、异常以及JavaFX等相关内容掌握情况的总结,学到了什么,对各部分技术的认知,哪些技术掌握有欠缺等)

1. 封装(Encapsulation)

学习内容与掌握情况

PTA作业:在类设计题目中,通过私有字段(private)和公有方法(getter/setter)实现数据隐藏,确保对象状态的完整性。

实验中,使用封装保护关键数据,避免外部直接修改。

认知与收获

优点:提高了代码安全性,降低耦合度,便于维护。

应用场景:适用于所有需要数据保护的类,如实体类(Student, Account)。

欠缺:在复杂系统中,有时过度封装会导致方法过多,需权衡封装粒度。

2. 继承(Inheritance)

学习内容与掌握情况

PTA作业:通过extends实现类继承,如Animal→Dog,复用父类代码。

实验:在GUI开发(JavaFX)中,继承Application类;

认知与收获

优点:减少重复代码,提高复用性。

缺点:过度继承可能导致类层次复杂(如"菱形继承"问题)。

欠缺:对super关键字的使用还不够熟练,多重继承(Java用接口替代)的理解需加强。

3. 多态(Polymorphism)

学习内容与掌握情况

PTA作业:方法重写(@Override)和重载(overload),如Shape→Circle/Rectangle的draw()方法。

实验:在事件处理(如JavaFX的EventHandler)中,利用多态实现不同控件的统一回调。

认知与收获

运行时多态(动态绑定):父类引用指向子类对象(Animal a = new Dog())。

编译时多态(静态绑定):方法重载。

欠缺:对instanceof和类型转换((Dog) a)的使用不够熟练,需加强实践。

4. 抽象类(Abstract Class)与接口(Interface)

学习内容与掌握情况

PTA作业:定义抽象类(abstract class Shape)和接口(interface Drawable),强制子类实现特定方法。

实验:在数据库连接、游戏角色技能系统中,使用接口定义规范(如Flyable, Attackable)。

认知与收获

抽象类	接口
可以有具体方法	默认所有方法抽象(Java 8+允许default方法)
单继承	多实现
适用于"is-a"关系	适用于"can-do"关系
欠缺:

对default方法的使用场景不熟悉。

在大型项目中,如何合理设计抽象类和接口仍需经验积累。

5. 集合框架(Collections Framework)

学习内容与掌握情况

PTA作业:使用ArrayList、HashMap等存储和操作数据,如学生成绩统计、词频统计。

实验:在文件管理系统、社交网络模拟中,用集合存储对象并实现查询、排序。

认知与收获

常用类:

List(有序可重复):ArrayList(查询快)、LinkedList(增删快)

Set(无序唯一):HashSet、TreeSet

Map(键值对):HashMap、TreeMap

欠缺:

对ConcurrentHashMap等线程安全集合了解较少。

复杂数据结构的嵌套(如Map<String, List<Student>>)操作不够熟练。

6. 异常处理(Exception Handling)

学习内容与掌握情况

PTA作业:使用try-catch-finally处理输入/输出异常(如FileNotFoundException)。

实验:在数据库连接、网络通信中处理SQLException、IOException。

认知与收获

检查型异常(Checked):必须处理(如IOException)。

非检查型异常(Unchecked):运行时异常(如NullPointerException)。

自定义异常:继承Exception或RuntimeException。

欠缺:

异常链(e.initCause())和try-with-resources使用较少。

有时过度捕获异常(catch (Exception e)),应更精准处理。

7. JavaFX(GUI开发)

学习内容与掌握情况

实验:实现计算器、图书管理系统界面,使用FXML+SceneBuilder设计布局,Controller处理事件。

认知与收获

核心组件:

Stage(窗口)、Scene(场景)、Pane(布局)

Button、TextField、TableView等控件

数据绑定:ObservableList与TableView联动。

欠缺:

动画(Timeline)、CSS样式应用较少。

多窗口交互(如Dialog)需加强练习。

总结

掌握较好的部分

封装、继承、多态的基本使用

集合框架的常见操作(List、Map)

基础异常处理

需加强的部分

高级多态:如泛型(Generic)、instanceof的合理使用。

接口与抽象类:在大型项目中如何选择?

JavaFX高级功能:动画、CSS、多线程UI更新。

异常处理优化:避免过度捕获,使用try-with-resources。

后续学习方向

深入理解设计模式(如工厂模式、观察者模式)。

结合数据库(JDBC)和网络编程(Socket)进行综合项目练习。

学习JavaFX的MVVM架构(如FXMLLoader+ViewModel)。

通过本课程,我对面向对象编程的核心思想有了系统性认识,但在实际工程应用(如大型项目架构、性能优化)上仍需积累经验。后续计划通过开源项目和实战练习进一步提升OOP能力。

采坑心得

(总结整门课程学习过程中走的弯路以及吸取的经验教训等)

1. 基础概念理解不深,导致后续学习困难

踩坑经历

初期轻视封装:刚开始觉得private+getter/setter太麻烦,直接使用public字段,结果在PTA作业中因数据被意外修改而调试半天。

多态理解模糊:曾误以为Animal a = new Dog()后,a只能调用Animal的方法,直到实验要求实现"不同子类不同行为"时才真正理解。

经验教训

✅ 基础必须扎实:OOP的四大特性(封装、继承、多态、抽象)是核心,前期多花时间理解,后期才能事半功倍。
✅ 多写Demo验证:通过简单代码测试概念(如多态的方法调用规则),比死记硬背更有效。

2. 实验设计不合理,代码重构代价大

踩坑经历

过度耦合:在"图书管理系统"实验中,最初把界面逻辑(JavaFX)和数据处理直接混在一起,导致后期无法替换GUI框架。

忽视接口作用:曾用一个具体类MySQLConnection直接操作数据库,当实验要求支持SQLite时,不得不重写大量代码。

经验教训

✅ 遵循设计原则:
单一职责原则:一个类只做一件事(如BookService管逻辑,BookRepository管存		储)。
依赖倒置:依赖接口(如DatabaseConnection),而非具体实现。
✅ 先画UML再编码:实验前用类图明确关系,避免后期大改。

3. 集合框架使用不当,引发隐蔽Bug

踩坑经历

误用ArrayList删除元素:在遍历时直接list.remove(i),导致 ConcurrentModificationException。

HashMap键对象未重写equals/hashCode:自定义类作为Key时,出现"找不到已存在的键"问题。

经验教训

✅ 掌握集合特性:

- ArrayList删除元素要用Iterator.remove()。
  - HashMap的Key必须不可变,且正确重写equals/hashCode。
✅ 善用Java Stream:如list.stream().filter(...).collect(...)可减少手动循环的错误。

4. 异常处理草率,调试困难

踩坑经历

吞掉异常:早期常写catch (Exception e) {},导致程序静默失败,难以定位问题。

异常信息不明确:自定义异常时只写throw new MyException("Error"),未携带上下文信息。

经验教训

✅ 精准捕获异常:
 - 区分检查型异常(如IOException)和运行时异常(如NullPointerException)。
 - 使用try-with-resources管理资源(如文件流)。
✅ 异常信息丰富化:

- 抛异常时包含关键参数:throw new FileParseException("Failed to parse " + fileName, lineNumber)。
 - 使用e.printStackTrace()或日志工具(如SLF4J)记录堆栈。

5. JavaFX开发中的典型问题

踩坑经历

UI卡顿:在按钮事件中直接执行耗时操作(如数据库查询),导致界面冻结。

线程安全问题:非JavaFX线程误操作UI控件,引发"Not on FX application thread"异常。

经验教训

✅ 多线程规范:

- 耗时任务用Task+Service,在后台线程执行。
  - 更新UI必须通过Platform.runLater()。
✅ 使用数据绑定:
 - TableView绑定ObservableList,数据变化自动刷新UI。
  - 避免手动调用table.refresh()。

6. 其他零散但重要的教训

PTA提交前的检查:

多次因"输出格式不符"(如多一个空格)被判0分。

解决方案:复制题目样例输入/输出,逐字符对比。

版本管理混乱:

实验代码未用Git管理,误删后无法恢复。

解决方案:即使个人项目也要 commit + 写注释(如"实验3-初步封装")。

过度设计问题:

曾为简单作业强行套用设计模式(如用工厂模式创建只有2种的Animal),反而增加复杂度。

解决方案:KISS原则(Keep It Simple, Stupid),适合场景再引入模式。

总结:如何避免重复踩坑?

1.建立Checklist

2.写代码前问:

是否需要封装?字段是否该private?

是否有更好的接口/抽象类设计?

异常处理是否完备?

3.小步快跑,频繁测试

每完成一个小功能就测试(如新增一个方法后立即写单元测试)。

4.善用工具

IDE的调试器(断点、变量监视)。

JUnit单元测试验证核心逻辑。

5.代码审查(哪怕自我审查)

写完代码后,隔半天再以"批判视角"重新看一遍,常能发现隐藏问题。

最终心得:面向对象编程不仅是技术,更是一种思维习惯。踩坑不可怕,关键是每次踩坑后能提炼出可复用的经验,这才是课程最大的价值。

改进建议及总结

(对整门课程的综合性总结,以及对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见)

面向对象程序设计课程综合性总结与改进建议

一、课程综合性总结

1. 课程亮点

  • 理论与实践结合紧密:通过PTA、实验、Blog等多维度训练,强化了OOP思想的实际应用能力。
  • 内容体系完整:从基础语法到设计模式、从命令行到JavaFX,覆盖了OOP的核心技术栈。
  • 考核方式多元:作业、实验、考试相结合,避免了"一考定成绩"的局限性。

2. 个人成长

  • 能力提升
    • 从面向过程思维过渡到面向对象设计(如学会用类图规划系统)。
    • 掌握了Java生态的基础工具链(IDEA、Git、JavaFX Scene Builder)。
  • 认知转变
    • 认识到"代码可维护性"比"快速实现功能"更重要。
    • 理解了设计模式的价值(如用观察者模式解耦UI和逻辑)。

3. 现存不足

  • 部分内容衔接生硬:如集合框架到JavaFX的过渡缺乏实际案例引导。
  • 调试技能训练不足:对如何高效定位复杂Bug(如多线程问题)指导较少。
  • 前沿技术缺失:未涉及现代Java特性(如Stream API、模块化)或行业常用框架(如Spring)。

二、改进建议与意见

1. 对教师的建议

方面 建议
授课方式 - 增加"代码现场重构"环节(如展示如何将冗余代码优化为符合OOP原则的设计)
- 对复杂概念(如动态绑定)用动画/图示辅助讲解。
反馈机制 - 提供PTA作业的典型错误案例解析(如常见编译错误或逻辑缺陷)。
- 实验报告批改时标注具体改进点(而非仅扣分)。
行业结合 - 穿插讲解OOP在企业项目中的应用(如为什么阿里巴巴Java开发手册要求POJO字段必须private)。

2. 对课程设计的建议

  • 内容优化

    • 前置知识强化:在课程初期加入1~2课时专门讲解"如何用IDEA调试"、"Git基础操作"。
    • 新增模块
      • 现代Java特性(如OptionalLambda)。
      • 简单设计模式(如工厂模式、单例模式)。
    • 删减内容:压缩GUI开发中过于细节的API讲解(如GridPane布局的像素级调整)。
  • 难度梯度调整

    graph LR A[基础语法] --> B[封装继承多态] B --> C[集合/异常] C --> D[设计原则] D --> E[设计模式+JavaFX] E --> F[综合项目]

    建议在"集合/异常"和"设计模式"之间增加"代码重构实战"过渡环节。

3. 对作业与实验的改进建议

环节 问题 改进方案
PTA作业 部分题目描述模糊(如输入格式边界条件未说明) 提供更完备的样例输入/输出,甚至附加"常见疑问解答"。
实验 实验指导书步骤过于机械 改为"任务驱动式"描述(如"实现一个支持多账户的银行系统,需满足以下5个需求")。
Blog作业 容易流于技术堆砌 要求结合具体代码分析(如"对比继承与组合在XX实验中的优劣")。

4. 对课程组织的建议

  • 线上资源
    • 建立课程代码仓库(如GitHub),提供标准化的实验脚手架代码。
    • 录制"高频问题解答"短视频(如5分钟讲解ConcurrentModificationException)。
  • 线下互动
    • 开设"代码诊所":学生提交问题代码片段,教师现场分析优化。
    • 增加结对编程实验:两人一组,培养协作和代码审查能力。

5. 对学生自主学习的建议

  • 工具层面
    • 尽早掌握JUnit单元测试(避免手动System.out调试)。
    • 使用PlantUML画类图,替代手绘草图。
  • 方法层面
    • 定期回顾旧代码(如对比第1次和第10次PTA作业,反思进步)。
    • 参与开源项目(如GitHub上good-first-issue标签的Java项目)。

三、总结

课程价值

本课程成功将学生从"能写代码"引导至"会设计代码",培养了以下核心竞争力

  1. 抽象能力:通过类/接口建模现实问题。
  2. 工程思维:关注可扩展性、可维护性。
  3. 调试韧性:面对复杂Bug时的系统性排查方法。

展望建议

若能加强以下两点,课程效果会进一步提升:

  1. 增加真实项目案例(如开发一个简易版"校园选课系统"全程实录)。
  2. 引入自动化评估工具(如用SonarQube分析学生代码的OOP质量)。

致谢:感谢教师团队的付出!希望这门课程能持续迭代,成为培养优秀软件工程师的摇篮。

posted @ 2025-06-16 21:07  良穗  阅读(32)  评论(0)    收藏  举报