BUAA OO Unit4:图书管理系统 & 课程总结

本单元所实践的正向建模与开发

在本次单元作业中,要求我们以一个图书馆模拟系统为例,设计整体架构并绘制UML图。需要在迭代过程中绘制类图、顺序图、状态图。面向对象领域的正向建模与开发通常包括:需求分析、领域建模、设计模型、编码实现、测试与调试、部署与维护。
第一次作业中,因为整体任务背景比较复杂,所以先根据指导书构建了较为简易的类图,区分出各模块功能,再进行后续代码实现。在实现过程中又发现一些可以抽象出来的类等,再对类图进行修改。这样一套先分析需求再设计模型最后实现代码的流程让我在完成作业的过程中保证了逻辑的清晰,也方便后续针对性测试与debug。
第二次作业因为指导书新加的内容理解难度加深,所以直接编写代码有些费劲,还是需要先画出状态图以及对类图的修改,保证设计的模型正确才能保证后续代码不出错。
第三次作业由于更改较少所以直接实现代码。

本单元作业架构设计

在这里插入图片描述
在整体的迭代过程中,主体都是Library类, 履行一座图书馆的职责。我对具体的服务部门:借还管理员、整理管理员、预定管理员、图书管理处进行单独建类。管理员中存有一份书籍发放清单,以及回收暂存的书籍列表。进行还书、借书、预定、转运等活动的具体方法也是在对应管理员类中实现。
由于图书馆的开馆从2023-01-012023-12-31,所以进行i < 365的for循环;同时处理当天的所有请求;并注意三天一次的整理活动。
每种书的书号由校名 + 书号组成,保证校际间借阅的识别。由于学号、书号等格式偏固定,所以可以使用正则表达式对字符串进行处理。
在第二次作业引入校际借阅后,由于图书馆的不唯一,所以我在Main中进行统一的所有学校图书馆的管理,涉及到对应图书馆时再在Library中进行。但在处理校际间还书时,要弄清对应方法是哪个Library里的。
第三次作业引入借阅时长后,我在Student学生类中设计一个HashMap,记录当前该学生借阅的书籍及对应时间,每天将所有学校学生的所借图书时长++。

四个单元中架构设计思维的演进

Unit1:掌握递归下降方法,按照表达式的形式化表述对表达式的各结构进行分类建模,完成多括号的展开。体会层次化设计的思想。第二次作业经历了一次重构,感受到了架构对后续维护与扩展的重要性。也体会到层次化下将一个庞大任务一层层分解并交给对应模块去做的好处。

Unit2:模拟多线程实时电梯系统,了解使用多线程相关的设计模式。保障线程安全的同时实现线程之间的交互。整体是按照生产者-消费者模式设计。有了初步先设计再实现编码的思维。但设计过浅,难以指导具体代码实现,只能充当解决问题的小思路。

Unit3:总架构已有课程组设计好,我们只需实现其中的功能。这一单元也是学习课程组架构思路的过程。好的架构能够很方便地进行扩展与维护。新添功能与已有功能之间不会起很大冲突,代码逻辑也会很清晰。这一单元让我真正意识到设计良好架构的重要性。

Unit4:这一单元要求我们自己设计总体架构。虽然可以先直接写代码,但难以捋清业务逻辑与整体思路。先设计好整体架构,确定哪些类要实现,方法之间如何联系;这些准备工作十分重要。后续的代码实现只要依着架构写就能很快完成。

四个单元中测试思维的演进

Unit1:第一单元在自己手动创造的数据以及使用了讨论区提供的数据与评测机。

Unit2:由于多线程导致的debug有些许困难,导致强测成绩不够好。测试过程中也测试了一些极端情况的数据,但还是难以覆盖所有情况导致出bug。

Unit3:使用一些随机数据再和同学对拍。尤其是oktest方法的测试数据需要保证每一个ensures都能测到。测试数据的随机性与完整性都需要考虑。同时对评测结果的判断也很重要,通常是对拍,或采用其他同学的自动评测机。

Unit4:由于情况十分多,所以自己手动编了几个较为极端或评测机难以覆盖的数据。

总体来看,测试是非常重要且必要的过程。在测试中,生成测试数据既要考虑随机又要考虑覆盖的有效性以及最后评测的正确性。

课程收获

首先,通过面向对象设计与构造这门课程学习到了Java语言以及面向对象的思想以及一些设计方法,(封装、继承、多态这些还是靠上学期的OOpre学习)学习到了架构的设计以及对测试的了解以及测评机的学习。其次,在作业的完成过程中,非常锻炼自己的快速学习与debug能力,每一单元都有新的知识或算法出现,ddl又强迫自己在短短几天内学习并使用,debug的过程也异常艰辛。最后,学习的过程中,也磨练了我的意志,让我能够勇敢面对以后的学习;锻炼了我的思维能力、代码能力;有压力也有动力。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值