OO-U4-BLOG

张明媛-23373248 2025-06-15 21:34:13

一、正向建模与开发总结

在本单元中,我们通过正向建模与开发的方法,完成了图书馆管理系统的设计与实现。具体步骤如下:

  1. 需求分析
    首先,我们明确了图书馆系统的功能需求,包括借书、还书、预约、取书、阅读、归还书、查询信用等。这些功能涉及多个地点(如书架、预约处、借还处、阅读室)和多个角色(如用户、图书)。

  2. UML建模

    • 类图定义了系统中的类及其关系,如LibraryUserBookShelfAppointOffice等,明确了类的属性和方法。
    • 状态图:描述了图书的状态变化,如借阅导致从书架到用户手中、预约逾期导致书从预约处到书架等。
    • 顺序图:展示了预约取书的全过程中对象之间的交互和协作。
  3. 代码实现
    根据UML模型,逐步实现了各个类和方法。例如:

    • Library类作为核心,协调各个子模块(如ShelfAppointOfficeReadingRoomBorrowReturnOfficeUser)的交互。
    • Book类记录了图书的信息和移动轨迹。
    • User类管理用户的借阅、预约和信用信息。
  4. 迭代优化
    通过多次迭代,逐步完善功能,如处理热门书籍的移动、信用分计算等,确保代码与模型的一致性。

正向建模的优势在于:

  • 通过清晰的模型设计,提前发现潜在问题(如状态遗漏)。
  • 代码实现与模型高度对应,易于维护和扩展。
  • 分工明确,协作高效。

二、架构设计与UML模型追踪分析

1. 类图与代码设计

img

  • 类图内容
    类图展示了MainClassLibraryUserBookShelfAppointOfficeBorrowReturnOfficeReadingRoom等类及其属性、方法、关系。

  • 代码实现

    • 类图中的类、属性、方法均被实现。
    • 类关系通过成员变量体现,如Library作为核心业务处理类中包含AppointOfficeBorrowReturnOfficeReadingRoomUserBook的实例,并负责管理它们。
2. 状态图与代码设计

img

  • 状态图内容
    状态图描述了图书的状态(主要是图书所处的位置)及其转换条件(如借阅、还书)。

  • 代码实现

    • 状态转换通过Book类的writeTrace()方法和Trigger标注记录。
    • 状态转换逻辑分布在Library的方法中,如borrowed()触发Shelf → User
3. 顺序图与代码设计

img

  • 顺序图内容
    顺序图展示了用户预约到取书的全流程,涉及LibraryShelfAppointOfficeBookUser的交互。

  • 代码实现

    • 顺序图中的消息调用对应代码方法。
    • 对象协作逻辑与顺序图一致,如Library协调ShelfAppointOffice完成书籍转移。

三、大模型辅助架构设计的实践探索

在复杂场景建模中,我们尝试通过ChatGPT辅助架构设计,关键策略如下:

  1. 提示工程(Prompt Engineering)

    • 结构化输入:"请设计图书馆系统的类图,包含User、Book、Shelf、AppointOffice,要求体现借阅、预约关系,使用Java代码实现"
    • 迭代优化:根据模型输出的类图建议,补充CreditSystem等遗漏模块。
  2. 模型输出的批判性吸收

    • 采纳点:模型建议将Book的状态管理抽象为BookState接口,符合状态模式;
    • 修正点:模型初期忽略了ReadingRoomBook的关联,通过领域知识补充。
  3. 局限性与应对

    • 模型对业务细节理解不足(如信用分计算规则),需结合领域知识修正;
    • 采用“模型输出+人工评审”模式,确保架构符合课程要求。

四、架构思维的演进轨迹

单元考察能力场景思维突破
表达式解析与递归化简数学表达式求值学会将复杂问题分解为“表达式→项→因子”的层次结构
多线程同步与调度算法六部电梯协同调度理解并发编程中的线程安全与负载均衡策略
JML规格化与契约编程社交网络功能实现从“实现驱动”转向“规格驱动”,关注接口契约
UML建模与正向工程图书馆系统设计掌握从领域模型到代码的系统映射方法,建立“模型优先”思维

五、测试思维的迭代升级

  1. 手工测试阶段
    自己构造数据,边界样例、异常场景、压力测试

  2. 自动化测试实践
    使用Python生成1000组随机数据,通过评测机批量验证;

  3. Junit测试
    单独测试一个模块或一个方法


六. 总结课程收获

这门课给我的不仅是技术开发能力的提升,更培养了我解决问题的韧性。现在回望这段旅程,从第一单元的磕磕绊绊到第四单元完结撒花,那些曾经让我抓狂的bug、苦思冥想的设计难题,现在看来都是“轻舟已过万重山”。正如好的代码需要不断重构优化,人生也需要持续迭代升级——这或许就是OO课程带给我最深刻的启示。

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

272

社区成员

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

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