From the OCL to JML - Department of Computer Science
Download
Report
Transcript From the OCL to JML - Department of Computer Science
By Karen Richart
The Object Constraint
Language (OCL)
Formal specification
language that could be used
for constraining the model
elements that occur in a
UML diagram.
The Object Constraint
Language (OCL)
Formal specification
language that could be used
for constraining the model
elements that occur in a
UML diagram.
The Java Modeling
Language (JML)
Design for specifying java
classes and interfaces.
Motivation
To be able to map UML object oriented designs with
OCL constraints to Java classes annotated with JML
specifications
WHY?
Map object oriented design models expressed in UML
and OCL to Java classes annotated with JML
specifications
Development of Java application using UML/OCL,
JML for later stages
Can use tools that support JML to reason about
specifications, testing and verification
JML same notation as Java
Basic Types
OCL
JML (Java)
Boolean
Boolean
Integer
int
Real
float/double
String
String
Boolean
Operators
μ(b1 and b2) = μ(b1)
&& μ(b2)
μ(b1 or b2) = μ(b1) ||
μ(b2)
and - &&
or - ||
implies - ==>
not - !
μ(b1 implies b2) =
μ(b1) ==> μ(b2)
μ(not b1) = !μ(b1)
Collection Operators
OCL
JML
Collection(T)
Object VS value collections
Set(T)
JMLObjectSet/JMLValueS
et
Bag(T)
Sequence(T)
JMLObjectBag/JMLValue
Bag
JMLObjectSequence/JML
ValueSequence
JMLValueSet VS
JMLObjectSet
JMLValueSet
(\forall JMLType e; μ(s).has(e);
e instanceof JMLLong)
Set(Person)
(\forall Object p; μ(s).has(p);
p instanceof Person)
JMLObjectSet
(\forall Object e; μ(s).has(e);
e instanceof T)
Common Operators
μ(c->size()) = μ(c).size()
μ(c->includes(e)) = μ(c).has(μ(e))
μ(c->excludes(e)) = !μ(c).has(μ(e)).
What about excludesAll()?
c1->excludesAll(c2)
μ(c1->excludesAll(c2)) =
(\forAll T e;μ(c2).has(e);!μ(c1).has(e))
Other operators
μ(s->union(s1)) = μ(s).union(μ(s1))
μ(s->intersection(s1)) = μ(s).intersection(μ(s1))
μ(s->union(b)) = μ(s).toBag().union(μ(b))
Iterator Expressions
μ(c->exists(e : T | p(e))) =
(\exists T e;μ(c).has(e);μ(p))
μ(c->select(e : T | p(e))) =
new JMLObjectSet{T e | μ(c).has(e) && μ(p)}
Operations not defined in
Java
Library for OCL type that facilitates mapping
Including classes for the collection types along with
their operations
s->op(..) To s.op(.. )
class OclIntegerOperations {
max()
i1.max(i2)
μ(i1.max(i2)) =
OclIntegerOperations.max(i1,i2)
static public int max(int i1, int i2){
if (i1 > i2) {return i1;}
else {return i2;}
}
static public int min(int i1, int i2){
if (i1 < i2) {return i1;}
else {return i2;}}
}
Collections
public class OclObjectSet extends JMLObjectSet{
public boolean includes(Object e) {this.has(e);}
//@ is the argument ‘==’ to one of the objects in the set
public int size() {this.size()};
//@ number of elements in the set
public boolean notEmpty() {!isEmpty(); }
//@ is the set not empty? }
context Title
Inv: availableCopies > 0 = copies->exists(isAvailable)
availableCopies >0 <==>
(\exists Copy c; copies.includes(c); c.isAvailable)
Exercise
Translate the following OCL constraint to JML
Solution ?
/*@ requires question->excludes(q) = !question.has(q);
@ ensures question == \old(question.union(q));
@*/
Thank You