面向对象设计与构造第四单元总结&课程总结

面向对象设计与构造第四单元总结&课程总结

一、第四单元作业架构设计

​ 本单元的作业主要是基于UML关系输入流来模型化和分析UML关系,并且不断迭代功能,主要的思路就是先对输入的Elements进行分类整理,然后合理运用继承和接口构建对象类型,并且进行处理。本单元上手难度在于理解UML关系类型,第十三次作业讨论区的手册对我们理解UML关系有巨大的帮助,也是我关于这三次作业理解的核心。

(一)第十三次作业

​ 在本次作业中主要实现对UML的简单分析,功能不多,但是需要合理构架,这样就可以更好的适应未来两次功能的迭代,提升代码可拓展性,所以在数据结构的选择和对象的建立至关重要。

核心理解:

主要是结合官方源码中给出的属性定义,正确分类element,并且将实际的模型与之建立对应关系

选择合适的数据结构,便于对UML类图的解析指令分析

我的方法就是合理分类element,一次根据关系赋予他们需要的属性,再根据需要添加关系分析的方法。

主要建立了MyClass、MyInterface、MyOperation这几个类来分类处理属性和操作

(二)第十二次作业

​ 本次作业中主要添加了对UML的UML协作图和UML状态图,在原有操作指令的基础上增加了六条指令,在初期的理解过程比较简单,要搞懂状态图当中的一些细节,所以需要不断地翻看第十三次作业讨论区中关于Statemachine的讲解,然后就是分析管理,迭代增加对象类和操作。

核心理解:

建立适当的类和数据结构存放新的element,并且将element之前的关系在类中体现

合理分析Region到Statemachine之间的各种关系和可能性,在设计指令操作的时候不要出现死循环的问题,需要思考状态迁移的多种可能性

在原有的基础上添加MyRegion、MyStateMachine、MyInteraction等类并且修改 MyUmlGeneralInteraction,根据需求添加操作以及属性关系(主要的雷区就是对状态图的考量并不全面,在接口问题疏忽了循环继承)

(三)第十三次作业

​ 本次作业主要任务是在原有的基础上增加UML模型有效性检查,这一单元的设计其实比较有意义,因为通过有效性的设计回顾了前两次作业指令操作中所遇到的一些特殊情况,这一单元需要对这些情况进行“提出来”的特殊处理,其实可以加深对之前代码的理解,同样对UML的理解也加深不少。

核心理解:

需要对原有架构进行修改,将本来忽视的无效性情况忽略,并且单独处理

​ 我还是延续了上一次的代码框架,在原有的基础上进行了修改和添加,算法方面设计了队列来维护图的遍历过程,寻找闭环。唯独的问题就是以往每次代码风格都是100,本次作业因为个人参加活动的原因时间仓促,没来得及修改代码风格,导致代码行数出现了冗余的问题,扣去了相当大的分数,太可惜了。其实可以新建一个Check类模型专门处理每一个无效情况,将所有数据一股脑抛入其中。

二、四个单元中构架设计以及对面向对象的理解

架构设计的重要性:

​ 架构设计在整学期的OO课程中地位至关重要,是直接决 定了代码质量以及作业复杂度的关键因素,第一单元三次 作业三次重构,对构造理解较为模糊,第二单元电梯问题 设计体现迭代性,三次作业的代码迭代性和功能迭代性 一致,后面两次作业本来对算法和对象之间的耦合性要 求不高,而且在官方设定好的面向对象构架下适当拓展, 所以都较为容易。

面向对象的运用:

​ 第一次运用不够,因为花费大把时间在算法理解上面,第 二次由于电梯应用场景的特殊性,使得面向对象的编程方 式特别适用,在多线程的理解中能力也有了很大的提升, 也是唯一一个无伤通过的单元,后面两次都尽量运用面向 对象编程思路。

三、四个单元中测试理解与实践的演进

(1)样例级测试:

​ 主要是对课程官方给出的样例进行测试,测试覆盖度低,测 试功能单一,只要是用来检查是否有低级错误和编译问题 等。

(2)构造测试:

​ 主要是根据自己对设计要求的理解进行样例构造

​ 首先是关系测试,设计具有覆盖度高以及关系耦合复杂的样 例

​ 然后是数据以及算法测试,设计复杂、极端、庞大的数据测 试运算结果以及正确性

(3)针对性测试:

​ 对某一个指令或者算法专门设计多样数据以及元素关系来进 行专门测试

(4)互测技巧:

​ 使用自己coding时遇到的坑点构造复杂数据

​ 编写简易的python输入输出包,一键操作房友们的jar包,简 化互测过程

四、课程收获

​ 这一学期的OO学习中对面向对象的了解是逐渐加深的, 但是每一单元的感悟与收获也是不同的,比如在第一单 元,可以说是几乎没有感悟了,因为个人认为第一单元虽 然对面向对象的要求性很高,但是似乎完全被递归下降算 法压制了,百分之九十五的时间都耗费在算法上面,对框 架以及规范性毫无感悟。第二单元是收获最大的一个单 元,整体设计需求对面向对象的要求很高,对并发性程序 和面向对象式编程都有了很好的理解,对问题的解析也更 加模块化、对象化。第三单元和第四单元看似不关键其实 很有必要,是从另一个角度让我们从更加严谨的角度去设 计代码,规范化测试,用实际的操作去理解面向对象过程 中的关系。

​ 另外就是面向对象之外的收获了,高强度的任务需求下感 觉自己的耐压性也更强了,而且也借助这门课获得了和同 学一起交流的机会,通过和身边同学的分享思路,交流算 法学习和提升了很多,另外也通过OO这门课上老师的讲 解学习到了更多的企业及规范以及编程之外的东西,收获 颇丰。个人对JAVA语言的理解也达到了一定的层次。

五、改进建议

  • 首先一定要说一下第一单元,虽然很理解出这一单元的助教和老师的良苦用心,但是确实有不妥的地方,这一单元任务的设计很难让同学们真正理解到对象化编程的魅力,因为花费了大把大把的时间在算法上面,虽然很少一部分人花费大把时间在递归下降之后也能摸到一些面向对象的魅力,但是毕竟是极少数同学,而且重点不突出,为何不设计第一次作业为能让大家花80%的时间去摸索框架和对象化思路,只用20%的时间去打磨算法呢,反而第一单元的收获不如寒假PRE部分,也不如两次上机对设计模式的理解和感悟,整体来说感觉不论是花费的时间还是难点重心都需要再次考量。
  • 然后还要吐槽的是指导书部分,希望助教每次修改之后能够在微信中通知,或者通知修改范围;另外希望能够提升指导书的规范性,很多描述都有歧义性,让同学们摸索不透,像是在猜谜语,或者对一些特殊的描述可以给一个样例来描述。
  • 最后希望重新设计一下互测环节,本质是为了互相阅读代码,获得更大的收获,或者是锻炼评测能力,但是感觉收效甚微,很多同学在后期都躺平了,或者出现另一个极端,几个同学造一个评测机,不看代码也不检查评测数据是否重复,直接评测直接刀,出现大量同质bug,这两种情况应该都不是课程组想看到的。
posted @ 2021-06-26 17:05  Aaron-Huang  阅读(45)  评论(0编辑  收藏  举报