OO第四单元总结——UML解析

OO第四单元总结——UML解析

总结本单元作业的架构设计

本单元三次作业的UML类图如下:

第一次作业:

第一次作业架构较为简单,仅仅只是为了统一管理ClassInterface而将它们都归类于一个MyStruct接口下。本次作业的类图也直接放在了MyUMLInteraction中。

第二次作业:

第二次作业相比起第一次作业而言,有了一些重构。主要是发现MyUMLGeneralInteraction一个类里放三种图的话,500行显然放不下,只能进行拆分,把顺序图独立为MyInteraction,然后考虑到功能之间独立性,以及可能存在多个顺序图,又设置了一个MyInteractionBuilder类,用于从输入数据中构造顺序图。

类似地,状态图部分也将状态图独立为MyStateMachine以及构造工具MyStateMachineBuilder

然后,在每个图的类内实现了对该图属性查询的方法,在MyUmlGeneralInteraction类内直接调用相应图的方法进行查询。

第三次作业:

第三次作业的类图变得更加复杂,主要原因还是在于添加了错误检查的模块。然后,由于原来的MyUmlGeneralInteraction类500行代码又装不下了,只能将类图又单独拆分出来,成为MyClassModel类。但是由于较为懒惰,没有再将类图的构造部分单拆一个builder,将就着498行的MyClassModel类结束了这次作业。不过在强测中还是发现了一些问题,只能在避免大幅重构的情况下努力尝试修复Bug。

总结自己在四个单元中架构设计及OO方法理解的演进

第一单元:表达式求导

本单元第一次作业是简单多项式,因此我直接使用HashMap来按指数存储系数。但是到了第二次作业,三角函数的加入,让这样简单的方法失效了。这是第一次彻底的重构,由于不知道如何设计架构,参考了课程指导书中的树状结构。当然,这样的结构基本就告别化简了,因此就这样结束了本单元。

第二单元:多线程

第一次作业是单电梯,我的架构把调度器和电梯绑在一起,成为同一个类,这是非常直观的设计,但是到第二次作业时就面临大幅度的重构,把调度器独立出来,然后重新构建调度器调度三台电梯的方法。第三次作业相比起第二次作业,需要考虑换乘,给调度器和电梯之间的交互加上了约束,一度产生了死锁和活锁的情况,后面通过打破约束的方法基本算是解决了问题。

第三单元:基于JML的设计

本单元主要是实现JML所描述的方法,具体实现形式随意。本单元内,唯一一次Bug出现在实现时的“缓存”没有与“主存”同步,导致在操作“缓存”中的emojiMessage时出现删了不该删去的东西。这主要还是设计时没有理清楚关系,以及缺乏测试的原因。

第四单元:UML解析

本单元架构已经如前面所述。在编码过程中,还是不断发现当前实现方式过于冗长,需要重构,后两次作业每次都对前面的作业进行了较大幅度的重构。

总结

总而言之,四个单元的OO课程下来,我理解了一些设计模式,学会了在自己的设计中应用其中的一些。也吃了不少架构不合理的亏,每次都被重构搞得非常疲惫。

总结自己在四个单元中测试理解与实践的演进

第一二单元状态较好,尚有心情每次写一个自动评测机,接受自己以随机方式生成数据进行测试,或手动构造特殊数据测试。当然其中也有坑点,比如第一单元的评测机由于我对表达式的理解出了偏差,评测机内生成数据的部分也有偏差,没有测出本来存在的问题。这可能也就是代码由一个人写的弊端。第三第四单元已经被各种课程压得疲惫不堪,每次作业就只简单手写几个样例测试一下就提交了。

总结自己的课程收获

从Pre自学Java开始,到第一单元初探面向对象,然后第二单元的多线程,第三单元按规格的程序设计,第四单元对UML图的解析。四个单元下来,我从只会写简单的C程序到现在能够独立完成一个千行级别的小工程,可以说是进步明显,收获很大。此外,面向对象的设计思想,在写评测机时也有体会。此外,在操作系统之类的课程中,也在C语言下见识到了面向对象的方法。更多的不知道怎么说,至少现在我能通过面向对象的思想,结构化的设计思路去设计一个程序、一个项目,而不是在学习之前只会傻乎乎地一个或者几个函数写所有东西了。

而且,本课程也让我从Dev-C++、IDLE等简单的IDE中毕业,进入更复杂也更方便的类似IDEA、vscode之类综合性IDE的殿堂之中,大大提升了自己开发的效率。也算是很重要的收获了。

立足于自己的体会给课程提三个具体改进建议

1、第一单元文法、递归下降方法应该多给一些提示,不然很多同学只能盲目地探索,很浪费工夫。

2、实验课作为“优秀代码赏析大会”,类似垃圾回收那次可以降低一点难度,更注重于告诉同学们,作业相关的代码还可以如此设计。比如那次出校审批系统的实验,就给了我们当时电梯作业很大的启发。

3、UML部分还是应该更明确地讲一讲UML的结构、用法之类,感觉理论课也好,指导书也好,讲得都不是很明白,讨论区去年吴老师的帖子算是略微讲得详细了一些。应该把那个帖子里的东西揉进上课内容或者指导书里。到最后一次作业Debug时才认识到UML的结构还是挺折磨的一件事。

感想

最终还是没能做到哪个单元全部AK,每次都有各种各样小小的错误。

每周迭代开发真的很累很疲惫,特别是多线程Debug找不到问题。

每周三开始的状态都是“您还有许多事情需要处理。现在还不能休息哦。”

OO,尝试过,爱过,受伤过,疲惫过。最后的结果已经不重要了,经历过的过程就已经足够。

posted @ 2021-06-23 11:42  涛父  阅读(86)  评论(0编辑  收藏  举报