OCLOperators
No edit summary
m ((username removed) (log details removed))
 
(23 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|'''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 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 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 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.
|-
|[https://wiki.mdriven.net/index.php/OCLOperators_toInteger_()_:_Integer '''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"
!Operators
!Description
|-
|[[OCLOperators And|'''And''']]
|
{| class="wikitable"
!And
!True
!False
!Invalid
|-
!True
|true
|false
|true
|-
!False
|false
|false
|false
|-
!Invalid
|invalid
|false
|invalid
|}
|-
|[[OCLOperators Implies|'''Implies''']]
|
{| class="wikitable"
{| class="wikitable"
!Implies
|'''Type'''
!True
|'''Description'''
!False
!Invalid
|-
|-
!True
|[https://wiki.mdriven.net/index.php/Category:OCL_General_Operators General Operators]
|true
|used to manipulate and query objects
|false
|invalid
|-
|-
!False
|[https://wiki.mdriven.net/index.php/Category:OCL_Collection_Operators Collection Operators]
|true
|operators applicable to a collection of objects
|true
|true
|-
|-
!Invalid
| [https://wiki.mdriven.net/index.php/Category:OCL_String_Operators String Operators]
|true
|used to manipulate and compare string values
|invalid
|invalid
|}
|-
|-
|[[OCLOperators Or|'''Or''']]
|[https://wiki.mdriven.net/index.php/Category:OCL_Number_Operators Number Operators]
|
|used to perform arithmetic and comparison operations on numeric values
{| class="wikitable"
!Or
!True
!False
!Invalid
|-
|-
!True
|[https://wiki.mdriven.net/index.php/Category:OCL_Boolean_Operators Boolean Operators]
|true
|used to evaluate and compare Boolean expressions
|true
|true
|-
|-
!False
|[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.
|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]]

Latest revision as of 05:27, 11 January 2024

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.

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:

  1. 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: context Person: self.age >= 18
  2. 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: context Person: self.gender = 'Male' or self.gender = 'Female'
  3. 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: context Person: self.name.matches('^[A-Z]')

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: context Person: self.salary.sum() < 100000

OCL operators make it easy to write correct and maintainable object-oriented programs.

Examples of OCL Operators

Type Description
General Operators used to manipulate and query objects
Collection Operators operators applicable to a collection of objects
String Operators used to manipulate and compare string values
Number Operators used to perform arithmetic and comparison operations on numeric values
Boolean Operators used to evaluate and compare Boolean expressions
ViewModel Operators(on selfVM variable) used to manipulate and interact with data in a ViewModel class of an application.
This page was edited 119 days ago on 01/11/2024. What links here