302
社区成员
72066004 邱小瑄
作业主要围绕在模拟图书馆管理系统,实现各种功能,在每一次作业上递增实现要求
本单元需要需要使用正向建模也就是使用模型来模拟结果。根据题目先画出设计架构,根据架构画出UML类图,状态图和时序图等等,最后才按照UML类图写出代码。正向建模对我来说是一个很大的挑战,因为是一个从无到有的一个过程,很难做到利用类图建模和实现完全一致。在这个单元中,我会先在草稿纸上画出大致的架构和类图,一边实现代码的同时,一边修改类图的框架和细节。
类图实现:
状态图:
状态图展示的是书籍状态转移的过程。根据指导书书籍能处在的地方有BookShelf, AO, BRO, BDC和用户,故能知道可以用什么来表示其转移的状态。
时序图:
时序图表示的是处理书籍的流程。可从UML类图中找到其顺序,并画出时序图。
本次作业从UML类图中可看出每个类图分别处理什么:
Book:处理每本书的id,类型,数量,是否预约,漂流书等等
BooksMoving : 记录书籍移动状态
Library : 作为一个总控制,处理所有在library发生的事情
MainClass : 分析书籍的状态,根据每种不同的状态输出不同的结果
Student : 处理每个用户的id,以及记录借过的书本(若有)
但这样的架构并不是最优化的,如能把每个书籍能停留的位置比如BookShelf, AO, BRO, BDC能分别提出来会更好
第一单元的作业是表达式的解析与化简,利用递归下降的知识编写代码。在这个单元中还没能掌握面向对象的思维,并没有做好架构的设计,只是跟着要求编写代码。
虽然思路是对的,但在写博客的时候,总结代码时发现整体耦合度蛮高的,摸个模块之间的依赖性很大,这样不太好。
第二单元是我觉得最难熬的一个单元。此单元的作业是电梯多线程的调度处理,当然也是第一次接触多线程,在做作业时很慌乱,出现了很多没遇过的bug,所幸有自愿者的帮助,帮我梳理部分难点,让我检查线程是否都在规定时间内结束,以及注意锁的释放。在这个单元中花了最长时间,但很遗憾还是没能在ddl前完成好。
第三单元的作业是根据JML规格写代码,在这个单元中不需要自己去设计架构,只需要根据已经课程组给的JML规格写出代码即可。
第四单元就是模拟图书馆的管理,我觉得第四单元的指导书是最难理解的,其中给出的信息很乱,很复杂,需要仔细观察有用的信息。
四个单元中唯一不变的是使用打印输出信息来测试哪一个地方和预想的不一样。也很感谢同学分享测评机让我能改正有错误的地方。
OO这门课提升了很多写代码的能力,尤其在代码风格方面。虽然每周的作业都觉得很压力,但在完成的那一瞬间又觉得很开心。在这门课最大的收获是体会到拥有一个好的架构是多么重要啊,这样一来在每一次迭代都能很快就能完成。同时也很感谢研讨课上同学的分享,每次听完他们的分享都会有所收获。也很感谢在这个学期的助教和素未见面的同学,谢谢他们不厌其烦地回答我的问题,哪怕我的问题可能很简单,又或者没遇到过,但还是很尽力帮我debug。最后谢谢所有课程组的老师和助教们,你们幸苦了!