BUAA-OO-UNIT4-UML

第四单元作业架构:

第四单元的作业仍然采用增量开发的形式,总体难度不大。但由于实在没办法实现高效的解耦,导致hw15的时候Myimplement里面写了超过500行。

hw13:

hw13中主要进行了对于UMl类图的解析,在实现的过程中,我通过HashMap的方式来映射id和不同类型UmlElement之间的关系。通过递归调用来得到所继承的类、接口实现

UML图如下:

 

 

 hw14:

hw14中增加了对于UML顺序图和UML状态图的解析,对于元素仍然使用HashMap进行映射,将Status作为节点,Transition作为边,进行bfs可以枚举得到某个点是否为关键节点。

UML类图如下:

 

 

 hw15:

hw15中主要增加了对于UML三种图的有效性的判断。通过枚举的方式来判断名字等属性是否合法,通过递归的方式得到所有继承的类和接口来进行合法性判断。

UML类图如下:

 

 

 架构思维和方法理解的演进:

最开始,我对于OO的理解是:通过对类封装的方法来减少实现过程中的冗余,能加快代码实现的速度。

但在pre的过程中,我就发现,好像OO的方法并没有我想象中的那么优秀。对于某些例子而言实现起来比顺序结构要复杂许多,如果考虑后续的增量开发和延展,在前期的规划上还要更花时间。

所以在进入第一单元之后,我对于OO的态度一直有一点点抵触。特别是对于OO的第一次作业,我写了一半,把OO的方法改为了不那么OO的方法,然后很快的就通过了。别人写了好几天,我就写差不多就半天,于是心中一阵狂喜,觉得这课好像也能水过去,又可以开摆了。

但到了第二次作业的时候,我发现不使用OO的方法的话,会在一个方法里面写很长,这样就得不到代码分,被迫无奈之下,我只能进行痛苦的重构,改成了较为OO的方法。

而且对于作业架构而言,最开始的几次作业,我都只能等到周四上完实验课才能开始写,因为我确实不知道该怎么去OO的实现这样一个过程,只能依照着给出的示例去模仿。

久而久之,我对于OO的方法逐渐熟练了起来,结合了理论课讲到的工厂模式、消费者生产者模型等,我逐渐可以自己对于一个要实现的内容进行构思。这也让我在后面两个单元的作业中有了更加清晰的结构,实现起来也快了许多。

很喜欢吴际老师的一句话:“我们的学生之所以不同于码农,是因为我们能够实现构造与设计。”在完成这门课的学习之后,颁奖典礼的这段话算是对这门课最好的总结了。

测试理解与实践:

最开始测试是使用的对拍和手动构造corner case结合的方式,到后面借鉴了同学写的优秀评测机,在此基础之上写了几次我自己的评测机。但有几次因为懒和时间原因没有写,付出了惨重的代价。

演进的过程主要还是学习优秀同学的分享。虽然课程组也介绍了JUnit的方式,但用起来有点像自己写testbench,勾起了我不愉快的回忆,使用起来感觉没有对拍方便,因此还是使用对拍的方式最多。

学习这门课的收获:

学习这门课最大的收获,就是懂得了设计与构造的重要性。

原来写代码,我仅仅是简单构思一下,大概想想什么地方要干嘛,然后直接上手,遇到问题再来解决。这就导致了很多不必要的时间浪费。

在学习这门课之后,我会最开始就完善主要的设计,包括需要哪些类,里面需要一些什么方法和属性,怎么进行交互等等。这样在我实现的过程中就少了很多写了一半又得删改的情况。

除此以外,还有测试的方面,学会了自己写评测机,也知道了该从哪里方面下手去进行测试。

还掌握了java这门很重要的语言,掌握了继承与多态这些重要的机制,也掌握了正则表达式这种强力的工具。

给课程组的建议:

1.不知道是不是我的个人感觉,三、四单元的作业做起来明显感觉比前面更加折磨,像是有很多无意义的重复劳动。我感觉三、四单元的理论教学部分增加,代码实现部分减少,增加更多的规格运用和定义训练可能效果会更好一些。

2.加强中测数据。可能是为了让大家更好的自己测试,所以中测的数据一直很水。但中测作为一个完成作业的标准,至少应该覆盖到绝大多数情况吧。有些单元的中测就几行数据,感觉起不到什么测试的效果。

3.第四单元的指导书可能需要改进一下,感觉比语文的阅读还要难理解,也可能是由于自然语言的多义性,在实现的过程中带来了许多困扰。

posted @ 2022-06-29 11:36  Satom1shihara  阅读(8)  评论(0编辑  收藏  举报