北航OO第四单元总结

北航OO第四单元总结

前言

本单元作业是uml图的理解学习与应用,要求我们实现一个uml类图的解析工具,输入输出的处理工作已经帮我们写好,我们只需要写核心部分即可。第四单元是最后一个单元了,相比于之前的三单元练习,除了学习uml图的时间以外,作业方面基本上没有太多难度,测评机也没有太卡时间,基本上按部就班就可以完成本单元作业了。

作业架构设计

本单元作业本质上是通过解析mdj文件的源码,然后实现一些函数来输出对应uml图的相关情况。题目仅要求实现一个解析类的端口,背后的工作都由我们来完成,考虑到可拓展性,只“问什么做什么”当然是不行的,所以需要完整的保存好uml图的各类属性与其中的联系,最后输出所需要的数据即可。因此在我的架构中,我针对uml图中的有与其他元素相关联的元素都新建了一个自己的类,例如MyClass,MyState,MyLifeLine等,除了储存对应uml元素的基本信息外,还要保存好这些元素所参与的各种联系,例如MyClass中有什么方法,有什么属性,与哪些class相关联,继承了哪些类或接口等等。这样一来,当新增某项需求时,也就可以直接导出,“问什么答什么”,大大增强可拓展性。

第一次作业

仅要求解析uml类图,除要求的MainClass,MyUmlClassModelInteraction外, 新建了MyClass,MyInterface,MyOperation三个类,用于保存所属和关联关系等。

第二次作业

新增了对uml状态图和顺序图的解析,对应的新建了MyCollaboration,MyInteraction,MyLifeLine,MyRegion,MyState,MyStateMachine,MyTransition几个类。

第三次作业

新增了模型检验的要求,实现了一个MyUmlStandardPreCheck类,以及在各个类中新增了一些检验方法。

本学期四单元OO历程

第一单元

第一单元可谓是本学期我过的最为艰难的一个月,因为之前没有特意去学习java,也没有接触过面向对象的思想,导致我一上来就要从0开始学习并实战,偏偏第一单元作业还是比较难写的求导函数,最终结果就是一连几周的空余时间都扎在宿舍中写OO作业(哭)。再加上在第一次作业中我就尝试着使用面向对象的思想进行编程,将表达式的式,项,因子都视为对象,并按种类写了很多继承关系的类,进一步加大工作量,还好最终挺了过来,虽然代价很大,但这也是我第一次尝试面向对象编程,甚至是第一次写java,这一个月的不眠不休带给我的收获也是巨大的,是我对OO思想的理解以及编程能力的飞跃时期。

第二单元

第二单元是多线程的电梯作业,由于第一单元吃了亏,第二单元一开始我就考虑了很多后面的可拓展问题,大大减少了后面几次作业的工作量,也是第一次让我体会到了迭代开发的好处。在架构方面采用了某一次实验课的架构,使用生产者-消费者模式,在花了很长时间理解多线程的核心思想后,最终圆满完成了几次作业,也取得了令人惊喜的强测成绩。特别是搭建完成后看着自己一步步敲出来的电梯程序有条不紊的运行时,心中特别有成就感。

第三单元

第三单元是规格的学习,主要是学习jml规格花费了好长一段时间,然后作业基本上是按部就班照着规格实现,谈不上架构设计,只是一些规格需要使用别的算法,否则会被卡爆()。感觉本单元做到最后反而背离了主题,大家都去卷算法了……

第四单元

最后一单元也就是本单元,除了学习uml图的成本外,感觉各方面都还是挺轻松的,搭建好框架,将解析出来的元素放进去,最后要什么给什么就行了。感觉经过了前三个单元的磨炼后,无论是编程能力还是写代码时的思路清晰程度都得到了很大提升。

四个单元的测试相关

本学期的代码测试工作我是以手动构造数据为主,前两次作业由于数据量巨大且复杂,手动测试比较困难,而且那时候自己的debug能力也不足,最后只能白嫖了同学的测评机来找bug(雾)。但是后来debug基本上有经验了,首先是编程的时候就会自然的注意到一些可能会有bug的地方,在写代码的时候就规避掉了,比如很多空指针问题。然后在构建测试数据时,我会采取循序渐进的测试策略,首先构造几个简单的数据测试代码的功能性问题,一般绝大部分RE错误就会在此时暴露出来,随后构造一些稍微复杂一点的典型数据,测试正确性问题,这里最重要的一点就是构造的数据要考虑周到,把每一种可能情况都测到,数据不需要太复杂,但要有代表性,不取任何端点数据。最后再测试一下极端数据的情况。三轮以后,从我的实际情况来看基本上90%的bug都已经排除掉了,效果良好,以后我也会采用这种方法。

课程收获

毫无疑问,本学期的OO课带给我的收获是巨大的,首先是我编程能力的提高,在经过12次作业的磨砺以后我无论是编程速度还是规避bug的能力都有很显著的提升,可能这就是熟能生巧吧,大量的练习带来的提升是非常明显的。其次是我面向对象思想的建立,本学期的编程我基本上都采用面向对象的思想进行编程,也深刻体会到了这种编程思想所带来的各种好处,面向对象的思维能够把很多复杂问题通过分解对象的行为化简,不但能够帮助更简单的编程,也能够使得编程时的思路更加清晰,准确,出bug的可能性大大减小。综上,我十分感谢本学期OO课程对我的帮助,特别是荣文戈老师的课堂生动而有趣,让我学到了很多课堂外的实用知识。

给课程提出的建议

根据我自己的体会,第一单元在没有接触学习过java的情况下从0开始还是过于困难了,虽然寒假期间有提供一些预习课程,但毕竟是假期期间,而且也不是强制的,结果像我这种偷懒的人直接遭重了(雾)。建议以后和同学们强调一下预习的重要性,把后果说严重一点 0.0 。

posted @ 2021-06-26 15:41  kiasama  阅读(66)  评论(0编辑  收藏  举报