1 / 20

From OCL to JML

From OCL to JML. On the Relationship between The Object Constraint Language (OCL) and The Java Modeling Language(JML) Translating the Object Constraint Language into the Java Modeling Language Ali Hamie School of Computing, Mathematical and Information Sciences University of Brighton

lewis
Télécharger la présentation

From OCL to JML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. From OCL to JML On the Relationship between The Object Constraint Language (OCL) and The Java Modeling Language(JML) Translating the Object Constraint Language into the Java Modeling Language Ali Hamie School of Computing, Mathematical and Information Sciences University of Brighton Ba.a.hamie@brighton.ac.uk By Karen Richart

  2. The Object Constraint Language (OCL) • Formal specification language that could be used for constraining the model elements that occur in a UML diagram.

  3. The Object Constraint Language (OCL) The Java Modeling Language (JML) Design for specifying java classes and interfaces. • Formal specification language that could be used for constraining the model elements that occur in a UML diagram.

  4. Motivation To be able to map UML object oriented designs with OCL constraints to Java classes annotated with JML specifications

  5. 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

  6. Basic Types OCL JML (Java) Boolean int float/double String • Boolean • Integer • Real • String

  7. μ(b1 and b2) = μ(b1) && μ(b2) • μ(b1 or b2) = μ(b1) || μ(b2) • μ(b1 implies b2) = μ(b1) ==> μ(b2) • μ(not b1) = !μ(b1) Boolean Operators and - && or - || implies - ==> not - !

  8. Collection Operators OCL JML Object VS value collections JMLObjectSet/JMLValueSet JMLObjectBag/JMLValueBag JMLObjectSequence/JMLValueSequence • Collection(T) • Set(T) • Bag(T) • Sequence(T)

  9. JMLValueSet • (\forallJMLType e; μ(s).has(e); e instanceofJMLLong) JMLObjectSet • (\forall Object e; μ(s).has(e); e instanceof T) JMLValueSet VS JMLObjectSet Set(Person) (\forall Object p; μ(s).has(p); p instanceof Person)

  10. Common Operators μ(c->size()) = μ(c).size() μ(c->includes(e)) = μ(c).has(μ(e)) μ(c->excludes(e)) = !μ(c).has(μ(e)).

  11. What about excludesAll()? c1->excludesAll(c2) μ(c1->excludesAll(c2)) = (\forAll T e;μ(c2).has(e);!μ(c1).has(e))

  12. Other operators μ(s->union(s1)) = μ(s).union(μ(s1)) μ(s->intersection(s1)) = μ(s).intersection(μ(s1)) μ(s->union(b)) = μ(s).toBag().union(μ(b))

  13. 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)}

  14. 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(.. )

  15. class OclIntegerOperations { 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;}} } max() i1.max(i2) μ(i1.max(i2)) = OclIntegerOperations.max(i1,i2)

  16. 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 booleannotEmpty() {!isEmpty(); } //@ is the set not empty? }

  17. context TitleInv: availableCopies > 0 = copies->exists(isAvailable) availableCopies >0 <==> (\exists Copy c; copies.includes(c); c.isAvailable)

  18. Exercise Translate the following OCL constraint to JML

  19. Solution ? /*@ requires question->excludes(q) = !question.has(q); @ ensures question == \old(question.union(q)); @*/

  20. Thank You

More Related