Подсчет вхождений логической операции

Я должен сделать правило OCL, говорящее, что два параметра не могут быть равными. Я не могу использовать not(), поэтому мне нужно показать, что что-то вроде param1 = param2 пусто.

Я пытался использовать isEmpty() и size(), но так как это boolean, эти операторы не работают.

self.ab1.ab2
->forAll(x | x.b1.b2
->forAll(port | (self.param1 = port.param2)->isEmpty())

 )

Я думаю, мне нужно использовать какой-то оператор count(), который должен быть равен 0, чтобы показать, что param1 и param2 разные, но я не знаю, как его использовать.

спасибо за помощь


person FlyingRandomGuy    schedule 23.07.2019    source источник


Ответы (1)


Для вашего прямого вопроса использование <> и, следовательно, self.param1 <> port.param2 будет уместным. Однако запуск двойного вложения forAll в каком-то контексте кажется бесполезным. Если вы не можете переместить «ограничение» в лучший контекст, возможно, вы можете, по крайней мере, сделать его более ясным: self.ab1.ab2.b1.b2.param2->asSet()->excludes(self.param2)

person Ed Willink    schedule 23.07.2019