No edit summary |
|||
Line 13: | Line 13: | ||
|Title | |Title | ||
|Content | |Content | ||
|- | |- | ||
| | | | ||
|- | |- | ||
| | | | ||
|- | |- | ||
| | | | ||
|- | |- | ||
| | | | ||
|- | |- | ||
| | | | ||
|- | |- | ||
| | | | ||
|- | |- | ||
| | | | ||
|} | |} |
Revision as of 07:27, 21 April 2023
OCL operators are used to define constraints and operations on objects in an object-oriented programming language like Java, C++, or C#. They can be used in OCL expressions to specify constraints on objects or to 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:
- 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 inv: self.age >= 18
- 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 inv: self.gender = 'Male' or self.gender = 'Female'
- 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 inv: self.name.matches('^[A-Z]')
In addition to defining constraints, OCL operators can also be used to 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 inv: self.salary.sum() < 100000
OCL operators make it easy to write correct and maintainable object-oriented programs.
Examples of OCL Operators
Title | Content |
General Operators
Collection Operators
String Operators
Number Operators
Boolean Operators
General Operators
To find all available operators, you can open the OCL-Editor and type in a class:
Operators | Description |
---|---|
allInstances | All the objects of the class |
allinstancesAtTime | All the currently loaded instances |
allLoadedObjects | All objects currently in memory, excluding deleted objects |
allStates | Meta information about available states in state machines the class may contain |
allSubClasses | Meta information on all the sub-classes this class has |
allSuperTypes | Meta information on all the super-classes – in inheritance order the class has |
ASCII | |
associationEnds | Returns a collection of strings with association names for the class |
associationEndsWithType | Returns a collection of strings with association names and type information for the class |
asString | The string representation of the class – the asString operation is available on everything |
asTaJson | Returns a json string defined by the ViewModel |
atTime | Gives the read-only representation of a versioned object as it was at time X. |
Attributes | Meta information about what attributes the class has |
BigEndianUnicode | |
brokenConstraints | Returns a collection of the names of broken constraints for the class and object. |
canAccess | Check ViewModels Access expression for root |
Constraints | Meta information on what constraints the class has |
count | Returns how many times the object is in the collection self. |
Default | |
Empty | |
emptylist | Returns an empty list typed to hold objects of the class |
existing | The existing operator returns true if the object hasn't been deleted. |
externalId | Returns the external ID for the object operated on. |
format | |
IsDirty | Returns true if the objects have been changed since the last save. |
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). |
maxValue | Gets the maximum value in a collection of values |
minValue | Gets the minimum value in a collection of values |
nullValue | A typed null value |
objectFromExternalId | An external identity will be resolved to the object |
oclAsType | The type of the class |
oclGetStates | Gets a list of the objects all state machines currently state as strings. |
oclIsInvalid | Returns true if self is equal to *invalid*. |
oclIsKindOf | This is to if a class is a subclass or as the class itself and not unrelated |
oclIsTypeOf | Returns true if |
OnCreate | Is often called when a new object has been created. |
OnUpdate | Is called just before the object is saved to the database. |
oclIsUndefined | Returns true if self is equal to invalid or null. |
OclType | When used on an object, you get the type of the object. |
random | |
safeCast | |
sqlpassthrough | Calls a stored procedure |
sqlpassthroughobjects | Return a primary key of SomeClass. This can be combined with other Ocl-PS via ->intersection or union. |
superTypes | Returns the set of all direct supertypes of the type. |
TaggedValue | Meta information on tagged values set in the class |
TaggedValueOnFeature | Meta information on Tagged values set on a named feature in the class |
Typename | The type name as a string |
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.
Again, you can use the OCL-Editor to see what they are:
Operators | Description |
---|---|
->append | Add another object last |
->asBag | Returns a Bag containing all elements of self. |
->asSequence | Returns a Sequence containing all elements of self. Element ordering is preserved when possible. |
->asSet | Returns a Set containing all elements of self. |
->at | Get the objects at X where the first index is 1 |
->at0 | Get the objects at X where the first index is 0 |
->collect | Returns a collection containing the result of applying expr on all elements contained in self. |
->count | Count how many meet a certain criteria |
->dictionary | Efficiently looks up values |
->difference | The difference between 2 collections |
->excluding | The collection except for this single object |
->exists | Returns true if at least one element in self validates the condition expr, false otherwise. |
->filterOnType | Only keep the ones of a certain type |
->first | Return the first object |
->forAll | Returns true if all the elements contained in self validate the condition expr, false otherwise. |
->groupBy | Build a collection of tuples grouped by some aspect |
->includes | Does the collection include the object |
->includesAll | Does the collection include the whole other collection |
->including | Returns the list with the element in the parameter included. |
->IndexOf | The 1 based index of an object in the collection possibly -1 if not existing |
->indexOf0 | The 0 based index of an object in the collection possibly -1 if not existing |
->intersection | The intersection of two collections |
->isEmpty | Returns true if the collection is empty |
->notEmpty | Returns true if self contains at least one element, false otherwise. |
->reject | Returns a collection with all elements of self except for those who validate the OclExpression expr. |
->select | Returns a collection with all elements of self that validate the OclExpression expr. |
->size | Returns the number of elements contained in self. |
->sum | Returns the sum of all elements contained in self if they support the '+' operation. |
->last | Returns the last object in the collection |
->orderBy | Sorts the collection on one or more properties |
->orderDescending | Sort the from biggest to smallest |
->orderGeneric | Sorts the list of properties with interchangeable sort order: (expr1, OclSortDirection::ascending, expr2, OclSortDirection::descending...) |
->prepend | Returns an OrderedSet containing object followed by all elements of self. |
->subsequence | Returns a smaller collection from a start to stop |
->symmetricDifference | The symmetric difference between the collections; ie all the objects in collection1 or collection2 but not in both |
->union | The set of objects in collection1 and objects in collection2 |
String Operators
Operators | Description |
---|---|
Escape codes | Escape (special) characters used in OCL |
StringToAnsiBase64 | Convert a string to an ANSI (1252) and as a base64 string |
StringToEncodedBase64 | Convert a string to a specific encoding and as a base64 string. For example Western European (ISO) Codepage 28591 |
size () : Integer | Returns the number of characters composing self. |
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. |
toLower () : String | Returns self with all characters converted to lowercase. |
toReal () : Real | Returns a Real of value equal to self, or |invalid| if self does not represent a real. |
toUpper () : String | Returns self with all characters converted to uppercase. |
Number 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.
Operators | Description |
---|---|
Number::abs () : Number | Returns the absolute value of self, self if it is already a positive number. |
Number::floor () : Integer | Returns the integer part of self if it is a Real, self if it is an Integer. |
Number::max ( r : Number ) : Number | Returns the greatest number between self and *r*. |
Number::min ( r : Number ) : Number | Returns the lowest number between self and *r*. |
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 % |
Integer::div ( i : Integer ) : Integer | Returns the integer quotient of the division of self by *i*. |
Integer::mod ( i : Integer ) : Integer | Returns the integer remainder of the division of self by *i*. |
Boolean Operators
Operators | Description | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
And |
| ||||||||||||||||
Implies |
| ||||||||||||||||
Or |
| ||||||||||||||||
Not |
| ||||||||||||||||
Xor |
|
ViewModel Operators (on selfVM variable)
See page: SelfVM