272
社区成员




在本单元中,我们通过正向建模与开发的方法,完成了图书馆管理系统的设计与实现。具体步骤如下:
需求分析
首先,我们明确了图书馆系统的功能需求,包括借书、还书、预约、取书、阅读、归还书、查询信用等。这些功能涉及多个地点(如书架、预约处、借还处、阅读室)和多个角色(如用户、图书)。
UML建模
Library
、User
、Book
、Shelf
、AppointOffice
等,明确了类的属性和方法。 代码实现
根据UML模型,逐步实现了各个类和方法。例如:
Library
类作为核心,协调各个子模块(如Shelf
、AppointOffice
、ReadingRoom
、BorrowReturnOffice
、User
)的交互。 Book
类记录了图书的信息和移动轨迹。 User
类管理用户的借阅、预约和信用信息。迭代优化
通过多次迭代,逐步完善功能,如处理热门书籍的移动、信用分计算等,确保代码与模型的一致性。
正向建模的优势在于:
类图内容:
类图展示了MainClass
、Library
、User
、Book
、Shelf
、AppointOffice
、BorrowReturnOffice
、ReadingRoom
等类及其属性、方法、关系。
代码实现:
Library
作为核心业务处理类中包含AppointOffice
、BorrowReturnOffice
、ReadingRoom
、User
、Book
的实例,并负责管理它们。 状态图内容:
状态图描述了图书的状态(主要是图书所处的位置)及其转换条件(如借阅、还书)。
代码实现:
Book
类的writeTrace()
方法和Trigger
标注记录。 Library
的方法中,如borrowed()
触发Shelf → User
。 顺序图内容:
顺序图展示了用户预约到取书的全流程,涉及Library
、Shelf
、AppointOffice
、Book
、User
的交互。
代码实现:
Library
协调Shelf
和AppointOffice
完成书籍转移。在复杂场景建模中,我们尝试通过ChatGPT辅助架构设计,关键策略如下:
提示工程(Prompt Engineering):
"请设计图书馆系统的类图,包含User、Book、Shelf、AppointOffice,要求体现借阅、预约关系,使用Java代码实现"
; CreditSystem
等遗漏模块。 模型输出的批判性吸收:
Book
的状态管理抽象为BookState
接口,符合状态模式; ReadingRoom
与Book
的关联,通过领域知识补充。 局限性与应对:
单元 | 考察能力 | 场景 | 思维突破 |
---|---|---|---|
一 | 表达式解析与递归化简 | 数学表达式求值 | 学会将复杂问题分解为“表达式→项→因子”的层次结构 |
二 | 多线程同步与调度算法 | 六部电梯协同调度 | 理解并发编程中的线程安全与负载均衡策略 |
三 | JML规格化与契约编程 | 社交网络功能实现 | 从“实现驱动”转向“规格驱动”,关注接口契约 |
四 | UML建模与正向工程 | 图书馆系统设计 | 掌握从领域模型到代码的系统映射方法,建立“模型优先”思维 |
手工测试阶段:
自己构造数据,边界样例、异常场景、压力测试
自动化测试实践:
使用Python生成1000组随机数据,通过评测机批量验证;
Junit测试:
单独测试一个模块或一个方法
这门课给我的不仅是技术开发能力的提升,更培养了我解决问题的韧性。现在回望这段旅程,从第一单元的磕磕绊绊到第四单元完结撒花,那些曾经让我抓狂的bug、苦思冥想的设计难题,现在看来都是“轻舟已过万重山”。正如好的代码需要不断重构优化,人生也需要持续迭代升级——这或许就是OO课程带给我最深刻的启示。