Перейти к концу метаданных
Переход к началу метаданных

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

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

Примеры

1
2
3
4
5
6
7
8
 CLASS Invoice;
CLASS InvoiceDetail;
CLASS Range;

rateChargeExchange(invoice) = ABSTRACT NUMERIC[14,6] (Invoice);             // В данном случае создается ABSTRACT MULTI EXCLUSIVE
backgroundSku 'Цвет' (d) = ABSTRACT CASE FULL COLOR (InvoiceDetail); // В данном случае создается ABSTRACT CASE OVERRIDE LAST, и если будут
                                                                            // подходить несколько реализаций, то вычислена будет первая из них
overVAT = ABSTRACT VALUE OVERRIDE FIRST Range (InvoiceDetail);          // Здесь же будет вычислена последняя из подходящих реализаций

  • Нет меток