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类图

posted @ 2021-06-26 17:02  __zzy  阅读(62)  评论(1)    收藏  举报