This logical operator is represented by the keyword "xor" and evaluates to true if exactly one of its operands is true, and false otherwise. It is used to express an exclusive or relationship between two Boolean expressions. The expression "a xor b" is true if either a is true and b is false, or a is false and b is true. If both a and b are true or both are false, the expression is false. For example, "I will either go to the beach (a) or go hiking (b), but not both" can be expressed as "a xor b" in OCL.
1. Suppose we have a class called
Person with two attributes:
hasMotorcycleLicense. We want to define a constraint that prohibits persons from having both a driver's license and a motorcycle license at the same time. The OCL expression for this constraint would be:
self.hasDriverLicense xor self.hasMotorcycleLicense
This constraint specifies that the
hasMotorcycleLicense attributes of a person object cannot both be true at the same time. If a person has a driver's license, then they cannot have a motorcycle license, and vice versa. This ensures that the object satisfies the constraint.
2. Consider a class called
Product with the attribute
price. We want to define an operation that returns true if a product is either free or expensive, but not both. The OCL expression for this operation would be:
def: is_special = (self.price = 0) xor (self.price >= 100)
This expression uses the "Xor" operator to combine two conditions that check whether the
price attribute of a product object is equal to zero or greater than or equal to 100. If exactly one of the conditions is true, then the
is_special variable is set to true, indicating that the product is special. If both conditions are true or false, then the
is_special variable is set to false, indicating that the product is not special. This ensures that the object satisfies the constraint.