OO第四单元总结
架构设计
第四单元主要任务是实现uml内容解析,并使用相关的指令查询uml内容。
第一次作业

在这次作业中,我们将在MyUmlInteraction这个类中解析获得的elements,并将这些元素分配给自己创建的MyUmlClass、MyUmlInterface、MyUmlOperation类中。
在这些类中,我们存储了相关信息,建立实现、关联、聚合等关系,并根据指令的需求添加相应方法。
第二次作业

第二次相较于第一次作业,添加了顺序图和状态图。
在这次作业中,我们将总的解析器分为三部分,分别是类图解析器、状态图解析器、顺序图解析器。其中类图解析器与第一次作业中的基本一致。状态图解析器需要定义自己的MyUmlStateMachine类和MyUmlState类,顺序图解析器需要定义自己的MyUmlInteraction类和MyUmlLifeline类。三个解析器初始化时使用的是相同的Element... elements,只需要提取出与该解析器有关的元素,并分配给其拥有的类中。
第三次作业

第三次作业相较于第二次作业,增加了模型有效性检查,即在使用指令查询之前检查模型是否有不符合规定的地方。
在这次作业中,我们新增了一个MyUmlStandardPreCheck类,这个类使用三个图解析器的实例进行初始化。因此我们只需要在原来的图解析器中增加相应的方法对模型进行检查,MyUmlStandardPreCheck类通过调用相应实例的检查方法即可完成预检查。
四个单元中架构设计和OO方法理解的演进
第一单元求导问题是我刚刚接触java的第一站,还没有理解面向对象的思想,所以那时候的架构完全是面向过程的架构,哪里需要什么就加什么,没有考虑到之后的迭代开发。这就会使得第二次和第三次作业花费更多的时间,而且出现bug的几率明显变大。
第二单元电梯问题中引进了多线程问题,所以我在构思的时候第一次真正的使用面向对象的思想考虑架构,也是由于第一单元的重构使得我对好的架构有了一个较为清晰的认识,即可扩展性和灵活性。一个类应该具有高内聚、低耦合的特点,并且有自己明确的职责。
第三单元JML规格中我们只需要根据JML规格实现接口,关键是对某些数据进行缓存,避免重复计算即可。
第四单元UML解析中的架构最大特点就是层次化,将总的解析器分为三大解析器,再根据各个解析器的需求创建相关的类。
四个单元中测试理解和实践的演进
测试主要分为手动构造数据和自动构造数据两种。
第一单元求导问题我是自己手动构造数据来进行测试的,怎么说呢?自己手动构造的数据能测试到基本的功能和边界条件,但是由于数据比较少,还是有漏网之鱼的。
第二单元是电梯问题,由于不可复现性,我未进行复杂测试,仅仅手动构造了几组基本数据测试其基本功能,其后使用指导书的样例进行测试,通过后就提交了。
第三单元是jml规格,结构比较固定,所以在手动构造数据之后我还进行了Junit测试,尽量提高覆盖率,使得代码bug数明显减少。
第四单元是uml问题,我只进行了样例的测试,通过后即提交。
想了想这四个单元的测试,我发现我对测试这方面的重视度不够,这也许就是我程序里的bug不能绝灭的原因吧。以后坚决改正。
课程收获
经过这一个学期的java学习,我收获了很多,其中最重要的有以下几点。
- 良好的代码风格
- 代码架构的重要性及其设计
- 面向对象的思想
改进建议
- 上机实验后给出参考答案
- 强测可能由于一个小bug而毁于一旦,建议强测bug修复后可以适当给分
- 第一单元对于初学者不太友好,可以适当降低难度
浙公网安备 33010602011771号