Оператор 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);