Книга знаний

Рекламное место пустует
1С:Предприятие / Приемы программирования / Внешние компоненты

Полиморфизм в 1С++

Использование третьего постулата ООП: полиморфизма в 1С++.Автор статьи: Ненавижу 1С | Редакторы: Волшебник
Последняя редакция №2 от 15.02.08 | История
URL: http://kb.mista.ru/article.php?id=638

Ключевые слова: 1С++, ООП, полиморфизм, виртуальный метод.


Для изменения поведения базового класса удобно реализовать полиморфные методы, вызываемые из базового класса. Пример такого использования: формирование бухгалтерской операции документа. Формируемые проводки зависят от вида документа, а их инициализация и запись общая для всех.

Чтобы формирование проводок было вызвано полиморфно, необходимо обратиться к нему через контекст.
//класс Проводки

Функция Этот(Конт)
   Возврат Конт;
КонецФункции
Процедура СоздатьПроводки(Конт) Экспорт
   Инициализация();
   Этот(Контекст).Формирование(Конт);
   Запись();
КонецПроцедуры
//класс ПроводкиПереоценки
Процедура Формирование(Конт) Экспорт
   …
КонецПроцедуры
//использование
ПроводкиПереоценки = СоздатьОбъект(«ПроводкиПереоценки»);
ПроводкиПереоценки.СоздатьПроводки(Контекст);

Переопределенный метод обязательно должен быть объявлен как «Экспорт». В базовом классе, если нет необходимости, его вообще можно не определять (абстрактный метод). Однако, это приведет естественно к ошибке в случае использования из экземпляра непосредственно базового класса или из дочернего класса, в котором метод не переопределен (он вообще не определен :-)). Во избежание ошибки, его нужно определить обязательно с директивой «Экспорт».
Для вызова из дочернего класса метода, определенного в базовом, также необходимо использовать контекст.
//дочерний класс

Функция БазовыйОбъект(Конт)
   //получаем контекст экземпляра базового класса
   Возврат Конт.ПолучитьБазовыйКласс("ИмяБазовогоКласса");
КонецФункции
Процедура МояПроцедура() Экспорт
   БазовыйОбъект(Контекст).БазоваяПроцедура();
КонецПроцедуры

Базовая процедура должна быть определена с директивой «Экспорт».
Закладка

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2021 | Mista.ru

Яндекс.Метрика