301
社区成员
发帖
与我相关
我的任务
分享正向工程是对一个系统物理结构实现的高层抽象性、逻辑性及独立性设计的传统处理过程。是指传统的软件开发过程,即从需求分析、设计、编码到测试的过程。它是根据用户需求和系统设计文档来构建软件的过程。
在本单元中,我们通过先设计UML图,再进行编程的方式。通过设计一个较为完善的UML图,作为自己的大体设计,对编写代码这一过程做了一个整体的规划设计,使得对整个系统的设计有所把握,减少了后续整体架构的重构风险。同时对于代码的各个部分有着较为明确的概念,编写各个部分的时候,也更容易做到封装,隔离的解耦。
在本单元的开发中, 我在逐步编写各个部分代码的过程中,不断反向对照UML建模的设计,补充UML图不足,同时保证了代码的实现与UML图的描述相一致。
本单元中,要求设计一个图书管理系统。我的最终设计如下:
其中,SuperController用来解析输入,调用对应的命令。Library综合所有部门,处理各种事件,并保存有所有User。User类保存了用户的各种信息,主要保管了各种书籍。CirculationOffice是借还除,Shelf是书架,BookDriftCorner是漂流角,ReservationOffice是预约处。ReservedBook是被预约的书籍,ReservationRequest是预约请求,Book是基本的书,在第三单元中将其分成了两个子类,OfficialBook和UnofficialBook。BooksManager是一个图书的容器。其余类都是一些辅助用的类。
在本单元的迭代过程中,大部分类的改动都比较小,UML类图中的设计基本延续到了最后。改动基本集中在Book上,在第一次作业的设计上,就认定了Book必须是一个单独的类,即使只有一个BookId的属性,并且将Book和BookId两个概念区分开来,认为书籍这一实体和书号是不同概念。而且认为书本之间是不同的,书本的所有权是唯一的。在这种基础上,在迭代中设计了持有Book的多个类BorrowedBook,ReservedBook。
在代码设计和模型之间的追踪关系上,我的代码部分基本按照UML类图设计,在少部分情况,一些类的getter和setter这种方法会在UML类图中被遗忘而写代码中再补充。同时,由于staruml对于类型编辑上实在是比较难用,很多方法的类型很容易拼错或是漏掉。同时在uml设计中,一些方法的参数比实际应用的要多,许多参数在设计时,由于方法之间的相似性,参数也比较相似,但是也会出现user和userId参数的不清楚应该怎么设计,只在代码中必须使用到user作为参数的时候,反向调整模型中的设计。
Unit1 & Unit2: 设计上,首先在脑袋里规划好一个大概的框架,然后再代码编写过程中,逐步完善这一设计。
Unit3: 根据JML的设计,完善需要实现的各个类。
Unit4: 首先,将自己的设计转变为UML类图,然后完善具体的实践,填充各种细节。
在四个单元中,我的测试方法都主要是黑盒测试加上局部的部分类的junit单元测试,通过手动构造一些复杂样例,编写程序构造极端数据,设计简单的junit测试对一些关键的复杂的类进行测试。
通过了四个单元的学习,学习编写java代码,一方面对于java的理解有所提升,另一方面,让我对于迭代开发,整体架构设计,一些面向对象的设计理念有了一些了解与体会,让我对如何写好一个可以适应更多需求的代码的理解有所提升。
此外,对于形式化验证,UML模型设计,多线程编写以及编译原理等方面,以及单元测试这一功能有了一些了解,让我对这些概念有了一定的学习与了解。
但是在另一些方面,尤其如面向对象的一些编程设计尤其是各种“模式”的学习方面,感觉没有太多的使用。几乎只使用到了单例模式这一种“全局变量”的模式。
但总得来说,在本学期的学习过程中,我对多种编程设计上的工具链,工程代码开发的设计,以及程序测试等方面都有了更多的认识与理解。也在此感谢课程组所有助教与老师的辛勤付出,感谢研讨课中各个组员同学在交流中分享的经验与认知,希望OO课程可以越来越好。