301
社区成员
发帖
与我相关
我的任务
分享目录
OO第四单元实现了一个简单的图书馆管理系统,使用正向建模与开发的方式实现。正向建模与开发,即先根据作业指导书(需求文档)构建UML图,再依据UML图进行代码编写,有助于进行大型项目分析与规划。
在本单元作业中,我们实现的图书馆管理系统需要具备下列功能:查询书籍数、查询学生信用分数、借书、还书、预约书籍。
以第一次作业为例,我设计了:
Library:图书馆类,用于存储用户信息、在馆书籍信息。分配操作请求。
Order:预约处,用于存储用户的预约信息,每次开馆时将可移动的在馆书籍移动到预约处。
Borrow:借还处,用于处理借书与还书的请求
Student:学生信息。
OrderBook:基于基础Book类的OrderBook类,需要预约人信息,书号,预约日期等。

在之后两次作业中,我基于第一次作业,又增加了书籍漂流处、操作信息登记处等类,实现方式与此前基本一致,无大规模重构。对于容易出错的书籍移动环节,我设定闭馆后需要将借还处书籍全部送回书架,开馆时再分配预约书籍。通过严格的流程降低出错概率。
在写代码与画UML图前,我会设计简单流程图,这有助于我理清指导书思路。如图,是针对第二次作业整理的流程图。

递归下降、OO入门:第一单元的重点任务是解析与计算表达式,熟悉Java语法,以及建立面向对象的思维。难点在于递归下降方法,以及第一作业的架构设计(如果做的好,后续不需要完全重构,会节约很多时间)。
多线程:实现模拟新主楼电梯调度系统。难点在于多线程的调试,以及bug较难复现。评测机在这一单元十分重要。
JML:本单元主要通过阅读JML,编写对应的函数。个人认为这一单元最困难,JML给我体验很不好。本人认为仅依靠JML书写规格不太现实,实际开发中,JML应该和自然语言的说明一同出现,辅助开发者进行程序设计。
UML:实现一个图书馆管理系统,在作业中要用到正向建模的方法。先根据作业指导书构建UML图,再依据UML图进行代码编写。
依据个人浅薄的实习面试经历,第二单元中的多线程出现频率极高。在会用多线程锁的基础上,还需要阅读源码,能理解与讲清楚各种锁的区别。同时,各种细节问题也常被问到,如各类容器是如何实现的,源码有什么区别。JML相对来讲十分冷门,不会被问到;UML,我个人认为这是一种架构设计的思维,而非具体知识点,不会出现具体的问题。
我认为在此后的学习中,我更应该关注原理问题,而不是如何尽快让代码跑起来。
第一、二单元主要借助了同学编写的评测机进行评测,同时手工编写了少量数据,用于开发过程中测试各单元功能。
第三单元做的不是很好,既没有用评测机、也没有自己测试过。
第四单元没有使用评测机,仅手工编写数据。因为第四单元作业逻辑较简单,且代码正确性也与自行设计的总流程有关,应该自行编写有逻辑的测试,而不是依靠评测机。
很开心,2024年的OO课程结束了,我也表现得比预想中好。其实我本来应在去年修这门课,但去年第一次作业没有交上,再加上其他原因,我认为自己无法良好完成课程,遂退课。今年再选课时,我的能力较去年也有了一定提升,学习效果也好了很多。非常感谢老师、助教、以及同学们的帮助,同时感谢面对困难没有放弃的自己。