本单元所实践的正向建模与开发
正向工程是对一个系统物理结构实现的高层抽象性、逻辑性及独立性设计的传统处理过程。是指传统的软件开发过程,即从需求分析、设计、编码到测试的过程。它是根据用户需求和系统设计文档来构建软件的过程。
正向建模是按开发顺序先设计UML类图等,进行软件设计,然后再编码。课程组设计UML这一单元就是为了帮助我们完整体验这个流程。
Unit4先要求设计UML类图,设计时需要考虑建立哪几个类,以及每个类需要实现的功能和类之间的关系。我认为构造类图时不必追求完美,可以先按想法构造大体的框架,然后在代码实现的过程进一步改变完善类图。然后要求画状态图,状态图可以在写代码之前完成,也可以写代码后完成作为功能实现的补充说明。顺序图也是同理,但是要注意画图的规范性和一致性。
正向建模对代码实现有很大的帮助。我们已经在类图中表示了每个类的属性,方法和类之间的关系。代码开发只不过是让UML类图充实起来实现具体的细节。使代码开发任务更有条理。
本单元作业的架构设计
本单元要求实现一个简单的图书管理系统。规定图书仅可以存在于书架、预约处、借还处、和用户。图书馆还提供了图书查询功能。可以依据这些设计主要的类。
为了解析需求设计了Parse类,进行任务指派工作和标准化输出(调用提供的函数)。Library是主要的功能完成单元,处理请求。Reservation,Borrow,User,Bookshelf是协作单元,帮助图书馆完成请求和保存图书。
最终的类图设计如下:
本单元设计之初,考虑到图书有副本,我并没有给普通图书设计类。但是最后一次作业要求提供图书的逾期和续借功能,给每本借出的图书提供类以存储借阅的基本信息(还书时间等),能够合理的完成这个任务。这是类图的一个比较大的改变。这样设计给图书类别的判断等和数据结构设计也提供了便利。
另一重点是开馆和闭馆后的处理。鉴于图书馆开馆时间不是连续的,因此为了避免由于长时间不工作导致开馆后的请求处理出现问题。需要进行预约处逾期图书的移动和用户逾期信用的扣除,其他的图书移动操作在闭馆后进行。
每个类的属性和方法和类图一一对应,类之间的关系也对应(只有关联、聚合关系),状态图,状态改变的原因和代码中的方法对应。顺序图:任何一个 message 的名称应与 source 所对应类或 target 所对应类的某个方法相同。
四个单元中架构设计思维的演进
Unit1和Unit2
在脑海中简单确定需要的类和方法,然后根据指导书的功能需求一步一步完成每个功能。单元总结的时候逆向生成类图。
Unit3
本单元是JML规格化编程,全局的架构和方法的架构设计依靠给出的规格。自己设计主要在属性的容器和方法实现细节。为了减少时间复杂度设计合适的数据结构。主要是基于理解JML规格的基础上完成代码,进行较少的设计。
Unit4
本单元测试UML类图。架构设计时,依照指导书要求,先写类图做顶层设计,先在逻辑上实现实验要求,然后完成代码,填充细节。
代码设计思维总体上是先规划需要的类,解析类,功能类。然后按照功能要求逐渐在类图或代码上填充(数据的存储方式以及实现方式和方法位于哪个类)。
四个单元中测试思维的演进
测试主要是构造大量的随机测试样例,检验功能的正确性。也会构造一些针对性,强度高的样例。例如,电梯策略和第三单元针对算法。
课程收获
经过16周的OO课程学习,我不仅学到了一些基础理论知识,更重要的是编程思维的改变。我开始考虑这个方法放在这个类合不合适,这样的容器使用是否方便,类要有哪些功能,这一段语句该不该单独成为一个方法,解析输入时另起一个类,方法这样实现合不合适、时间复杂度如何。类之间应不应该有关系,要有怎么样的关系,消息用什么形式传递,等等。OO课让我体验并实践了良好的编程思想。其次,第三单元写Junit单元测试也是新的体验。如何写测试,如何按照JML规格写测试。我们经历的一切都是成长路上的基石。