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确实让规格变得更加规范了。