第四组作业博客总结
OO第四组作业总结
17231164 丁元杰
第13次作业,UML作业1
程序度量
程序度量如图。
可以看出,由于本身UML的各种结构之间的引用关系非常明朗,此次的类图也算是少有的清爽。
不过可以从度量中看出,集成了所有询问功能的类——UmlInteraction
类的复杂度比较高。这是因为很多基本的逻辑,诸如构造、查询、修改都在这其中完成了。
想要降低这个类的复杂度,可能需要对于整个结构的构建部分丢给一个单独的工厂去完成,这样UmlInteraction
就是名副其实的Interaction,而没有构造的部分了。
此外UmlStruct
的部分复杂度也比较高,这可能是其中使用了很多递归函数的结果。
同理可以看出,方法中复杂度比较高的buildAllRelationships()
就是构造整个UML类图过程中建立关联、继承、实现等关系的函数。但是这个问题在下一次作业得到了解决。
设计架构
针对UmlClass
,UmlInterface
,UmlMethod
,UmlAttribute
分别建立了方便编辑、保存相关信息的类。其中可以观察到UmlClass
的“接口实现”关系,与UmlInteraction
的“接口继承”关系十分相似,遂统一建模。
UmlStruct
对应UmlClass
UmlPort
对应UmlInterface
UmlMember
对应UmlAttribute
UmlFunction
对应UmlMethod
由此,可以将方法交予类和接口,成员交予类进行统一管理。并且由于所有的查询都是从类开始的,故只在UmlStruct
处保留对外的公用查询接口。这些查询中的某些信息,如方法的个数、关联的个数等静态地保存在了类中,而凡是关于父类(实现的接口等)信息的查询,都是通过递归的方法在整个继承树上去查询的。递归的写法可以极大地降低编程的复杂程度,并且很好地反映出了各级询问之间的关系:父类的问题是子类问题的子问题。
本次作业理应没有什么难点,按照需求一条一条实现即可。
自己程序的bug
在公测中发现,当子类所继承的某一个父类中的成员违背了隐蔽性原则时,抛出的异常中包含的类总是这个父类,而非查询的子类。这是在递归过程中没有充分考虑抛出异常要求的结果。
只需要在子类中抓住父类的异常,再次抛出即可。
发现bug的策略
由于时间仓促,并没有做详尽的测试,于是在公测中才查出错误。
第14次作业,UML作业2
程序度量
程序度量如图。
可以观察出,由于这次的任务包含了较上次更多的询问,所以UmlInteraction
的合计圈复杂度较上次更为爆炸,并且UmlStruct
的体积继续增大。
在方法这边,可以看出几个方法(尤其是图论的递归方法)出现了逻辑复杂度过高的情况,这可能是算法题写多了的结果。
设计架构
由于此次作业加入了顺序图和状态图,故查询的入口变成了三个:类、顺序图、状态机。在上次作业的代码完全不变的情况下,加入了更多的功能。
此次作业的难点在于三个前置条件的判断,这三个判断都可以用图论的诸如可达性、路径数等概念来进行判断,可以很方便地写出\(\mathcal O(n^2+nm)\)复杂度的搜索算法。由于这些是纯粹的图论问题,所以可以统一建模为TarjanGraph
(事实上算法雨Tarjan无瓜),负责加边、计算。由于这个类的加入,使得很多重复工作的压力得到了平摊,一定程度上降低了程序的圈复杂度。
到了第二次作业,UmlInteraction
类满满当当地撑到了500行,其中有接近50行的import
内容。由于笔者这次要复习期末考试,于是也没有单独写一个工厂(或者三个)进行单独的构造工作。(还好没有下次作业了)
自己程序的bug
在公测中没有发现bug
发现bug的策略
没有。
写在最后
OO课程的一学期征战终于到了尽头,实际上这个征战并没有计组的那样爆肝,也没有OS不知道bug在哪里那种崩溃。可能是第一、二个单元的难度过于集中,导致后半学期的OO实际上非常轻松。当然课程组的目的并不是想让这个课难得让人难忘,而是真实想让我们学习到OO的相关知识。在这一点上,我十分感激OO并没有在我已经足够支离破碎的学期中横插一刀。
相比起去年OO风评出现了极大问题而言,今年的OO做出的改变使得我们没有明显的体会,而这恰巧说明了改革切中了痛点。希望新的一届助教团队能够帮助老师把面向对象的课程更上一层台阶。
一学期下来,我都有什么样的收获呢?OO无疑让我学会了继承、学会了一些基本的设计模式、学会了在动手之前先构思结构、学会了编写多线程程序……虽然单元测试、UML的部分我还暂时没有体会到其用处(非常不喜欢测试),但是这一学期的OO课程至少不是一无所获。
在课程最后的颁奖大会上,非常荣幸地,我拿到了OO全能奖的称号,但是很遗憾地还是在作业过程中修补过两次bug(其中一次还失败了)。OO终于圆满结束了,祝愿OO课程组越办越好!
posted on 2019-06-24 19:43 No_CE_in_Vegetable 阅读(118) 评论(0) 编辑 收藏 举报