第三次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特性(如
Optional、Lambda)。 - 简单设计模式(如工厂模式、单例模式)。
- 现代Java特性(如
- 删减内容:压缩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项目)。
三、总结
课程价值
本课程成功将学生从"能写代码"引导至"会设计代码",培养了以下核心竞争力:
- 抽象能力:通过类/接口建模现实问题。
- 工程思维:关注可扩展性、可维护性。
- 调试韧性:面对复杂Bug时的系统性排查方法。
展望建议
若能加强以下两点,课程效果会进一步提升:
- 增加真实项目案例(如开发一个简易版"校园选课系统"全程实录)。
- 引入自动化评估工具(如用SonarQube分析学生代码的OOP质量)。
致谢:感谢教师团队的付出!希望这门课程能持续迭代,成为培养优秀软件工程师的摇篮。

浙公网安备 33010602011771号