0.前言
兜兜转转最终来到了oo课程的最后一个单元。本单元中,课程组依托图书馆管理系统的业务场景,考察了利用uml工具来进行架构设计的能力。
1.正向建模与开发
正向建模与开发是一种软件开发方法,它在编写代码之前进行设计。这个过程使用UML(统一建模语言)来明确软件的整体架构、类之间的关系以及业务处理流程。通过这种方式,开发者可以在编程前对工程有一个宏观的把握。
在正向建模中,UML类图用于表达类的特征和类之间的关系,状态图用于表达对象或系统状态的转移路径和条件,而顺序图用于表达类之间的交互协作。这些图表帮助开发者设计出高内聚和低耦合的系统。
以本次作业为例,可以先分析管理系统的功能模块画好类图,对业务对象:书本划分状态和状态转移条件,针对具体的需求(如还书)设计顺序图理清各个对象间的协作关系。最后实现具体的代码细节并做好测试。
2.模型追踪
uml类图:
本次作业场景的层次较为简单,围绕着管理对象书籍将书架BookShelf
、用户Student
、借还处BorrowAndReutrnOffice
等对象抽象为书籍存放处并提供基本的查询增删操作,根据管理规则细化子类方法,在统一的控制器Controller
协同下完成各个功能。
通过比对最终代码设计和UML模型设计,发现它们之间有一个较为清晰的对应追踪关系。例如类图中的接口、方法的可见性、关联关系的体现、状态转移和消息传递行为的对应等都与代码实现一一对应。
3.架构设计
经过这个学期对面向对象课程知识的学习与实践,我的架构设计思维也不断演进。
一开始毫无架构设计,对着指导书的需求及课程组给出的参考架构,直接写填充功能实现代码。由于没有思考清楚导致中间的许多场景不符合预期,反复的删改。
现在经过课程学习,在U1学会了如何给业务场景划分层次进行层级化设计,通过子类继承与父类重用和分解子问题的方法结构问题的复杂性。在U2则是学会了多线程架构的思想,学会了如何分析多个需求间的隐藏冲突并通过同步控制设计合理的线程安全的架构。在U3和U4进一步锻炼了架构设计的思想,学习了契约式编程的基本思想,如何通过JML语言和UML图等与其他开发人员保持类、接口等一致性,为以后的团队开发中的沟通交流奠定基础。
在这个过程中,我也逐步领会到迭代开发的架构设计思维,一开始不可能面面俱到但也不应该匆忙下手,分析了基本的业务逻辑保证架构总体无误后可以开始逐步开发细化的功能,在开发中不断审视和调整。这样写出的代码可维护性较高。
4.测试
四个单元走来,我也通过实践学习了一些测试方法。
最开始我只会依靠课程组的样例和评测机测试,后面用基本的根据新增功能手动构造单一的业务场景进行测试。经过基本的测试后,用自动评测机生成大量的随机数据进行多轮测试,可这样的测试依然未能覆盖全面也在课程作业中没能测出一些bug。所以还需要构造高并发多边界的极端数据进行压力测试,以及针对特殊的极端的业务场景构造特殊的数据结构,同时要将时间复杂度等性能指标纳入测试考量范围中。
5.课程收获
这个学期的课程学习可谓是收获满满。最主要的是学会了“面向对象”这一编程方式,学习了如何抽象现实的数据并封装为类,也通过代码实践深刻体会到“高内聚、低耦合”的重要性。理论课上吴老师的深入浅出的讲解也让我们学到许多面向对象编程的知识理念和业界的具体实践情况。这些都为我们以后写出高效、稳定的代码打下坚实的基础。