444
社区成员
正向建模是一种软件工程方法,它将系统建模为由功能元素组成的层次结构。每个层次的功能被分割成子集,在每个子集中,元素之间存在着逐步的细化和分解关系,从而形成了系统框架。正向建模方法是一种自上而下的设计过程,它从高层次的总体功能出发,逐步细化到低层次的细节设计,以实现对整个软件系统的全面把握。
本单元我们从功能出发,借助 UML 图,自上而下地构建图书管理系统的各个层次。由于本次任务量较大,要求琐碎繁多,在代码实现前的一个好的层次设计必不可少且大有裨益。抽象出来的层次、元素分立,各自实现对应的功能,同时类之间的关联关系可以帮助我们在复杂的图书馆中减小认知负荷,更全面的系统分析和设计目。
在建模和开发的过程中:
本单元我仍然遵循着高内聚低耦合的思想,将校际借阅的实现抽象为由多个图书馆、一个控制中心组成的结构,利用控制中心和图书馆的信息交互来实现不同图书馆之间的图书交换。继而根据层次化设计需要,图书馆下设不同职位的管理员,管理存储在数据结构中的数据类如学生、预订信息、书籍等等。输出单独一个工具类,便于格式化管理和BUG信息输出,调用方便。
对比分析最终的代码设计和 UML 模型设计之间的追踪关系:
最初设计时的 UML 图中只包括类的名称,类的重要方法以及类之间的关系,后面随着代码的不断实现,可以动态调整类之间的关系,增加或者删除类;另外,随着系统功能的不断增多,程序的不断迭代,UML 图也需要做相应的扩展;最后将所有变量、方法填充到类图当中,保证类图和程序的一致性。
第一单元主要内容是对输入多项式的简化。由于第一单元是本人首次接触Java程序,在架构设计上可以说是毫无头绪,也没有全局观念,最初在几个实现的小问题上反复琢磨,而迟迟没有下手去写。此单元主要是依靠学长学姐的博客分享和课程组给出的训练内容,搭建出相同的框架,只不过在具体实现方式上有所区别。初步了解架构设计,主要完成对架构设计的填充和落实。
第二单元主要内容是多个电梯调度。根据理论课上的多线程讲解,加上较为简洁的自由竞争设计,第一次自主完成主体程序的架构设计。但是在电梯调度控制方面,仍然没有很好的思路。最终以单部电梯LOOP,多部电梯自由竞争,外部工具类保存连通图和实现 dijkstra 的基本架构完成了该单元的任务。
第三单元主要内容是 JML 规格。由于 JML 规格已经被给出,也就是代码的架构已经定型,我们需要做的就是参照 JML 的规定,实现方法。故而本单元对于架构的要求不高,但另一方面,在上级过程对 JML 编写的尝试,在课下完成作业时认真阅读 JML 的体验,都向人强调了严谨、完善、简洁的架构设计对程序的巨大影响。
第四单元主要内容是图书管理系统与UML模型。从需求出发,逐步梳理系统关系与实现方法,最后在 UML 图的指导下完成具体程序,此部分无疑是对架构设计思维的一个重大挑战。如何在繁多复杂的功能要求中抽象出我们所需要的层次结构,如何在用户需求增改时动态调整、扩展系统架构而不是推翻重来。从草稿纸到UML图,再到程序的具体实现,真切认识到从零开始架构时需要抓大放小,层次化处理,也对模块化设计有了进一步的体会。
第一单元,由于输入格式较为简单,而且边界数据测试寻找bug的效率较高,所以主要采用手动构造对应数据点的方式进行测试。
第二单元和第四单元,输入变得复杂而输出由一组输入固定,开始借助评测机造出的大量随机数据进行测试。
第三单元,采用白盒测试和黑盒测试相结合的方式,对具体功能的正确性检查使用 junit,而对于图相关以及程序正确性的检查采用评测机构造相应数据,尤其是对不同类型图的构造,全方面地实现压力测试。
OO对于个人处理综合问题的能力和编写一定规模代码的能力带来了质的飞跃,一学期下来觉得脱胎换骨。最后,结课快乐!