OO课程第三次作业JML

JML理论基础

pure:
无任何副作用。

\result:
该方法返回的对象。

require:
前置条件,即调用该方法时参数以及成员变量需要满足的条件。

assaignable:
副作用范围,列出所有可能会被修改的成员变量。

ensure:
后置条件,即调用该方法之后参数和成员变量需要满足的条件。

\old():
表示调用该方法前的该对象或表达式的值。

\forall():
相当于数学中的"任意"符号。

\exits():
相当于数学中的"存在"符号。

<=, =>, <=>:
推理。

public_normal_behavior:
正常功能规格。

public_exceptional_behavior:
异常功能规格。

also:
分开正常和异常两种规格。

signals :
满足条件抛出异常。

应用工具链

下载了openjml相关插件,无奈在idea内无法运行,遂放弃。

JMLUnit使用

本人一直在作业中手工设计单元测试,而openjml运行不起来,无法使用对jml的单元测试,遂放弃

模型架构设计

存图:

用id到person的hashmap存network中所有的人,person中用person到value的映射存图。此方法可有效的完成第一次作业。

存group:

动态维护group中关于组的性质,如\sum_{i,j}i认识j。解决了第二次作业的问题。

求块数:

通过并查集解决了。

bug修复

主要遇到的问题

1.建图建了单项边。5pts。wwwwwwwwwwww

2.没看讨论区。明知tarjan容易写崩还是写了。(一般比赛里scc比较常见可以两边dfs做,所以tanjan练得少

3.并查集merge的不是find后的。(这个无法解释了。。。太丢人了

4.第一次作业看着优秀的设计他会导致超时,大概超100ms。wwwww,log还是太大了,加上java本身慢。。。

规格理解心得

感觉一些本来好表示的概念竟然需要用一定算法来表达。比如求总共的块数。一时间看的有点晕。

以及正常的概念表达需要很长的话说清。看着晕。需要仔细校对括号。

但jml确实让规格变得更加规范了。

猜你喜欢

转载自www.cnblogs.com/woafrnraetns/p/12939612.html
今日推荐