301
社区成员
发帖
与我相关
我的任务
分享# 正向建模与开发
正向建模就是”先设计,再代码“的思想,也就是先设计好整个程序的架构以及各个类之间的关系,然后逐步地取实现代码。这是一种在实际操作当中常用的开发手段,主要面向规模庞大的代码体系。

# 本单元的架构设计
- 从整体的架构上,我尽可能地抽出了很多概念的共同性质,然后使用同样的类取表现它。目的是让整个架构更见简洁的同时可维护。主要的抽象概念如下:
- 书架:我使用了`Shelf<T>-SubShelf<T>`的结构,用于抽象用户持有书籍、书架和图书馆的几个功能模块的概念。由于各个概念有着自己不同的额外信息需求,比如用户需要知道某本借书的时间,书架需要知道借书的本数,漂流角需要知道某本借书的次数,于是我使用泛型`<T>`来表示需要额外记录的信息。这也是我第一次自定义泛型容器。
- 书本:由于记录的书本有两种,除了记录书本本身的信息以外,可能还会拓展心的内容`<T>`,所以将书本换做本身`Book`和数目`BookItemShelf<T>`两个部分记录。
- 为了使代码尽量发挥面向对象语言的优势而不是显得面向过程,我在输入处理的时候确定了将同一本书一定要对应某一个确定的对象的想法。这让我在输入的时候用`parseBook`和`parseUser`两个函数将书本和用户从抽象的描述信息直接对应到一个确定的对象,大大方便了后续的处理。
- 最终的代码设计和自己最初的架构设计是比较吻合的,这体现出了正向建模的优势。
# 四个单元中架构设计思维的演进
在四个单元当中我的感受是循序渐进的。
- 在第一单元当中,我感受到了递归下降法的魅力。当时主要的架构设计思路停留在分阶段处理当中,尤其是在递归下降的部分,代码之间是高度耦合的,所以在整体的设计上是模块化的思想。
- 在第二单元当中,我体会到了多线程编程的新方法。多线程编程相对于单个程序的编程当中具有更多的新的特性,尤其是同步,特别考验个人的代码能力。我觉得在以后的编程当中,这一部分也是非常重要的。
- 在第三单元当中,我使用了lazy标记等方法,让设计架构兼顾了性能。同时,类似PL的形式化描述让我看到了一些代码的新的可能。在其他场合与其他优秀高校的同学进行交流的过程当中,我感受到JML这一个小众的形式虽然看起来在科研当中主要的作用并不属于OO这一块(这也是我开发过程当中的疑惑),但是课程组的引入无比适合。
- 在第四单元当中,我根据正向建模的要求,尝试先设计好架构再进行实现。这一点非常关键,让我的代码在增量开发的过程当中几乎没有做过结构上的改动,同时每一次的
# 四个单元中测试思维的演进
测试的主要思路是根据题目的要求构造具有特点的数据点,然后针对测试点进行提交。**同时,感谢室友大佬yyg同学和他的评测机,在debug过程当中帮助了我很多很多!(鞠躬)**:)
# 课程收获
在面向对象的课程当中,我收获颇丰。我最大的感受是,这一门课并非只是一门面向代码-开发的课程,而更多的是教会我们开发的架构设计的智慧。至少有了`oo`课程的学习之后,我在`acm`竞赛等场合不再害怕规模庞大复杂的模拟题,为我的队伍在今后的区域赛当中攻克高码量题目提供了更低的门槛和更高的机会。同时,`oo`课程的设计思路至少开拓了我的眼界,让我觉得这一部分所体现出的设计思想是在今后很多方面的工作当中都适用的。