  Использование векторов прерываний для организации объектно- 
 ориентированных модулей, написанных на языке Turbo Pascal 6.0.


Кучеров С.Н.                                     Тезисы к докладу

Иногда перед  разработчиками больших программных систем, например
СУБД,  возникает  задача  организовать  базовый  набор  операций,
который мог  бы быть  использован разными  программами. Одним  из
решений этой  задачи является  создание языка  высокого уровня  с
компиллятором, интерпретатором и отладчиком. При этом, если такой
компиллятор  позволит  создавать  EXE  модули,  то  каждая  такая
программа будет иметь значительные размеры, потому что она должна
будет  содержать  все  коды,  обеспечивающие  выполнение  базовых
операций.
   Другое решение  заключается  в  написании  главной  программы,
содержащей  коды   всех  базовых   операций,  из   которой  будут
запускаются дочерние  программы (утилиты).  Эти  программы  будут
использовать  коды   главной  программы  для  доступа  к  базовым
операциям.
   Для того,  чтобы организовать базовые операции в виде объектов
предлагается  следующий   алгоритм:  создается   модуль   (unit),
содержащий некий  объект, который  должен иметь конструктор и все
его методы  должны быть виртуальными. Кроме этого следует создать
"пустой"  модуль,   т.е.  модуль,  содержащий  описание  того  же
объекта, но  без реализации  (все методы  должны быть реализованы
как begin  end). В  главной  программе  создается  также  таблица
объектной   библиотеки   (запись,   содержащая   адреса   таблицы
виртуальных  правил  объекта,  а  также  указатели  на  некоторые
переменные модуля SYSTEM.
   Используя таблицу объектной библиотеки, адрес которой дочерняя
программа получит  из  свободного  вектора  прерывания  (например
$61), можно  заменить содержимое таблицы виртуальных правил (VMT)
"пустого"  объекта  на  содержимое  аналогичной  таблицы  главной
программы. Таким  образом обращения к методам экземпляров объекта
в дочерней  программе  будут  переадресованы  в  область  главной
программы. Это позволит организовать доступ к библиотеке объектов
из множества  программ небольшого  размера,  а  также  обеспечить
потенциальную  совместимость   с  последующими  версиями  главной
программы.
   Описанный метод  реализован в  виде двух  программ: MAIN.EXE и
CHILD.EXE. Программа MAIN содержит базовый объект, представляющий
собой  простую  базу  данных.  Программа  CHILD,  запускается  из
программы MAIN  и после  проверки наличия  в  памяти  запускающей
программы обращается к объекту из программы MAIN.
   Программа CHILD  содержит "пустой" объект базы данных, поэтому
ее размер  не зависит  от размера модуля базы данных и составляет
около 5k.

                                                      7 мая 1991.
