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

Оператор ABSTRACT

Оператор ABSTRACT создает абстрактное свойство.

Синтаксис

ABSTRACT [type [exclusionType] [order]] [FULL] returnClassName [(argClassName1, ..., argClassNameN)]

Описание

Оператор ABSTRACT создает абстрактное свойство. Его реализации позже добавляются инструкциями +=. В зависимости от выбранного типа платформа формирует из них поведение оператора выбора.

Оператор ABSTRACT нельзя использовать внутри выражений.

Параметры

  • type

    Опция. Возможные значения:

    • CASE - явная условная форма абстрактного свойства. Условие выбора каждой реализации задается в соответствующей инструкции += с помощью блока WHEN.
    • MULTI - полиморфная форма абстрактного свойства. Условием выбора реализации является совместимость текущих аргументов с ее сигнатурой.
    • VALUE - полиморфная форма выбора по значению. Реализация считается подходящей, если она возвращает определенное значение, то есть значение, отличное от NULL.

    Если опция не указана, по умолчанию используется MULTI.

  • exclusionType

    Опция. Задает тип взаимоисключения. Возможные значения:

    • EXCLUSIVE - взаимоисключающий режим для форм CASE, MULTI и VALUE. В этом режиме для каждого набора аргументов должна существовать не более чем одна подходящая реализация.
    • OVERRIDE - режим для форм CASE, MULTI и VALUE, в котором одновременно могут подходить несколько реализаций.

    Используется только вместе с CASE, MULTI или VALUE. Для MULTI по умолчанию используется EXCLUSIVE, для CASE и VALUE - OVERRIDE.

  • order

    Опция для OVERRIDE. Возможные значения:

    • FIRST - новые реализации добавляются в начало списка, поэтому будет выбрана реализация, добавленная последней. Если после OVERRIDE это значение не указано, оно используется по умолчанию.
    • LAST - новые реализации добавляются в конец списка, поэтому будет выбрана реализация, добавленная первой.

    Используется только вместе с OVERRIDE.

  • FULL

    Ключевое слово. Если задано, платформа автоматически проверит полноту набора реализаций: для всех потомков классов аргументов должна существовать хотя бы одна подходящая реализация (или ровно одна, если условия взаимоисключающие).

  • returnClassName

    Класс возвращаемого значения свойства. Идентификатор класса.

  • argClassName1, ..., argClassNameN

    Список имен классов аргументов свойства. Каждое имя задается идентификатором класса. Список может быть пустым. Если список не указан, используются классы параметров свойства из объявления, в котором применяется оператор ABSTRACT.

Примеры

CLASS Invoice;
CLASS InvoiceDetail;
CLASS Range;
CLASS Connection;

rateChargeExchange(invoice) = ABSTRACT NUMERIC[14,6] (Invoice);

defaultIsMobileMode(Connection c) = ABSTRACT BOOLEAN;

backgroundSku 'Цвет' (d) = ABSTRACT CASE FULL COLOR (InvoiceDetail);

overVAT = ABSTRACT VALUE OVERRIDE FIRST Range (InvoiceDetail);