BUAA_OO_第四单元总结
一、本单元作业的架构设计
属于哪个类的元素,就由哪个类管理,首先根据这个原则将“平面”的数据转化为“树状”的数据。整体层次和UML里的层次相似。
继承和实现关系,抽象成有向图的关系。
一些重要的查询:
checkForUml002 直接拓扑排序,没被搞掉的点就是环上的点。O(n+m)
checkForUml003 如果直接后继是多重继承,那这个点也是多重继承,否则检查所有直接后继的可达点集是否相交。O(n^2)
checkForUml004 如果父类或某个直接接口是多重继承,那这个点也是多重继承,否则检查所有直接实现的接口以及父类的可达点集是否相交。O(n^2)
getSubsequentStateCount 直接dfs找,每次找一个没被dfs过的点扩展。O(n+m)
UML类图放在最后了,以免影响阅读。
二、四个单元中架构设计及OO方法理解的演进
-
第一单元:层次化设计。
多项式求导。学会用接口(Derivable)来抽象某一共性,用接口类型来调用这个方法,将所有的运算符都看作Derivable接口。工厂模式。表达式树。递归下降。
-
第二单元:并发设计。
模拟电梯。调度器(电梯)线程,分派器线程,读入线程。线程通信,同步互斥,生产者消费者。解耦。
-
第三单元:规格设计。
社交网络。使用规格来表示代码的行为,更高层次的抽象,也可以用来形式化验证。并查集、最短路。
-
第四单元:UML建模设计。
UML类图解析器。UML中的每种元素看作一个类。这些类之间的层次关系由parent构建。每个类有自己管理的对象。
三、四个单元中测试理解与实践的演进
-
第一单元:层次化设计。
随机数据,极限数据,和sympy跑出来的结果判断一下是否相同。
-
第二单元:并发设计
随机数据,极限数据,并根据逻辑关系判断输出序列是否合法。运行时间控制、CPU时间控制。多线程评测判断是否存在并发问题。
-
第三单元:规格设计
随机数据,极限数据,和同学对拍。
-
第四单元:UML建模设计
第一次作业:自动生成随机UML图,和同学对拍。
第二、三次作业:开始意识到数据生成并不是那么好生成,数据生成工具也没有掌握怎么用。于是就没对拍。于是第三次作业WA了一个点,原因是代表lifeline的Attribute的parent必须是null或UmlCollaboration。
-
测试还是非常有必要做的。但是测试数据的生成,输出结果的检查,有时并不好做。现在还有同学可以对拍,以后可能对拍也无法进行。
四、自己的课程收获
- 课程收获蛮多。最重要的是掌握了面向对象的思想、层次化设计的思想、测试的重要性,以及其他很多知识。
五、三个具体改进建议
1、pre增加多线程相关。多线程hack时多测几遍。
2、增强中测数据。
3、JML部分教一下大家怎么用JMLUnitNG,OpenJML等工具,并且用这些工具对官方JML代码进行验证。
六、随便说点
这学期状态有点拉跨。
总共出现了四次bug,分布在四个单元,每个单元出一次bug。
UML类图



浙公网安备 33010602011771号