Перейти к основному содержимому
Версия: 6.x

Инструкция ACTION+

Инструкция ACTION+ - добавление реализации (условия ветвления) к абстрактному действию.

Синтаксис

[ACTION] actionId(param1, ..., paramN) + { implAction }
[ACTION] actionId(param1, ..., paramN) + WHEN whenExpr THEN { implAction }

Описание

Инструкция ACTION+ добавляет реализацию к абстрактному действию. Синтаксис добавления реализации зависит от типа абстрактного действия. Если абстрактное действие имеет тип CASE, то реализация должна описываться в виде WHEN ... THEN ..., в ином случае реализация должна быть описана просто в виде действия.

Параметры

  • actionId

    Идентификатор абстрактного действия.

  • param1, ..., paramN

    Список параметров, которые будут использованы при описании реализации. Каждый элемент является типизированным параметром. Количество этих параметров должно совпадать с количеством параметров абстрактного действия. Эти параметры далее могут быть использованы в операторе реализации абстрактного свойства и выражении условия выбора этой реализации.

  • implAction

    Контекстно-зависимый оператор-действие, значение которого определяет реализацию абстрактного действия.

  • whenExpr

    Выражение, значение которого определяет условие выбора реализации для абстрактного действия типа CASE.

Примеры

CLASS ABSTRACT Animal;
whoAmI ABSTRACT ( Animal);

CLASS Dog : Animal;
whoAmI (Dog d) + { MESSAGE 'I am a dog!'; }

CLASS Cat : Animal;
whoAmI (Cat c) + { MESSAGE 'I am a сat!'; }

ask () {
FOR Animal a IS Animal DO
whoAmI(a); // для каждого объекта будет выдано соответствующее сообщение
}

onStarted ABSTRACT LIST ( );
onStarted () + {
name(Sku s) <- '1';
}
onStarted () + {
name(Sku s) <- '2';
}
// сначала выполниться 1е действие, потом 2е действие

CLASS Human;
name = DATA STRING[100] (Human);

testName ABSTRACT CASE ( Human);

testName (Human h) + WHEN name(h) == 'John' THEN { MESSAGE 'I am John'; }
testName (Human h) + WHEN name(h) == 'Bob' THEN { MESSAGE 'I am Bob'; }