Руководство разработчика

Типы времени выполнения

При разработке прикладных программ может возникнуть потребность в создании RunTime-объектов, или объектов времени выполнения, которые существуют только во время выполнения алгоритма, а затем разрушаются.

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

Например, в модуле ATHENA существует тип времени выполнения Номенклатура, который является типом-потомком типа АНАЛИТКА. Он наследует все его поля и методы.

RunTime-источник поставляет компилятору и виртуальной машине имена создаваемых RunTime-типов и собственные поля типов со значениями по умолчанию. Важной особенностью RunTime-объектов является объявление их методов. В отличие от статических объектных типов, методы которых объявляются на языке низкого уровня там же, где и сам тип (в подключаемом модуле), методы RunTime-объектов представляют собой внешние программы на языке И++, которые разрабатываются прикладными программистами. RunTime-источник хранит сигнатуру метода и возвращает виртуальной машине исполняемый код метода. Дополнительно следует отметить, что в RunTime-источнике заложена возможность получения значений полей и кодов методов в разрезе времени.

Для функций и циклов, объявляемых в модуле, существует возможность задавать флаг принудительного использования RunTime-источников, то есть обеспечить использование RunTime-объектов в функции или цикле.

В общем случае за использование необходимых типов в исполняемом коде алгоритма отвечает компилятор, и основной принцип использования типов заключается в том, что при использовании типа используются все типы для значений его полей. Соответственно, для поля неопределенного типа никаких типов компилятор использовать не должен. Однако разработчик модуля может сделать предположение о том, какие типы могут быть использованы в качестве значений полей, и установить ассоциации типов, то есть при описании типа явно указать другие типы, связанные с ним. Тогда при использовании типа компилятор будет автоматически использовать все типы, с которыми были установлены ассоциации. Ассоциации для типов можно устанавливать только в пределах одного модуля!


См. также: