BUAA_OO_2021_第四单元总结

BUAA_OO_2021_第四单元总结

OO第四单元的主要任务是实现一个UML分析器,这一部分由于考期加持,再加上需要学习繁杂模糊的UML规则,导致比JML完成的更加吃力,不过也有很多收获。

架构设计

UML类图如下:

架构设计主要是依托各个元素之间的包含关系进行,类似于层次分析法,建立了几个主要的类,然后进行元素的设置从而搭建起整个程序的框架。

同时这一部分有两个类是由checkstyle驱动设置的,由于写的代码太过纯朴,导致代码行数特别多。

第十五次作业解析

第十五次作业对于我来说理解的比较困难,用了很长时间才搞清楚每一个错误的实际意义。

R001

这里卡住我很久的一点是“UMLAssociationEnd”的归属问题。这里UMLAssociationEnd的reference所对应的类拥有其对端所拥有的UMLAssociationEnd,而且自关联的两端UMLAssociationEnd都为其拥有。
在判重名的时候,要把arttibute和UMLAssociationEnd放在一起比较。

BFS

接口的继承关系类似于一个树,因此在遍历有继承的接口的时候,需要使用bfs。这里我使用了一个队列来标记遍历过的点,使用一个hashmap来记录访问次数。

此外,这一次作业需要尤其注意空指针问题,对于一个空指针对象直接调用方法会报错。

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

通过一个学期的OO学习,我能明显的感觉到在写java程序时清晰了很多,能通过很多个类和方法把一个程序解构成一整个很清晰的架构。

第一单元

作为一个寒假摸鱼的仔仔,第一单元就几乎是面向过程完成的作业,虽然用了所谓层次分析之类的面向对象方法,但其实完全就是在用面向过程的方法进行暴力求导,还在第三次作业进行了完全重构。 菜鸡一定要预习OO

第二单元

这一部分有了一点面向对象的思想,在使用消费者生产者模式写程序时能够通过解析对象来写程序,但是对于每个方法的构造仍然很混乱,没有很清晰的架构。

第三单元

这一部分根据JML规格写代码,也就不存在所谓架构问题,只是去完善对应的方法。但在阅读官方包代码的时候,通过学习比较清晰的JML程序架构,也一定程度上提升了自己对于OO方法和架构的理解。

第四单元

这一部分就类似于我们自己完善JML规格并完成代码,通过自己的架构完成规定的任务。这一部分感觉自己写的程序已经相对有逻辑,方法、类的位置层层递进,虽然代码有些冗余笨重,但比之前肯定改善了很多。

关于测试

在早期的测试(第一单元)中,造数据都是手动想数据为主,效果一般,能排除大部分坑点,但到了第三次作业,更复杂的规则导致无法把所有情况都想到。

在第二单元就几乎没怎么进行过测试,也因此付出了很大的代价。

之后就以自动测试为主,自己先进行一下非常简单的形式化验证,感觉还比较有效,基本能猜到自己的错误点在哪个方法,然后通过和其他同学分享一些测试数据完成测试。

在我们的班级里有几个同学分享了有关形式化验证的东西,感觉很牛,如果有精力学习,感觉可以从本质上让自己的程序无懈可击(但我太傻了,学不会)

课程收获

第一个收获就是学会了java语言的使用,通过一次一次的作业对java不断地熟练,并且能够完成具有一定规模的任务。

第二个就是学习了面向对象的思想,使用另一种套路来写代码,丰富了自己的思想。

第三个就是通过这门课认识了更多同学。和其他同学一起讨论解决方法、优化方案和如何测试不仅让效率提高了很多,也借由这个机会认识了几个hxd。

建议

1.UML指导书可以更完善,其实我一直没理解不系统的整一个类似jml教程的uml教程,可能这本身也是一个增加难度的点。

2.感觉可以调整一下任务的顺序,把JML放在第一个,先通过JML学习规格设计,然后剩下三个部分可以用现在的顺序。直接从求导开始感觉太折磨,刚开始没有接触面向对象的话很可能用面向过程的方法硬解,导致不断地重构,太过痛苦。

3.实验课最好有一个反馈结果,感觉每一次实验就是去做,正确与否自己也不知道,这样收获不是很大。

写在最后

作为一门作业为主,考核相对比较松的课,OO的体验感是目前最好的一门专业课。这不仅仅是由于压力小,这门课相比有CO、OS有很多优点,既没有OS那种无力的折磨,又感觉比OS学到了多的多的东西。

能够顺利的完成OO,和大家的帮助有着莫大的关系。学长学姐们曾经博客的分享,很多同学在思路上的帮助让我成功的完成了作业并且de出了很多bug,还有油油的某助教总能在最折磨的时候给予关(无)键(情)帮(补)助(刀)。总而言之,这是一门需要讨论、需要分享,需要一起通关的课程。希望OO可以越来越好~

posted @ 2021-06-23 22:31  SilenceBQ  阅读(114)  评论(1编辑  收藏  举报