oo Unit4 总结

72066005 中辻翔太 2026-06-25 18:24:04

一、本单元学到了什么
这单元用“图书馆管理系统”教了一个核心思想:先想清楚再写代码。

三次作业:

借书/还书/预约/查询

精品书架/评分/阅读/归还

信用分/借阅期限/续订

每次迭代都加了新需求,逼着我一开始就把系统设计好,而不是写完了再改。

二、两步建模法
第一步:概念模型——“系统里有什么”

Book(书,按ISBN)

Copy(每本实体书,带副本号)

User(用户)

Location(位置:书架/精品书架/借还处/预约处/阅览室)

Reservation(预约记录)

这一步不管方法和算法,只管实体和关系。

第二步:设计模型——“系统怎么运作”
加上方法、状态机、依赖关系,把概念模型变成可以直接指导编程的设计。

这个方法好在哪:

第一次作业只借还预约,很简单

第二次加了“阅读”和“评分”,状态图帮我发现:阅览室的书不能借

第三次加了信用分,借书还书续订都受影响,顺序图帮我把整个流程串清楚

三、我的架构设计
分层结构:

解析层:把输入命令转成对象

领域层:Book、Copy、User、Reservation

业务层:借书、还书、预约、阅读、评分、续订各一个Service

调度层:每天开闭馆时做清理(过期预约、精品书架整理)

输出层:控制输出顺序和查询历史

关键设计:把Copy的位置做成状态机(不是简单字符串),所有位置变化都通过moveTo()方法,自动记录历史。这后面实现“查询历史轨迹”几乎没额外工作量。

四、UML图和代码的关系
完全对上:Copy状态机、预约过期逻辑 → 和设计图一模一样

代码改了设计图:信用分最开始写在User里,但加减逻辑在很多地方都有(借书、还书、阅读、超期),太乱了。我就抽出来单独做了一个CreditManager类,然后回头更新了UML图。

简化了:BorrowTerm本来想单独做一个类,但逻辑太少,最后直接合并到Copy里了。

关键体会:模型和代码要同步更新,代码改了图也要改。

五、用AI辅助设计
有用的小技巧:

先让AI提取名词动词,不要直接要类图

对比新旧需求,让AI只关注变化的地方

让AI给多个方案并列出优缺点,自己选

用状态图检查所有规则是不是都覆盖了

自己拍板,AI只能给建议

六、四个单元设计思维的进化
单元 核心
第一单元 接口抽象 + 分层
第二单元 线程安全 + 层次调度
第三单元 契约先行(JML规格)
第四单元 模型先行 + 同步追踪
每个单元都在前一个的基础上加新维度,不是推倒重来。

七、四个单元测试思维的进化
单元 测试方法
第一单元 手写测试用例
第二单元 看日志调试并发问题
第三单元 按规格测(等价类、边界值)
第四单元 构造长序列测状态演化
测试越来越成体系,从“感觉哪里会错”变成“知道怎么找到错”。

八、主要收获
先设计再编码,省时间

画图能发现隐藏的规则

模型和代码保持同步,两边都要更新

职责分离,一个类只做一件事

测试要有方法,不是随便试

AI给建议,自己拿主意

最重要的:不是把代码写得更快,而是在写之前就知道要写什么。

...全文
26 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

309

社区成员

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

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