1. OCL 2.4 (... OCL 2.5)
Edward Willink
OMG OCL RTF chair,
OMG QVT RTF chair,
Eclipse OCL Project Lead,
Eclipse QVTd Project Lead,
OCL 2013 @ MODELS 2013
30 September 2013
Made available under EPL 1.0
2. Overview
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
OCL 2.4
New
Collection::selectByKind/selectByType
OclAny::oclAsSet
Significant clarification
not null
=
Minor details
OCL 2.5
3. Issue 18829 :
selectByKind/selectByType
Pre OCL 2.4
sources->select(oclIsKindOf(Z))->collect(oclAsType(Z))->asSet()
OCL 2.4
sources->selectByKind(Z)
selectByKind (analoguous to oclIsKindOf)
returns non-null elements of selected type/subtypes
selectByType (analoguous to oclIsTypeOf)
returns elements of selected type
result has unchanged Collection Kind
Set returns Set, Bag returns Bag etc
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
4. 15009: Implicit Set Conversion (1)
let anObject : OclAny = ... in anObject->forAll(...)
Pre OCL 2.4
implicit conversion of non-null anObject to
Bag{anObject} or Set{anObject}
implicit conversion of null to Bag{} or Set{}
ambiguous Collection Kind
requires run-time check
no mechansism to express conversion in XMI
... Set{anObject}->...
bypasses the run-time null test
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
5. 15009: Implicit Set Conversion (2)
let anObject : OclAny = ... in anObject->forAll(...)
OCL 2.4
implicit conversion is always to Set
implicit conversion is a navigation shorthand
... anObject.oclAsSet()->forAll(...)
OclAny::oclAsSet() returns Set{self}
OclVoid::oclAsSet() returns Set{}
OclInvalid::oclAsSet() returns invalid
run-time null check resolved by operation overload
XMI serialization can reference library operation
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
6. 14918: Equality
true = true
Pre OCL 2.4
comparison of objects
true not necessarily equal to true
OCL 2.4
datatypes compared by (deep) value
true necessarily equal to true
object equal to itself but not to any other object
Oops: Real::=(), Real::<>() overload omitted
1.0 not yet unambiguously = 1
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
7. 17531: Logical operations on null (1)
not not null
Pre OCL 2.2
logic of 'undefined' very ill-defined
OCL 2.3
invalid/null clarification made
not null = invalid
BAD: not not X not equal to X for all X
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
8. 17531: Logical operations on null (2)
not not null
OCL 2.4
not null = null
similarly null revised so that for all X
false and X = false
true and X = X
true or X = true
false or X = X
exists and forAll are explicitly iterated and/or
same null/invalid handling
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
9. Issue 15836 : Reverse CollectionRange
Sequence{4..2}
Pre OCL 2.4
unspecified; WFR loops indefinitely
OCL 2.4
CollectionRanges must count up
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
10. Issue 18437 : calling null
null.oclIsKindOf(OclVoid)
Pre OCL 2.4
all calls on null/invalid return invalid
except some calls on null return useful results
OCL 2.4
All oclXXX functions explicitly specified
for OclAny, OclVoid, OclInvalid
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
11. Issue 18464 : closure includes source
sources->closure(...)
Pre OCL 2.4
conflicting words excluding sources from results
OCL 2.4
results include sources in results
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
12. Issue 18504 : any on empty
Set{}->any(...)
Pre OCL 2.4
conflicting words suggest null return
OCL 2.4
no return gives invalid
allows null to be a valid return
Sequence{null}->any(true)
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
13. Issue 17220 : String::indexOf
''.indexOf('')
Pre OCL 2.4
empty string cannot be substring of itself
OCL 2.4
empty is substring of all strings at index 1
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
14. Issue 16260: ocl??InState
oclInState(...) oclIsInState(...)
Pre OCL 2.4
spelling unclear
OCL 2.4
It is oclIsInState(...)
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
15. Issue 6551 polymorphic iterations
select/reject etc are now polymorphic
let a : Collection(String) = ....
in a->select(...)
uses the appropriate derived Set::select...
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
16. OCL 2.4 Statistics
Many typos corrected
58 issues resolved
13 issues were duplicates
37 issues closed no change
Many many more remain
175 issues deferred
OCL 2.4 - local easy fixes
RTF - Revision Task Force
XMI files are unchanged so still not fit for purpose
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0
17. OCL 2.5
The hard fixes, UML 2.5 alignment
accurate, useful models (normative)
auto-generated specification text (non-normative)
Major 'rewrite' requires an RFP then an FTF
Request For Proposal - December 2013
draft on my laptop
Submission(s) by ?? December 2014
Revisions by ?? March 2015
Finalization Task Force ?? June 2015
Standard ?? December 2015
OCL 2.4 (... OCL 2.5) Made available under EPL 1.0