|
|
(30 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| == General Operators ==
| | OCL operators define constraints and operations on objects in an object-oriented programming language like Java, C++, or C#. They are also used in OCL expressions to specify constraints on objects or perform operations on object properties. |
| To find all available operators, you can open the OCL-Editor and type in a class:
| |
|
| |
|
| [[File:Ocl-editor 1.png|frameless|433x433px|link=https://wiki.mdriven.net/index.php/File:Ocl-editor_1.png]]
| | For example, let's say we have a class called "Person" with properties like: "name," "age," and "gender." We can use OCL operators to define constraints on the properties of the "Person" class. Here are some examples: |
| {| class="wikitable"
| | # To define a constraint that ensures that the "age" property of a "Person" object is greater than or equal to 18, we can use the greater than or equal to (>=) operator as follows: <code>context Person: self.age >= 18</code> |
| !Operators
| | # To define a constraint that ensures that the "gender" property of a "Person" object is either "Male" or "Female," we can use the OR (||) operator as follows: <code>context Person: self.gender = 'Male' or self.gender = 'Female'</code> |
| !Description
| | # To define a constraint that ensures that the "name" property of a "Person" object starts with an uppercase letter, we can use the dot notation (.) and the regular expression operator (matches) as follows: <code>context Person: self.name.matches('^[A-Z]')</code> |
| |-
| | In addition to defining constraints, OCL operators can also perform operations on object properties. For example, we can use the sum() operator to calculate the sum of all the elements in a collection property of a "Person" object as follows: <code>context Person: self.salary.sum() < 100000</code> |
| |'''[[Allinstances operator|allInstances]]'''
| |
| |All the objects of the class
| |
| |-
| |
| |'''[[OCLOperators allInstancesAtTime|allinstancesAtTime]]'''
| |
| |All the currently loaded instances
| |
| |-
| |
| |[[OCLOperators allLoadedObjects|allLoadedObjects]]
| |
| |All objects currently in memory, excluding deleted objects
| |
| |-
| |
| |'''[[OCLOperators allStates|allStates]]'''
| |
| |Meta information about available states in state machines the class may contain
| |
| |-
| |
| |'''[[OCLOperators allSubClasses|allSubClasses]]'''
| |
| |Meta information on all the sub-classes this class has
| |
| |-
| |
| |'''[[OCLOperators allSuperTypes|allSuperTypes]]'''
| |
| |Meta information on all the super-classes – in inheritance order the class has
| |
| |-
| |
| |[[OCLOperators ASCII|ASCII]]
| |
| |
| |
| |-
| |
| |'''[[OCLOperators associationEnds|associationEnds]]'''
| |
| |Returns a collection of strings with association names for the class
| |
| |-
| |
| |[[OCLOperators associationEndsWithType|associationEndsWithType]]
| |
| |Returns a collection of strings with association names and type information for the class
| |
| |-
| |
| |'''[[OCLOperators asString|asString]]'''
| |
| |The string representation of the class – the asString operation is available on everything
| |
| |-
| |
| |[[OCLOperators AsTaJson|asTaJson]]
| |
| |Returns a json string defined by the ViewModel
| |
| |-
| |
| |[[OCLOperators atTime|atTime]]
| |
| |Gives the read-only representation of a versioned object as it was at time X.
| |
| |-
| |
| |'''[[OCLOperators attributes|Attributes]]'''
| |
| |Meta information about what attributes the class has
| |
| |-
| |
| |[[OCLOperators BigEndianUnicode|BigEndianUnicode]]
| |
| |
| |
| |-
| |
| |[[OCLOperators brokenConstraints|brokenConstraints]]
| |
| |Returns a collection of the names of broken constraints for the class and object.
| |
| |-
| |
| |[[OCLOperators canAccess|canAccess]]
| |
| |Check ViewModels Access expression for root
| |
| |-
| |
| |'''[[OCLOperators constraints|Constraints]]'''
| |
| |Meta information on what constraints the class has
| |
| |-
| |
| |[[OCLOperators count|count]]
| |
| |Returns how many times the ''object'' is in the collection ''self''.
| |
| |-
| |
| |[[OCLOperators Default|Default]]
| |
| |
| |
| |-
| |
| |[[OCLOperators Empty|Empty]]
| |
| |
| |
| |-
| |
| |'''[[OCLOperators emptyList|emptylist]]'''
| |
| |Returns an empty list typed to hold objects of the class
| |
| |-
| |
| |[[OCLOperators existing|existing]]
| |
| |The existing operator returns true if the object hasn't been deleted.
| |
| |-
| |
| |[[OCLOperators externalId|externalId]]
| |
| |Returns the external ID for the object operated on.
| |
| |-
| |
| |[[OCLOperators format|format]]
| |
| |
| |
| |-
| |
| |[[OCLOperators IsDirty|IsDirty]]
| |
| |Returns true if the objects have been changed since the last save.
| |
| |-
| |
| |[[OCLOperators IsNew|IsNew]]
| |
| |IsNew operator returns true if the object has never been saved to the database.
| |
| |-
| |
| |'''isDirtyMember'''
| |
| |Called on a class attribute to check if this attribute has changes pending to be saved.
| |
| |-
| |
| |'''isNull'''
| |
| |Returns true if the value is null (not assigned any value).
| |
| |-
| |
| |[[OCLOperators maxValue|maxValue]]
| |
| |Gets the maximum value in a collection of values
| |
| |-
| |
| |[[OCLOperators minValue|minValue]]
| |
| |Gets the minimum value in a collection of values
| |
| |-
| |
| |'''[[OCLOperators nullValue|nullValue]]'''
| |
| |A typed null value
| |
| |-
| |
| |'''[[OCLOperators objectfromExternalId|objectFromExternalId]]'''
| |
| |An external identity will be resolved to the object
| |
| |-
| |
| |'''[[OCLOperators oclAsType|oclAsType]]'''
| |
| |The type of the class
| |
| |-
| |
| |[[OCLOperators oclGetStates|oclGetStates]]
| |
| |Gets a list of the objects all state machines currently state as strings.
| |
| |-
| |
| |'''[[oclIsInvalid]]'''
| |
| |Returns true if ''self'' is equal to *invalid*.
| |
| |-
| |
| |'''[[OCLOperators oclIsKindOf|oclIsKindOf]]'''
| |
| |This is to if a class is a subclass or as the class itself and not unrelated
| |
| |-
| |
| |'''[[OCLOperators oclIsTypeOf|oclIsTypeOf]]'''
| |
| |Returns true if
| |
| |-
| |
| |[[OCLOperators OnCreate|OnCreate]]
| |
| |Is often called when a new object has been created.
| |
| |-
| |
| |[[OCLOperators OnUpdate|OnUpdate]]
| |
| |Is called just before the object is saved to the database.
| |
| |-
| |
| |[[oclIsUndefined]]
| |
| |Returns true if ''self'' is equal to invalid or null.
| |
| |-
| |
| |'''[[OCLOperators OclType|OclType]]'''
| |
| |When used on an object, you get the type of the object.
| |
| |-
| |
| |[[OCLOperators random|random]]
| |
| |
| |
| |-
| |
| |'''[[OCLOperators safeCast|safeCast]]'''
| |
| |
| |
| |-
| |
| |[[OCLOperators Sqlpassthrough|sqlpassthrough]]
| |
| |Calls a stored procedure
| |
| |-
| |
| |[[OCLOperators sqlpassthroughobjects|sqlpassthroughobjects]]
| |
| |Return a primary key of SomeClass. This can be combined with other Ocl-PS via ->intersection or union.
| |
| |-
| |
| |'''[[OCLOperators superTypes|superTypes]]'''
| |
| |Returns the set of all direct supertypes of the type.
| |
| |-
| |
| |'''[[OCLOperators taggedValue|TaggedValue]]'''
| |
| |Meta information on tagged values set in the class
| |
| |-
| |
| |'''[[OCLOperators taggedValueOnFeature|TaggedValueOnFeature]]'''
| |
| |Meta information on Tagged values set on a named feature in the class
| |
| |-
| |
| |'''[[OCLOperators typename|Typename]]'''
| |
| |The type name as a string
| |
| |-
| |
| |'''[[OCLOperators ViewModels|ViewModels]]'''
| |
| |A tuple with the ViewModels for this class a members
| |
| |}
| |
| | |
| == Collection Operators ==
| |
| Once you have a collection of objects, there are certain operators applicable to them.
| |
| | |
| See this page for [[examples on collection operators|examples on collection operators.]]
| |
| | |
| Again, you can use the OCL-Editor to see what they are:
| |
| | |
| [[File:Collection of objects operators.png|frameless|453x453px|link=https://wiki.mdriven.net/index.php/File:Collection_of_objects_operators.png]]
| |
| {| class="wikitable"
| |
| !Operators
| |
| !Description
| |
| |-
| |
| |'''[[OCLOperators append|->append]]'''
| |
| |Add another object last
| |
| |-
| |
| |'''[[OCLOperators asBag|->asBag]]'''
| |
| |Returns a Bag containing all elements of ''self''.
| |
| |-
| |
| |'''[[OCLOperators asSequence|->asSequence]]'''
| |
| |Returns a Sequence containing all elements of ''self''. Element ordering is preserved when possible.
| |
| |-
| |
| |'''[[OCLOperators asSet|->asSet]]'''
| |
| |Returns a Set containing all elements of ''self''.
| |
| |-
| |
| |'''[[OCLOperators at|->at]]'''
| |
| |Get the objects at X where the first index is 1
| |
| |-
| |
| |'''[[OCLOperators at0|->at0]]'''
| |
| |Get the objects at X where the first index is 0
| |
| |- | |
| |'''[[OCLOperators collect|->collect]]''' | |
| |Returns a collection containing the result of applying ''expr'' on all elements contained in ''self''.
| |
| |-
| |
| |'''[[OCLOperators count|->count]]'''
| |
| |Count how many meet a certain criteria
| |
| |-
| |
| |[[OCLOperators dictionary|'''->dictionary''']]
| |
| |Efficiently looks up values
| |
| |-
| |
| |'''[[OCLOperators difference|->difference]]'''
| |
| |The difference between 2 collections
| |
| |-
| |
| |'''[[OCLOperators excluding|->excluding]]'''
| |
| |The collection except for this single object
| |
| |-
| |
| |'''[[OCLOperators exists|->exists]]'''
| |
| |Returns true if at least one element in ''self'' validates the condition ''expr'', false otherwise.
| |
| |-
| |
| |'''[[OCLOperators filterOnType|->filterOnType]]'''
| |
| |Only keep the ones of a certain type
| |
| |-
| |
| |'''[[OCLOperators first|->first]]'''
| |
| |Return the first object
| |
| |-
| |
| |'''[[OCLOperators forAll|->forAll]]'''
| |
| |Returns true if all the elements contained in ''self'' validate the condition ''expr'', false otherwise.
| |
| |-
| |
| |'''[[OCLOperators groupBy|->groupBy]]'''
| |
| |Build a collection of tuples grouped by some aspect
| |
| |-
| |
| |'''[[OCLOperators includes|->includes]]'''
| |
| |Does the collection include the object
| |
| |-
| |
| |'''[[OCLOperators includesAll|->includesAll]]'''
| |
| |Does the collection include the whole other collection
| |
| |-
| |
| |'''[[OCLOperators including|->including]]'''
| |
| |Returns the list with the element in the parameter included.
| |
| |-
| |
| |'''[[OCLOperators indexOf|->IndexOf]]'''
| |
| |The 1 based index of an object in the collection possibly -1 if not existing
| |
| |-
| |
| |'''[[OCLOperators indexOf0|->indexOf0]]'''
| |
| |The 0 based index of an object in the collection possibly -1 if not existing
| |
| |-
| |
| |'''[[OCLOperators intersection|->intersection]]'''
| |
| |The intersection of two collections
| |
| |-
| |
| |'''[[OCLOperators isEmpty|->isEmpty]]'''
| |
| |Returns true if the collection is empty
| |
| |-
| |
| |'''[[OCLOperators notEmpty|->]]'''[[OCLOperators notEmpty|notEmpty]]
| |
| |Returns true if ''self'' contains at least one element, false otherwise.
| |
| |-
| |
| |'''[[OCLOperators reject|->]]'''[[OCLOperators reject|reject]]
| |
| |Returns a collection with all elements of ''self'' except for those who validate the OclExpression ''expr''.
| |
| |-
| |
| |'''[[OCLOperators select|->]]'''[[OCLOperators select|select]]
| |
| |Returns a collection with all elements of ''self'' that validate the OclExpression ''expr''.
| |
| |-
| |
| |'''[[OCLOperators size|->]]'''[[OCLOperators size|size]]
| |
| |Returns the number of elements contained in ''self''.
| |
| |-
| |
| |'''[[OCLOperators sum|->]]'''[[OCLOperators sum|sum]]
| |
| |Returns the sum of all elements contained in ''self'' if they support the '+' operation.
| |
| |-
| |
| |'''[[OCLOperators last|->last]]'''
| |
| |Returns the last object in the collection
| |
| |-
| |
| |'''[[OCLOperators notEmpty|->notEmpty]]'''
| |
| |Returns true if the collection is not empty
| |
| |-
| |
| |'''[[OCLOperators orderBy|->orderBy]]'''
| |
| |Sorts the collection on one or more properties
| |
| |-
| |
| |'''[[OCLOperators orderDescending|->orderDescending]]'''
| |
| |Sort the from biggest to smallest
| |
| |-
| |
| |'''[[OCLOperators orderGeneric|->orderGeneric]]'''
| |
| |Sorts the list of properties with interchangeable sort order: (expr1, OclSortDirection::ascending, expr2, OclSortDirection::descending...)
| |
| |-
| |
| |'''[[OCLOperators prepend|->prepend]]'''
| |
| |Returns an OrderedSet containing ''object'' followed by all elements of ''self''.
| |
| |-
| |
| |'''[[OCLOperators reject|->reject]]'''
| |
| |Returns the objects not matching the criteria
| |
| |-
| |
| |'''[[OCLOperators select|->select]]'''
| |
| |Returns the objects matching the criteria
| |
| |-
| |
| |'''[[OCLOperators size|->size]]'''
| |
| |Returns the number of elements in the collection
| |
| |-
| |
| |'''[[OCLOperators subSequence|->subsequence]]'''
| |
| |Returns a smaller collection from a start to stop
| |
| |-
| |
| |'''[[OCLOperators symmetricDifference|->symmetricDifference]]'''
| |
| |The symmetric difference between the collections; ie all the objects in collection1 or collection2 but not in both
| |
| |-
| |
| |'''[[OCLOperators union|->union]]'''
| |
| |The set of objects in collection1 and objects in collection2
| |
| |}
| |
|
| |
|
| == String Operators ==
| | OCL operators make it easy to write correct and maintainable object-oriented programs. |
| {| class="wikitable"
| |
| !Operators
| |
| !Description
| |
| |-
| |
| |[[Escape codes]]
| |
| |Escape (special) characters used in OCL
| |
| |-
| |
| |[[OCLOperators StringToAnsiBase64|StringToAnsiBase64]]
| |
| |Convert a string to an ANSI (1252) and as a base64 string
| |
| |-
| |
| |[[OCLOperators StringToEncodedBase64|StringToEncodedBase64]]
| |
| |Convert a string to a specific encoding and as a base64 string. For example Western European (ISO) Codepage 28591
| |
| |-
| |
| |[[OCLOperators Size () : Integer|size () : Integer]]
| |
| |Returns the number of characters composing ''self''.
| |
| |-
| |
| |[[OCLOperators subString|subString]]
| |
| |Returns the substring of the string operated on. The substring starts at parameter 1 and ends at parameter 2. The counting is 1-based.
| |
| |-
| |
| |toInteger () : Integer
| |
| |Returns ''self'' with all characters converted to lowercase.
| |
| |-
| |
| |[[OCLOperators ToLower () : String|toLower () : String]]
| |
| |Returns ''self'' with all characters converted to lowercase.
| |
| |-
| |
| |[[OCLOperators ToReal () : Real|toReal () : Real]]
| |
| |Returns a Real of value equal to ''self''<nowiki>, or |invalid| if </nowiki>''self'' does not represent a real.
| |
| |-
| |
| |[[OCLOperators ToUpper () : String|toUpper () : String]]
| |
| |Returns self with all characters converted to uppercase.
| |
| |}
| |
|
| |
|
| == Number Operators == | | == Examples of OCL Operators == |
| In addition to the basic math functions (+, -, /, \*) are a number of advanced functions. Take note that *Number* denotes both *Integer* and *Real*, and they're substitutive unless otherwise specified.
| |
| {| class="wikitable"
| |
| !Operators
| |
| !Description
| |
| |-
| |
| |[[OCLOperators Number::abs () : Number|Number::abs () : Number]]
| |
| |Returns the absolute value of ''self'', ''self'' if it is already a positive number.
| |
| |-
| |
| |[[OCLOperators Number::floor () : Integer|Number::floor () : Integer]]
| |
| |Returns the integer part of self if it is a Real, self if it is an Integer.
| |
| |-
| |
| |[[OCLOperators Number::max ( r : Number ) : Number|Number::max ( r : Number ) : Number]]
| |
| |Returns the greatest number between self and *r*.
| |
| |-
| |
| |[[OCLOperators Number::min ( r : Number ) : Number|Number::min ( r : Number ) : Number]]
| |
| |Returns the lowest number between ''self'' and *r*.
| |
| |-
| |
| |[[OCLOperators Number::round () : Integer|Number::round () : Integer]]
| |
| |Returns the nearest integer to ''self'' if it is a Real, ''self'' if it is an Integer.
| |
| |-
| |
| |Number::ieeereminder(r:Number):Integer
| |
| |Reminder of division with r, ie modulus or mod or %
| |
| |-
| |
| |[[OCLOperators Integer::div ( i : Integer ) : Integer|Integer::div ( i : Integer ) : Integer]]
| |
| |Returns the integer quotient of the division of ''self'' by *i*.
| |
| |-
| |
| |[[OCLOperators Integer::mod ( i : Integer ) : Integer|Integer::mod ( i : Integer ) : Integer]]
| |
| |Returns the integer remainder of the division of ''self'' by *i*.
| |
| |}
| |
| == Boolean Operators ==
| |
| {| class="wikitable" | | {| class="wikitable" |
| !Operators
| | |'''Type''' |
| !Description
| | |'''Description''' |
| |- | | |- |
| |[[OCLOperators And|And]] | | |[https://wiki.mdriven.net/index.php/Category:OCL_General_Operators General Operators] |
| | | | |used to manipulate and query objects |
| {| class="wikitable"
| |
| !And
| |
| !True
| |
| !False
| |
| !Invalid
| |
| |- | | |- |
| !True
| | |[https://wiki.mdriven.net/index.php/Category:OCL_Collection_Operators Collection Operators] |
| |true
| | |operators applicable to a collection of objects |
| |false | |
| |true | |
| |- | | |- |
| !False
| | | [https://wiki.mdriven.net/index.php/Category:OCL_String_Operators String Operators] |
| |false
| | |used to manipulate and compare string values |
| |false | |
| |false | |
| |- | | |- |
| !Invalid
| | |[https://wiki.mdriven.net/index.php/Category:OCL_Number_Operators Number Operators] |
| |invalid
| | |used to perform arithmetic and comparison operations on numeric values |
| |false
| |
| |invalid | |
| |} | |
| |- | | |- |
| |[[OCLOperators Implies|Implies]] | | |[https://wiki.mdriven.net/index.php/Category:OCL_Boolean_Operators Boolean Operators] |
| | | | |used to evaluate and compare Boolean expressions |
| {| class="wikitable"
| |
| !Implies
| |
| !True
| |
| !False
| |
| !Invalid
| |
| |-
| |
| !True
| |
| |true
| |
| |false
| |
| |invalid
| |
| |-
| |
| !False
| |
| |true
| |
| |true
| |
| |true
| |
| |- | | |- |
| !Invalid
| | |[https://wiki.mdriven.net/index.php/Category:OCL_ViewModel_Operators ViewModel Operators](on selfVM variable) |
| |true
| | |used to manipulate and interact with data in a ViewModel class of an application. |
| |invalid
| |
| |invalid | |
| |} | |
| |- | | |- |
| |[[OCLOperators Or|Or]]
| |
| |
| |
| {| class="wikitable"
| |
| !Or
| |
| !True
| |
| !False
| |
| !Invalid
| |
| |-
| |
| !True
| |
| |true
| |
| |true
| |
| |true
| |
| |-
| |
| !False
| |
| |true
| |
| |false
| |
| |invalid
| |
| |-
| |
| !Invalid
| |
| |true
| |
| |invalid
| |
| |invalid
| |
| |}
| |
| |-
| |
| |[[OCLOperators Not|Not]]
| |
| |
| |
| {| class="wikitable"
| |
| !Not
| |
| !Result
| |
| |-
| |
| !True
| |
| |false
| |
| |-
| |
| !False
| |
| |true
| |
| |-
| |
| !Invalid
| |
| |invalid
| |
| |}
| |
| |-
| |
| |[[OCLOperators Xor|Xor]]
| |
| |
| |
| {| class="wikitable"
| |
| !Xor
| |
| !True
| |
| !False
| |
| !Invalid
| |
| |-
| |
| !True
| |
| |false
| |
| |true
| |
| |invalid
| |
| |-
| |
| !False
| |
| |true
| |
| |false
| |
| |invalid
| |
| |-
| |
| !Invalid
| |
| |invalid
| |
| |invalid
| |
| |invalid
| |
| |}
| |
| |} | | |} |
| == ViewModel Operators (on selfVM variable) ==
| |
| See page: [[SelfVM]]
| |
|
| |
|
| [[Category:OCL]] | | [[Category:OCL]] |
| [[Category:Beginner]] | | [[Category:Beginner]] |
| [[Category:OCLOperators]] | | [[Category:OCLOperators]] |
| [[Category:OCL Collection Operators]]
| |