BUAA OO 第四单元总结
BUAA OO 第四单元总结
本单元主要为UML内容解析。
作业架构设计
第十三次作业

在这次作业的架构中,首先是由MyUmlInteraction这个类解析读到的element,将其分配到元素所属的各个容器中。当所有的element都分配完毕后,再依次根据关系赋予各个元素属性。最后再根据方法的需求添加多种方法。
而为了方便查询,我自己创建了MyClass、MyInterface、MyOperation这几个类。在这些类中存储了关于参数、父类、类型等属性,以此使后续的方法执行更加顺利。
第十四次作业

第十四次作业其实比第十三次作业要简单,只要理解了这些概念,仿照第十三次的作业继续创建状态图和顺序图就好了。
本次作业我的总体架构是由MyUmlGeneralInteraction类解析element并将其分配给其下的三个子类。每个子类都只负责和它相关的命令。例如MyUmlClassModelInteraction类中只包含了类图内的元素,也只执行类图相关的方法。三个子类之间互不干扰,没有联系。这种方法虽然在这次作业中简洁明了,在下次作业需要取不同图内的元素的时候却造成了一些麻烦。
第十五次作业

在这次作业中添加了模型有效性检查。原本我是打算延续上次作业,在各个图的类中添加关于这个图的检查方法。结果类内代码超500行扣了50分风格分不说,在检查R007时,更是繁琐。因此我干脆建了一个新类MyCheckModel用于有效性检查,将顺序图、类图、状态图内所需要检查的元素都一股脑用方法传递给MyCheckModel类。这样一来,R007的模型检查就显得十分方便,并且也缩短了代码的行数。
总结在四个单元中架构设计及OO方法理解的演进
OO课程的每次作业都是难者不会,会者不难。在我看来,每单元的第二次和第三次作业其实都是类似的。最让人痛苦的往往是第一次作业。刚接触这门课的时候,我想的是只要写出来这次作业就行,因此第一次作业完成的格外快。然而在遇到第二次、第三次作业后却需要重构代码。所以到后面两个单元时,我会在第一次作业时就考虑好要构建一个适应性强的架构。同时,也正是一次次的重构让我心中对一个好的架构有了清晰的认识。简洁、清晰、高内聚、低耦合、易维护、可扩展,让每个类都有明确的职责,让其只关心自己该负责的部分。这些都是一个好的架构应该具有的特点,也是OO方法中很重要的一部分。
总结在四个单元中测试理解与实践的演进
OO作业的测试可大致分为两种:手动构造数据测试和自动化生成数据测试。
大部分时候我都是通过手动构造数据进行测试,因为在很多时候,大家出的错都是同一部分的问题,因此只要有第一个人找到了错误并且分享了样例,那么后续的同类错误都可以根据这个样例进行判断。而我对自己代码的测试即样例、讨论区分享的数据、中强测错误信息。通过这些基本上就能改完代码中的BUG。
而自动化生成数据测试也分为两种,批量生成数据覆盖测试以及通过工具链生成测试样例。批量生成数据覆盖的测试方法虽然实现起来效率很高,但它还要求与一正确答案进行对拍。如果只是两个人之间互相对拍,那很有可能造成双方共同出错而没有发现。通过工具链生成测试样例是个很好的方法,但它的学习成本有些高。在忙于完成作业的情况下,耗费时间学习测试方法是个性价比不高的选择。如果是要将程序用于实际应用,那么我一定会采用这种方法进行检验。但若只是为了完成作业,这种方法就有些大材小用了。
总结课程收获
OO课程给我的收获是每单元的作业带来的。
第一单元的作业让我基本掌握了java这门语言的使用,同时也让我明白了架构的重要性。
第二单元的作业使我深入理解了多线程的工作机理。我在这一单元中明白了同步、互斥的含义,而分析这些的过程则锻炼了我全面思考的思维。
第三单元的作业使我了解了JML语言,尽管并非完全理解,但我已经能够通过JML大致明白方法的目的了。无论是根据需求撰写规格还是根据规格实现代码,我都有信心能够完成。
第四单元的作业教会了我很多UML的相关知识。对于各种元素的结构和组织方式我都能够熟记于心。
而完成这几个单元作业的过程则让我更加理解了面向对象设计与构造的内涵。小到get、set,大到推翻重构,OO方法逐渐影响了我码代码和构思的风格。这既是对我编程风格的一次改造,也是对我思考问题的方法的一次提升。
改进建议
-
希望在第一单元时,能给出导向性的架构建设建议。因为刚开始接触这门课,学生掌握的架构方法并不多,往往是想着怎么简单怎么来,这也会导致后续重构耗费大量无用时间。
-
希望能够提前给出每单元的最终需求。例如在第四单元开始时就明确最终目标:实现类图、顺序图、状态图的构建查询,以及模型的检查。
-

浙公网安备 33010602011771号