首页 > 其他 > 详细

OO第三单元总结

时间:2019-05-22 17:18:32      阅读:77      评论:0      收藏:0      [点我收藏+]

JML语言的理论基础、应用工具链

前言

  JML是用于对java程序进行规格化设计的一种表示语言。通过JML及其支持工具,不仅可以基于规格自动构造测试用例,而且能够以静态方式来检查代码实现对规格的满足情况。

理论基础

注释结构、

  通过使用javadoc注释的形式表示规格,每行以@起头,包括行注释和块注释两种表示方式。

JML表达式

  JML表达式是对java表达式的扩展,新增了一些操作符和原子表达式,但同样有优先级顺序的规定。

  原子表达式

    \result表达式:表示一个非 void 类型的方法执行所获得的结果,即方法执行后的返回值。

    \old( expr )表达式:用来表示一个表达式 expr 在相应方法执行前的取值。

    \not_assigned(x,y,...)表达式:用来表示括号中的变量是否在方法执行过程中被赋值。

    \not_modi?ed(x,y,...)表达式:与上面的\not_assigned表达式类似,该表达式限制括号中的变量在方法执行期间的取值未发生变化。

    \nonnullelements( container )表达式:表示 container 对象中存储的对象不会有 null 。

    \type(type)表达式:返回类型type对应的类型(Class),如type( boolean )为Boolean.TYPE。

    \typeof(expr)表达式:该表达式返回expr对应的准确类型。

  量化表达式

    \forall表达式:全称量词修饰的表达式,表示对于给定范围内的元素,每个元素都满足相应的约束。 

    \exists表达式:存在量词修饰的表达式,表示对于给定范围内的元素,存在某个元素满足相应的约束。 

    \sum表达式:返回给定范围内的表达式的和。 

    \product表达式:返回给定范围内的表达式的连乘结果。

    \max表达式:返回给定范围内的表达式的最大值。 

    \min表达式:返回给定范围内的表达式的最小值。 

    \num_of表达式:返回指定变量中满足相应条件的取值个数。 

  操作符

    子类型关系操作符: E1<:E2 ,如果类型E1是类型E2的子类型(sub type),则该表达式的结果为真,否则为假。如 果E1和E2是相同的类型,该表达式的结果也为真,如 Integer.TYPE<:Integer.TYPE 为真;但 Integer.TYPE<:ArrayList.TYPE 为假。需要指出的是,任意一个类X,都必然满足 X.TYPE<:Object.TYPE 。

    等价关系操作符: b_expr1<==>b_expr2 或者 b_expr1<=!=>b_expr2 ,其中b_expr1和b_expr2都是布尔表达 式,这两个表达式的意思是 b_expr1==b_expr2 或者 b_expr1!=b_expr2 。可以看出,这两个操作符和Java中的 == 和 != 具有相同的效果,按照JML语言定义, <==> 比 == 的优先级要低,同样 <=!=> 比 != 的优先级低。
    推理操作符: b_expr1==>b_expr2 或者 b_expr2<==b_expr1 。对于表达式 b_expr1==>b_expr2 而言,当 b_expr1==false ,或者 b_expr1==true 且 b_expr2==true 时,整个表达式的值为 true 。
    变量引用操作符:除了可以直接引用Java代码或者JML规格中定义的变量外,JML还提供了几个概括性的关键词来 引用相关的变量。\nothing指示一个空集;\everything指示一个全集,即包括当前作用域下能够访问到的所有变 量。变量引用操作符经常在assignable句子中使用,如 assignable \nothing 表示当前作用域下每个变量都不可以 在方法执行过程中被赋值。

方法规格

  前置条件

    前置条件通过requires语句表示,要求调用者确保被调用条件为真。

  后置条件

    后置条件通过ensures语句表示,要求方法实现者确保返回结果满足所定义条件的要求。

  副作用范围限定

    通过使用assignable或者modifiable关键词定义副作用约束语句,限定次方法执行对后续方法执行产生的影响范围。

类型规格

  类型规格指针对Java程序中定义的数据类型所设计的限制规则,一般而言,就是指针对类或接口所设计的约束规则。 从面向对象角度来看,类或接口包含数据成员和方法成员的声明及或实现。

 

OO第三单元总结

原文:https://www.cnblogs.com/DoubleRider/p/10906817.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!