Общеизвестно, что ООП строится на трех основных принципах: полиморфизме, наследовании и инкапсуляции.
Программирование в среде V8 вполне можно считать объектно ориентированным и все эти принципы в какой-то степени присутствуют. Но хотелось бы большего.
Чего не хватает? Нам не позволили создавать произвольные классы.
Частично эта проблема решается созданием обработок, где в модуле объекта можно создавать публичные и приватные свойства и методы. Получается вполне класс. Такой подход используется в стандартных конфигурациях. Чудесно. Но нет наследования! Нельзя построить иерархию классов. Нельзя расширить или переопределить функционал базовых объектов.
Данная разработка в некоторой степени снимает это ограничение.
Как это работает.
Компонента представляет собой COM-сервер. Компонента хранит ссылки на переданные ей базовые объекты и при обращении к ее свойствам и методам просто переадресовывает вызовы к базовым объектам.
Как этим пользоваться.
Например так. Добавим в конфигурацию обработку Класс1. Добавим такой текст в модуль объекта.
Процедура Метод1() Экспорт
Сообщить("Класс1::Метод1");
КонецПроцедуры
Результатом выполнения следующего кода
Класс1=Обработки.Создать("Класс1");
Класс1.Метод1();
будет
Класс1::Метод1
Теперь добавим еще одну обработку Класс2. Текст модуля объекта:
Процедура Метод2() Экспорт
Сообщить("Класс2::Метод2");
КонецПроцедуры
Теперь сделаем так, чтобы Класс2 сохранил свои методы и унаследовал методы Класса1.
Класс2=Новый COMОбъект("RClassMngr.Class");
Класс2._Инит(Обработки.Создать("Класс2"), Обработки.Создать("Класс1"));
Класс2.Метод2();
Класс2.Метод1();
Результатом выполнения будет:
Класс2::Метод2
Класс1::Метод1
Методы Класса1 можно переопределить в Классе2. Базовым для Класса2 может стать и любой другой объект в системе.
Вообще, лучше оформить класс следующим образом. Добавлять в каждую обработку один служебные метод для создания непосредственно класса.
Функция _КакКласс() Экспорт
Cls = Новый COMОбъект("RClassMngr.Class");
Cls._Инит(ЭтотОбъект
, Обработки.Создать("БазовыйКласс")
);
Возврат Cls;
КонецФункции
Тогда создание экземпляра класса будет сводиться только к одной строке:
с
Кл2=Обработки.Создать("Класс2")._КакКласс();
Хочется, конечно, что то вроде этого: Кл2 = Новый Класс2, но....
Кроме того, в модуль объекта можно добавить процедуру Деструктор. Она будет вызываться автоматически при уничтожении экземпляра класса.
P.S. Компонента требует регистрации в реестре как обычный COM-сервер или ActiveX-объект.
regsvr32.exe RClassMngr.dll
Описание наследования форм //infostart.ru/blogs/985/