前言

终于来到了 OO 的最后一单元,让我看看我们今年的最后一单元都要做什么?喔,我们要进行一个图书馆的大模拟!

本单元主要希望训练的是我们的抽象建模技巧。

第十三次作业时建立起扩展性良好的架构会让我们在完成第十四次作业时更加轻松。

虽然在中途出现了各种各样的意外……不过由于我第十四次作业开工的比较晚、并且十三次作业的架构也比较好,所以并没有感到十分的痛苦(x

两次作业类图

hw13 类图:

hw14 类图:

可以看到在两次作业中没有大幅度重构。

第十五次作业中基本没有改变什么内容,类图基本和第十四次作业一致。

本单元架构设计

在本单元的架构设计时,我将每一个管理员都抽象为一个单独的类,让他们都继承自 BookContainer 类。BookContainer 类承载了管理书籍的功能,可以添加、删除、获取书籍。将每一个管理员都作为一个类的考虑在于这样便于以后为特定的管理员添加新的功能。不过到最后貌似是都没有添加新的功能…

在本单元作业中课程组鼓励我们使用先建模,后工程的方法,我认为这一思想是正确的,不过在实操层面是有很大困难。一大原因在于对于 starUML 图的评测比较严苛,需要让代码和图内容完全一致还是比较困难的(指先画图)。我个人在本单元中的做法是在草纸上画出大致的图,然后再进行代码编写,最后根据代码手绘 UML 图。

第十四次作业整体架构:

BookContainer

承载了管理图书的功能。各个图书管理员都继承自此类从而拥有了管理图书的功能。

Library

承载了图书馆的功能,是处理读者借还书籍的地方。

City

承载了解析指令、让多个图书馆之间进行通信的功能。

Message

将每次的输入解析为对应的消息。在类之间通过传递消息传递信息。

Pair

手写的二元组。

Date

承载了日期的解析功能,可以将日期转换为日期码。

Book

承载了书籍的功能,维护了书籍的类别、编号、状态、借阅日期等信息。

Reader

承载了借阅者的功能,可以维护借阅者的借阅书籍。现在想想发现他也可以继承自 BookContainer 类。

Tool

内部有一个输出方法,所有的输出都调用了这个类的方法。

本单元总结

本单元作业锻炼了我的代码设计能力和大规模模拟的编写能力,同时也让我真正掌握了 UML 的使用方法。让我明白了代码设计和代码编写是不可分割的。(不过感觉其实更重要的或许是代码文档?)

本单元有一件有趣的事是我在写一个函数时写了一百行,但是上限是六十行。于是通过邪法压行把一百行生生压到了六十行…