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

Оператор ABSTRACT

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

Синтаксис

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

Где exclusionType бывает двух видов:

EXCLUSIVE
OVERRIDE [FIRST | LAST]

Описание

Оператор ABSTRACT создает абстрактное свойство, реализации которого можно определять позже (например, в других модулях, зависящих от модуля, содержащего это ABSTRACT свойство). Реализации добавляются к свойству с помощью инструкции +=. При вычислении абстрактного свойства выбирается и вычисляется его подходящая реализация. Выбор подходящей реализации зависит от выполнения условий выбора, которые задаются при добавлении реализаций, и от типа оператора ABSTRACT.

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

Тип взаимоисключения оператора определяет, могут ли несколько условий реализаций абстрактного свойства одновременно выполняться при некотором наборе параметров. Тип EXCLUSIVE указывает на то, что условия реализаций не могут одновременно выполняться. Тип OVERRIDE допускает несколько одновременно выполняющихся условий, при этом то, какая из реализаций будет в итоге выбрана, определяется ключевыми словами FIRST и LAST.

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

Параметры

  • type

    Тип абстрактного свойства. Задается одним из ключевых слов:

    • CASE
    • MULTI
    • VALUE

    Значением по умолчанию является тип MULTI.

  • exсlusionType

    Тип взаимоисключения. Одно из ключевых слов: EXCLUSIVE или OVERRIDE. Если не указано явно, то в абстрактном свойстве типа MULTI типом взаимоисключения по умолчанию является EXCLUSIVE, в остальных случаях типом взаимоисключения по умолчанию является OVERRIDE.

    • FIRST | LAST

    Ключевые слова. Определяют, какая из подходящих реализаций будет выбрана. При указании слова FIRST, реализации будут добавляться в начало списка реализаций, поэтому будет выбрана реализация, добавленная последней. При указании слова LAST, реализации будут добавляться в конец списка реализаций, поэтому будет выбрана реализация, добавленная первой. Если не заданы, то по умолчанию используется FIRST.

  • FULL

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

  • returnClassName

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

  • argClassName1, ..., argClassNameN

    Список имен классов аргументов свойства. Каждое имя задается идентификатором класса.

Примеры

CLASS Invoice;
CLASS InvoiceDetail;
CLASS Range;

// В данном случае создается ABSTRACT MULTI EXCLUSIVE
rateChargeExchange(invoice) = ABSTRACT NUMERIC[14,6] (Invoice);

// В данном случае создается ABSTRACT CASE OVERRIDE LAST, и если будут подходить несколько реализаций,
// то вычислена будет первая из них
backgroundSku 'Цвет' (d) = ABSTRACT CASE FULL COLOR (InvoiceDetail);

// Здесь же будет вычислена последняя из подходящих реализаций
overVAT = ABSTRACT VALUE OVERRIDE FIRST Range (InvoiceDetail);