2026_OO_U4_博客总结

71066014 易畅 2026-06-25 23:40:11

本单元三次作业均围绕图书馆系统展开,我最终的代码结构大致如下:

类/模块职责说明
Main解析输入,处理 OPEN/CLOSE 指令,其余请求交给管理层
LibraryManager系统总控,负责初始化与开闭馆流程,组织各服务模块
RequestHandler处理各类请求(借书、还书、预约、取书、阅读、评分等)
ArrangeService负责开馆前/闭馆后的图书整理逻辑
MovementService统一管理图书移动及轨迹记录
BookCopy表示单本副本,记录位置、状态、预约与到期信息
User用户信息,包括信用分、借阅与预约状态等
Reservation预约对象及其状态(PENDING / READY / COMPLETED / EXPIRED)

一、正向建模的理解

第四单元与前面最大的不同在于:不能先写代码再调整结构,而必须先进行建模。从需求中抽取“名词”和“行为”成为第一步。

实体

  • 图书、副本
  • 用户
  • 书架、借还处、预约处、阅览室
  • 预约
  • 移动轨迹
  • 信用分、借阅期限

行为

  • 借书、还书
  • 预约、取书
  • 阅读、归还
  • 评分、续订
  • 查询、整理、移动

三次作业演进

作业主要内容设计变化
HW13基本借还、预约、查询、整理建立核心领域对象
HW14阅读、评分、精品书架、状态扩展引入统一移动模块
HW15信用分、续订、借阅期限扩展业务规则与状态

二、两阶类图的作用

一阶类图

用于确定系统方向:

  • 是否拆分 Book / BookCopy
  • 是否需要 Reservation
  • 状态如何建模
  • 模块如何划分

二阶类图

用于与代码严格对齐:

  • 类 / 方法 / 属性一致
  • 枚举状态完整
  • UML 与代码可追踪

最终实现中的关键结构:

  • LibraryManager:系统调度
  • RequestHandler:业务处理
  • BookCopy:状态载体
  • User:用户状态
  • Reservation:生命周期管理

三、架构设计

1. 系统入口层

Main 仅负责输入解析,交由 LibraryManager

LibraryManager 负责:

  • 初始化系统
  • 开闭馆流程
  • 任务分发

2. 请求处理层

RequestHandler 负责所有操作:

  • borrow / return
  • order / pick
  • read / restore
  • grade / renew

保持尽量无状态,调用领域对象完成逻辑。

3. 移动与整理层

MovementService

统一处理图书位置变化:

  • 借书:书架 → 用户
  • 还书:用户 → 借还处
  • 阅读:书架 → 阅览室

ArrangeService

系统整理逻辑:

  1. 处理过期预约
  2. 分配图书
  3. 清理无效状态
  4. 按评分调整书架

4. 领域模型层

  • BookCopy:副本状态
  • User:用户状态
  • Reservation:预约状态
  • TraceManager:轨迹记录
  • Repository:对象管理

四、大模型辅助建模

1. 职责划分

用表格检查类职责是否过重。

2. 设计审查

用于检查扩展性与一致性。

  • 状态变化是否一致
  • 是否存在遗漏状态更新
  • 缺失的状态转换

五、四个单元对比

单元重点思维变化
第一单元表达式对象拆分
第二单元多线程并发设计
第三单元JML规格约束
第四单元UML建模系统设计

六、测试思维变化

  • 第一单元:表达式正确性
  • 第二单元:并发随机性
  • 第三单元:边界与契约
  • 第四单元:场景 + 状态一致性

七、课程收获

面向对象的核心不只是拆类,而是:

  • 找稳定对象
  • 管理状态归属
  • 控制职责边界
  • 保持系统可扩展

关键设计体现:

  • BookCopy 防止状态分散
  • User 集中用户规则
  • MovementService 统一轨迹
...全文
322 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

309

社区成员

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

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