272
社区成员




正向建模与开发是从需求出发,通过设计模型逐步构建系统的过程,通过抽象模型指导具体编码,以设计驱动实现,有助于构建结构清晰、可维护的软件系统。
在本单元中,我们需要构建一个图书馆管理系统,具体实践如下:
架构设计:
Library
类:管理所有地点类、书本类和用户类,设计方法处理开闭馆、整理操作和各种读者请求。AppointmentOffice
:储存用户的预约书籍,并清理逾期书籍。BookShelf
&热门书架HotBookShelf
:负责管理书架上的书籍,包括查找、添加、移除书籍等。BorrowAndReturnOffice
:管理借还处书籍,将还书处的书籍整理回书架。ReadingRoom
:管理阅览室的书籍,处理用户的阅读和归还请求。Book
类:存储书本的书籍号、位置、移动轨迹、预约信息和借阅信息等内容。User
类:存储用户的ID、信用分以及借阅、预约、阅读书籍的信息。整体而言:Library
类是整个系统的核心,它负责管理所有的地点和用户,并调用地点类的方法进行操作。各个地点实现相应操作的添加、删除书籍。Book
和User
则聚焦于自身的状态与行为逻辑。
类图聚焦系统的静态结构,描述类、属性、方法、关系(关联、依赖、继承等)。代码则是类图的 “落地执行”,追踪关系体现在:
User、Book、Library
),都会在代码中转化为同名的类文件。User
的 studentId
),会变成代码里的成员变量,类型、可见性(public/private等)与类图设计一致。User.borrowBook()、Library.open()
),会在代码中实现为函数,方法名、参数、返回值需与设计匹配。状态图聚焦单个对象的生命周期行为,描述对象在不同状态间的转换。在本单元中重点关注Book
在不同地点之间的状态转换,Book
中的Location
属性是其状态的体现,每个移动轨迹箭头上的 Trigger
与代码中涉及书本移动的方法函数名一致,guard
与方法中可能有的条件判断语句一致。
顺序图聚焦多对象间的交互流程,描述 “谁在什么时间、调用谁的方法、传递什么数据”。第三次作业要求画出预约书籍的顺序图:
Library
给AppointmentOffice
发 “orderNewBook”消息,代码里体现为 Library.orderNewBook
等。利用大模型辅助建模最关键的一点就是一口吃不成胖子,要分阶段循序渐进地引导大模型来完成任务。
Expr
(表达式) -> Term
(项) -> Factor
(因子) 的清晰层次结构;在计算方面,将每个因子化作Poly
多项式,在多项式层面上统一进行计算。总体实现了表达式的结构与计算逻辑的分离,自顶向下进行结构解析,自底向上进行计算,两部分逻辑分离,清晰明了,体现“高内聚低耦合”的思想。synchronized
锁、信号量、线程安全类等机制来进行多线程的交互设计,学会在多重指标评估系统下找到性能的最佳平衡解。@requires
、@ensures
等关键字带来地无歧义的前置条件和后置条件的约束;体会规格与实现的分离,在实现JML语言描述的功能前提下,思考如何优化算法、选择容器来进行具体的实现。总体而言,经过四个单元的联系,我逐步实现了从局部功能拆解到宏观系统设计、从基础编程到复杂架构开发、从自由实现到规范约束的能力提升,深化了对“高内聚低耦合”“规格与实现分离”等核心设计理念的理解。
print
大法来输出关键数据,可以在出现随机错误时精准利用输出来定位信息。OO课程完结撒花!通过这16周4个单元的磨练,我不仅对面向对象编程的思想有了更加深入的了解,也提升了Java代码的编写能力。当然,除了能力方面的提升,OO也教会了我如何抽象问题,如何进行宏观架构设计再到具体细节落实的问题解决流程,以及如何更好地更轻松的引导大模型完成任务。
尽管写OO真的很痛苦,但不可否认这是一门很棒的课程,感谢课程组!