Part1. 总结本单元所实践的正向建模与开发
第四单元相较于前三个单元轻松了很多,主要是锻炼我们的正向建模能力。在前三个单元中,我们都是直接对题目进行编码,然后再根据已有的代码画UML类图,这样的话类图就只能起到一个示意的作用了。而在本单元中,课程组要求我们像实际开发的时候那样,先做好规划再行动。
虽然很难像课程组推荐的那样,在一开始就着手画UML图,但是在开始做之前,先对整体的架构进行分析,整理出几个类,并在纸上梳理他们之间的关系,思考如何使数据在一个个对象中流动并处理来实现题目的功能,这些都是很有意义的前置准备。在胸有成竹之后,写起代码来也会顺畅很多,也更容易从全局来规划。不像之前的单元中,因为没做好规划,我有时候写着写着就像迷了路似的不知道该干啥了。
当然,一开始的想法和最后的实际开发很可能会有一定的出入。就像我一开始将book归为一个类,后续在开发中发现似乎不需要这个类,于是果断丢弃。一开始想象的具象的书籍对象的传播在最后的实现里变成了抽象的数字的传递,也一定程度上简化了我的架构。
Part2. 总结本单元架构设计
本单元最终架构类图如下

整体而言,我新建了一个
Library类,来统筹处理所有请求。
BrOffice、
BookShelf等类均使用单例模式,将唯一的实例存放在
Library中。
User类则是以
HashMap的形式存放在
Library。对于
Book,我并没有单独建类,因为事实上大多数时候书的传递不需要同步太多信息。我建立了多个
HashMap<LibraryBookId, Integer>,存放书号和数量的对应,这样普通的借还等情况仅仅需要数量加减即可完成。
当然,有时候书籍是需要存储信息的,例如借还的时间,捐献人,借书人等等。但是由于不同功能需要的信息内容大不一样,多少也不尽相同,所以我选择针对不同的请求建立不同的信息存储方式对应:
Pair,
Pair1(我承认这个名字起的很草率哈哈哈哈),
DriftBook就分别对应了不同的情况。这样的处理方式对我而言会显得清晰一些,如果把所有的信息都放到一个单独的
Book类中,我会觉得有些混乱。当然,其实更好地办法是建立一个'Book'类,然后将存储不同信息的书对应建立它的子类,这样显然更清晰。(偷懒了)
Part3. 架构设计思维的演进
- 在第一单元中,我学到了层次化设计的思想。学会了对一个复杂的式子进行递归拆解,惊喜于一个复杂的嵌套表达式被自己写的程序层层拆分化简。U1带给我的不仅仅是递归下降算法,更教会了我用层次化的方式来看待、拆解问题。
- 在第二单元中,我学习了多线程开发的相关内容。这是最难的一个单元,但也是我最喜欢的一个单元。尽管日日夜夜都为了难以捉摸的bug苦恼,但是电梯这一单元带给我最为深刻的“面向对象”体验。看着一行行的输出,就好像真的有一个电梯在飞速运转,那种成就感简直无可比拟。我在多线程开发中学会了很多,尤其是锻炼了思维的严谨性。在多线程的世界里,稍不留神就很可能出现各种异常,且bug千奇百怪,变幻莫测甚至无法复现。但是多线程的魅力就在于这种复杂性和复杂性带来的速度。比较可惜的是,多线程的最后一个单元要准备蓝桥杯,所以没能延续第二次作业使用影子电梯,只是随机分配就草草收场了。
- 在第三单元中,我学习了
图论的算法规格化设计。尽管我直到最后也没能彻底领略规格的魅力,还因为算法用的不好挂了一些点。但我还是认为这是设计的非常不错的一个单元,弥补了OO课程在算法学习上的不足。 - 在第四单元中,我学习了正向建模。这是最自由的一个单元,课程组仅仅提出要求让我们去实现,通过UML建模的形式,很大程度上模拟了部分以后工作的情境。
Part4. 测试思维的演进
在整个OO课程,尤其是第三单元中,我的测试思维从一开始的无脑用大量数据点检验的随机测试,变得更倾向于精确打击的构造的测试。尤其再结合第四单元用例概念。每个功能都是一个用例,我们编写的测试数据就需要对每一个用例的每一种情况做出检验。课程组给出的数据就是这样子美妙的数据。课程组就像是一个足够了解人体构造的大夫,能够精准地用手术刀插入同学们的心脏除了对用例进行测验,还可以猜测实现可能出现什么样的错误,并对此进行检验,这就是更高的高度了。Part5. 课程收获
上面啰嗦了很多,似乎都把这部分的知识部分写完了。我想继续谈谈除了知识之外的收获。说实话,我的OO并不是学的非常优秀,因为本人比较粗心,思维不够严谨,老是会犯这样那样的错误而挂掉强测,因此常常扼腕长叹,悲从中来。还记得最差的那次进了B房,强测挂了6个点,仅仅是因为有几个类似方法的其中一个忘记修改了,那次真的五雷轰顶,感觉天都要塌了。我想,OO给我带来的,除了丰富的知识,拓展的经验,还有抗压的能力和面对失败的勇气。仔细想想,这可能不仅是OO的特色,更是计院所有专业课的特色。
在这里还想感谢一下OO课程组的所有老师和助教学长学姐,OO课程组是一个优秀的,有温度的课程组,像慈母严父集于一体,带给我们成长。
就要说再见了,OO。我们的故事结束了,另外的故事即将开始。