OOpre第八次作业-博客任务

王雨森-24373080 2025-11-07 01:15:32

OOpre博客任务  

 

在这个博客中,记录一下以下内容:  

作业最终的架构设计, 在迭代中的架构调整及考虑;使用JUnit的心得体会;学习OOPre的心得体会(包括但不限于从面向过程编程过渡到面向对象编程的体会),以及对OOPre课程的简单建议。  

迭代作业的最终架构和迭代过程  

最终架构  

整个项目的类图如下:  

 

在最终作业中,我的架构大致呈现如下特点:  

1.实现`Items和Usable`两个接口,其中`Bottle类和Equipment类`是物品,可以被拥有和携带,`Bottle类和Spell类`是可用事物,可以对某个冒险者使用。  

2.清晰的父类和子类。父类和子类的架构如类图所示,父类提供通用方法,子类通过重写父类方法来实现不同功能。  

3.在`AdventurerManage类`里实现工厂模式,从而对各种指令的实现提供清晰统一的实现方法,实现较为良好的拓展性和可读性。  

4.单独编写`Fight类,HireRelationship类`,分别实现攻击和雇佣,降低类之间的耦合性。在`HireRelationship类`里使用图和BFS来实现雇佣关系。  

在迭代过程中的架构调整及考虑  

整个迭代过程中有两次较大的改动。第一次是在学习了父类和子类,接口这部分内容后,我意识到如果在原来的代码架构上继续添加内容,不仅会使得方法的实现不明晰,还会使得类的耦合性过大,导致后续编写和调试困难,所以我使用了父类、子类、接口的方式来组织架构,使得项目架构清晰。第二次是在学习了工厂模式后,为了统一处理指令,我将指令的实现单独提取出来,在`AdventurerManage类`里实现了工厂模式。  

使用Junit的心得体会  

JUnit让我加深了对测试的重视。之前在学习程设和数据结构的时候,都是在控制台一遍遍地输入测试来对比输出,这在小文件里或许没什么问题,甚至更快,但是在大项目中不仅麻烦,而且还容易因为输入出错等问题导致不必要的问题,而且也不方便逐步调试。在JUnit中,采用`assertTrue`等断言方法,可以较为容易且清晰地实现对方法的精确监控,判断是何处出错,找到bug所在。可以说,JUnit是很好的测试工具。  

学习OOpre的心得体会  

在学习OOpre的过程中,我从面向过程编程过渡到面向对象编程,不仅是掌握JAVA这门新的编程语言的基本语法,还在项目的迭代中不断加深对封装、继承、多态的认知。在之前面向过程编程的时候,题目一般都较为简短,不超过500行代码,大部分都在一两百行上下。那个时候我拿到题目就是思考第一步做什么、第二步做什么,就像个智能计算器一样一步步计算。  

而现在,在学习面向对象编程的过程中,我逐渐领会到了那种把一个功能的实现分解成一个个类,每个对象都有属性(状态)和责任(行为),这样我在设计顶层架构的时候无需着眼于先做什么后做什么,而是着眼于每个类需要实现什么功能,既定它们已经实现各自的功能,在其他地方调用即可,随后再设计类里方法的具体实现。 这样一来,项目就可以逐步分解为一个个功能模块。  

同时,面向对象编程让我第一次体会到了做项目开发的感觉,学会使用IDEA自带的推送提交或者使用命令行进行`git push`等操作,可以方便的进行版本控制,可以为日后更复杂的项目开发打好基础。  

对OOpre课程的简单建议  

我觉得OOpre课程设计的很好,为OO正课打下了坚实的基础。就是建议课程指导书能分解开来,逐步学习,或者延长学习时间、加强引导,而不是在一开始就将课程平台&工具链教程、checkstyle说明、JUnit说明等一口气端上来。这些内容大部分在使用后理解并不困难,但是在一开始大量的新事物(之前大部分同学对gitlab/github,git与版本控制,chekstyle,测试及JUnit都没有了解或者缺乏重视)容易使人困惑。  

OOpre完结撒花!

祝6系越来越好!

...全文
32 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
数据集可视化效果可参见下方展示。 【数据集概况】 · 检测类别(中文):[保龄球(bowling)] · 训练集:594 张 · 验证集:75 张 · 测试集:74 张 · 总计:743 张 该数据集聚焦于室内保龄球馆场景,系统性采集了多角度、多姿态下保龄球在不同运动阶段的视觉特征,为保龄球运动过程中的球体识别与轨迹分析提供了高质量标注样本,具有明确的体育训练与智能辅助系统开发价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 100 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9938** mAP50-95 | 0.6966 Precision | 0.9740 Recall | 0.9974 train/box_loss | 0.9113 train/cls_loss | 0.2862 val/box_loss | 1.1516 val/cls_loss | 0.3116 【训练过程分析】 100 轮训练后 mAP50 达到 0.9938,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。但 mAP50-95 为 0.6966,和 mAP50 差距 0.30,定位精度仍有优化空间。 【模型性能评估】 Precision 0.9740、Recall 0.9974,精召双高,模型对保龄球的检测能力强。 【预测效果展示】 验证集预测效果较好,检测框基本准确覆盖保龄球,置信度整体偏高。 【改进建议】 1. 丰富场景多样性:补充不同光照、背景和遮挡条件下的样本。 2. 提升输入分辨率:640 ...

309

社区成员

发帖
与我相关
我的任务
社区描述
2026年北航面向对象设计与构造
java 高校
社区管理员
  • 孙琦航
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧