272
社区成员




又是一个单元的结束,但却是整个OO的结尾,就像沙河图书馆的建成标志着我们在沙河校区的日子结束,图书馆系统的完成也意味着OO告一段落(如此恰好是助教特意安排的嘛/好奇)。本单元核心是UML的学习,以及借助画UML图来正向建模,总的来说本单元的开发难度明显小于前三个单元,不过对于建模及自主架构设计的考察意味更加明显。
本单元围绕小型图书管理系统的建构来展开正向建模的学习,需要实现对书籍的管理,以及不同部门的协作。三次迭代作业中,我们分别绘制了UML类图、状态图、顺序图:
通过这三个图的绘制,从侧面简洁的刻画出了我们代码建构的图书管理系统的面貌。
类图定义了系统的静态结构,是我们整个工程的基石。它清晰地展示了系统中有哪些实体(类)、它们各自拥有什么属性(Attributes)和行为(Methods),以及它们之间存在的静态关系(如关联、继承、实现)。
(图太丑就不贴出来了/哭)本次作业的类设计是按照现实模块映射的思路来设计的,即根据现实的图书馆的功能模块划分来进行图书管理系统的搭建。简单来说就是对应每一个部门和实体,建立一个实体类:
然后根据实际应该具备的功能在对应类中实现对应的方法,如用户的取书和还书,预约处预约等,由此依据类图便实现了以Library
为总控,Book
为操作单位,其它实体作为协作模块的代码设计。
状态图描绘了一个对象在其生命周期内所有可能的状态以及状态之间的转换条件和行为。
本次作业要求绘制书籍转移的状态图,以书籍的移动为状态转移的标志,即按照书籍所在的地点为状态即可完成该作业的状态图,包括了bro
,ao
,bs
,hbs
,rr
,user
六个状态,转移的trigger
则是由borrow
,return
,read
,restore
来实现的。由此便刻画出了书籍的状态变化。
顺序图专注于对象之间的交互,它按照时间顺序展示了为完成某一特定功能,各个对象之间是如何通过消息(方法调用)来回通信的。
本次作业要求通过消息发送来刻画用户预约成功到完成取书这一行为的协作图,即需要刻画Library
等类通过方法进行通信协作完成这一行为的完整消息链,也就是层层调用的方法,对其添加SendMessage
标签即可。
Library
:作为主控类,负责接收指令信息,调度给不同的部分进行处理Book
:作为所有行为的操作单位,同时也作为数据类记录书籍的各种状态及转移信息User
:作为数据类记录用户的各种操作信息以及持有书籍状态LibraryBookState
属性,以写Trigger
注释的方法为状态转移的标志Library
发送消息给AppointmentOffice
,将书籍转移至预约处,再由用户向预约处发送取书请求,若有则成功取书,无则取书失败大模型的使用主要在于实验课上学习了ROSES架构和链式引导,在实际大模型使用体验上,这确实是一套很适合的引导方向,采用这种方式提问能够较为清楚的说明问题,也能够更好的引导大模型生成的代码和架构。
四个单元的架构设计,明显是一个粗糙到细致,逐渐完善的过程:
伴随着图书馆大门的关闭,OO课程也到了尾声,一个半学期的陪伴,也到了尽头。想起oop第一次打开idea开始创建第一个Java文件的捉襟见肘,到现在快速实现的图书馆小系统的迭代,就有颇多感概。一年半的面向对象的学习结束,我想我也成功的从面向过程的编程思想中脱离了出来,不再是一main到底,也不再是重度堆积MainClass
。
总的来说,虽然OO课就这么结束了,但是还是很喜欢OO所带来的实实在在的充实感和成就感,也很喜欢那些绞尽脑汁debug的时间,这种课程制度也确实很好的激发了我的学习兴趣。在最后,也感谢课程组的老师和助教们的努力工作,感谢一学期以来的陪伴。/撒花/撒花