[RClassMngr] ООП для V8. Добавляем наследование v.1.1

30.03.09

Разработка - Рефакторинг и качество кода

Посвящается 1С++. Добавляем в V8 наследование свойств и методов объектов.

Скачать файлы

Наименование Файл Версия Размер
RClassMngr v.1.1.0
.1237131025 94,00Kb
219
.1237131025 94,00Kb 219 Скачать бесплатно
Пример наследования форм v.1.1
.1237974601 21,64Kb
110
.1237974601 21,64Kb 110 Скачать бесплатно

Общеизвестно, что ООП строится на трех основных принципах: полиморфизме, наследовании и инкапсуляции.
Программирование в среде 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/

См. также

Когда понадобился новый оператор

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

18.03.2024    1145    ZhokhovM    2    

4

Когда разработчик платформы не добавил проверку препроцессоров

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда разработчик платформы решил пойти на кухню за кофе, а проверку препроцессоров не добавил, и вот тут-то и началось: "Что, опять все сломалось? Ну и кофе же я забыл сделать!".😅

18.03.2024    2670    ZhokhovM    4    

8

Реструктуризация - бесконечная история

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

При разработке программ требуемый функционал ставят на первое место, но есть еще и архитектура программы. На горизонте 5-10 лет она становится важнее функционала, который должен работать при масштабировании и росте данных. Реструктуризация 5 терабайтной базы 1С 8.2 в формат 1С 8.3, складывает весь пазл архитектурных просчетов, которые сделали ради функционала. Как это исправить? - для разработки правильной архитектуры, нужно всего лишь сместить фокус с функционала и подумать о «вечном».

29.09.2023    1908    1CUnlimited    15    

22

Чистый код. Мой взгляд на жизнь в макаронных джунглях. Часть 2

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Коротко о том, как я перестал быть создателем макаронного кода и непроходимых джунглей методов и модулей. Расскажу о том, что реально применяю на практике с примерами при разработке (а в основном доработке) в типовых конфигурациях 1С. Комментарии очень приветствуются.

27.09.2023    6966    Lemmonbri    136    

36

Чистый код. Мой взгляд на жизнь в макаронных джунглях. Часть 1

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Коротко о том, как я перестал быть создателем макаронного кода и непроходимых джунглей методов и модулей. Расскажу о том, что реально применяю на практике с примерами при разработке (а в основном доработке) в типовых конфигурациях 1С. Комментарии очень приветствуются.

19.09.2023    4345    Lemmonbri    16    

31

5 подходов при доработке конфигурации 1С, чтобы в будущем не было мучительно больно её обновлять

Архитектура Рефакторинг и качество кода Обновление 1С Платформа 1С v8.3 Бесплатно (free)

Нашей компании часто приходится сталкиваться с обновлением конфигураций разной степени переписанности. Какие-то из них обновляются легко, какие-то — не очень. Расскажем о некоторых принципах модификации программы, которые помогут сделать последующий процесс обновления легче. Или тяжелее, если стараться их не соблюдать.

10.08.2023    9584    0    1c-izhtc    37    

21

Задача на ошибки и неоптимальности при проведении приходной накладной

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Задачу эту дают на собеседованиях, видимо, те франчи, которые не в состоянии оценить человека по резюме и в ходе беседы. По идее задачи, подобные этой, должны давать начинающим студентам. Но дают всем подряд. Итак: мои 5 копеек. Критика приветствуется.

11.07.2023    2214    magic1s    32    

11
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. German 413 15.03.09 20:14 Сейчас в теме
2. Душелов 4013 15.03.09 20:26 Сейчас в теме
3. biv75 15.03.09 21:56 Сейчас в теме
Интересно.. надо попробовать
4. Душелов 4013 15.03.09 22:04 Сейчас в теме
С объектами понятно, а вот с формами... Сделать наследование форм...
Документы, обработки - можно сделать наследованными, с реквизитами и методами... А вот как бы форму унаследовать...
5. Robert 721 15.03.09 22:38 Сейчас в теме
(4) Форму можно также наследовать. Только для того, чтобы самому обращаться как производному от формы классу.
Или ты хотел бы производный класс подсунуть системе вместо базовой формы?
6. Душелов 4013 15.03.09 22:41 Сейчас в теме
Тут как раз вопрос именно в визуальном редактировании наследованной формы и подмене обработчиков формы.
7. Robert 721 15.03.09 22:50 Сейчас в теме
(6) Я не совсем тебя понимаю. Объясни на пальцах.
Вот есть форма, на ней реквизит, у реквизита обработчик. Теперь создаем новую форму и, типа, наследуем ее от первой. Как это выглядит? Что в редакторе формы? Что наследуется? Реквизиты или поведение реквизитов?
8. Душелов 4013 15.03.09 22:52 Сейчас в теме
(7) Классическое наследование формы:
Есть форма, на ней реквизиТ, у реквизита обработчик - получаем новую форму, аналогичную, только обработчик реквизита новой формы работает в старой форме. Но имеем возможность добавлять свои реквизиты у новой формы.
9. Robert 721 15.03.09 22:56 Сейчас в теме
(8) Ладно, идею понял. Пораскину мозгами.
10. Robert 721 16.03.09 00:41 Сейчас в теме
(8) Не, это совсем из другой оперы.
11. Душелов 4013 16.03.09 00:43 Сейчас в теме
(10) Ну почему же? Наследовать же мы можем любые объекты, добавлять новые свойства, переопределять методы своими...
12. orefkov 1152 16.03.09 11:54 Сейчас в теме
Для начала отлично.
В свое время мы с Dmitro думали над возможными реализациями ООП в 8ке, и пришли почти к такому же решению, однако делать не стали.

Так сразу же вопросы и пожелания и своя толика видения развития.

Сделано ли множественное наследование?
Будет ли какая-то декларативность в описании классов?

То есть сейчас наследование (и обращение из класса к базовым методам) делается "ручками":
в инициализируещем методе обработки сами создаем объект ВК, и объекты базовых классов.
Если хотим обращаться к методам базовых классов, то должны сами сохранить где-то (например в переменных модуля) ссылки на нами же созданные объекты.

А вот тут Dmitro (как больший чем я спец по 8ке) подсказывает - у обработки могут быть реквизиты обработки с типом "Обработка.Объект", которые как-раз и было бы удобно использовать как базовые классы.
Те у ВК допустим метод - CreateClass(ИмяОбработки)
ВК создает эту обработку, базовые классы создаются САМИ как реквизиты этой обработки.
Дальше ВК должна просто обойти реквизиты обработки, выделить среди них те, которые есть базовые классы (может там инфа в синонимах метаданных и тп), и вернуть уже свой объект. Также для каждого подобъекта, являющегося классом, можно будет вызывать какой-то инит-метод, в который передавать ссылку на конечный объект, для реализации виртуальных вызовов (аналог Сам(Контекст) в 1С++).

Вобщем, надо думать над этим, и для начала определиться со стандартами - как прописывать/создавать иерархию наследования, как инициализировать, как описать public/protected/private методы и наследование, и тп.
15. Robert 721 16.03.09 13:04 Сейчас в теме
(12) http://www.1cpp.ru/forum/YaBB.pl?num=1237134465

(11) Наследовать можем. А заставить V8 искать обработчик событий формы в модуле другой формы я не могу.
16. Душелов 4013 16.03.09 13:09 Сейчас в теме
(15) Ну тогда только копировать обработчики в новую форму.
18. Robert 721 16.03.09 13:22 Сейчас в теме
(16) Ты можешь не копировать текст обработчиков в новую форму, а в обработчиках новой формы вызывать обработчики из старой формы (базового класса). Соотв. при изменении базового класса изменится поведение всех обработчиков всех форм, которые на него завязаны. Но это можно и без всяких классов сделать
13. artbear 1448 16.03.09 13:01 Сейчас в теме
+ Хорошо!
Напрашивающийся вопрос: что будешь делать с исходниками? Будешь ли выкладывать в открытый доступ?
17. Robert 721 16.03.09 13:18 Сейчас в теме
(13) Дался тебе этот открытый доступ. Там кода кот наплакал. Выложу.
(14) Как таковы виртульных методов нет. Можешь определить метод в базовом классе, но оставить метод пустым или добавить генерацию ошибки при вызове этого метода. А в производном классе переопределить этот метод и написать реализацию. В любом случае метод будет публичным и клиент может обратиться к методу.
14. artbear 1448 16.03.09 13:03 Сейчас в теме
Ага, вопросов куча :)
Например, виртуальные методы реализованы?
19. artbear 1448 16.03.09 13:28 Сейчас в теме
Роберт, а скорость тестировал? Насколько сильно тормозить по сравнению с типовым/штатным вызовом метода обработки?
21. Robert 721 16.03.09 13:57 Сейчас в теме
(19) Скорость не тестировал. Время вызова метода увеличивается максимум на время поиска метода в каждом базовом классе последовательно.
(20) В моем примере _КакКласс по сути и есть конструктор. Если ты создаешь класс, у которого базовым является другой класс, то он создается также через _КакКласс, т.е. через вызов конструктора.
Вообще, orefkov может быть предложит вариант изящнее.
22. artbear 1448 16.03.09 14:05 Сейчас в теме
(21) По конструктору: Хотелось бы отделить/выделить стадии создания (статический метод) и стадию конструирования (на уже готовом объекте).
Т.е. метод _КакКласс и метод Конструктор() ИМХО удобнее иметь отдельно.

При этом было бы совсем красиво, если бы метод Конструктор вызывался из твоей ВК автоматом внутри твоего метода Инит :)
24. Robert 721 16.03.09 14:11 Сейчас в теме
(22) Без понятия :) Я в код 1С не залезал. Это не RainbowV8. Я получаю IDispatch интерфейсы базовых объектов и использую их методы GetIDsOfNames и Invoke. Можно, конечно, кэшировать вызовы и по мере работы класса создавать собственный хеш, дерево или что угодно. Но заранее методы базовых объектов мне не известны.
25. artbear 1448 16.03.09 14:31 Сейчас в теме
(24) Да, через ИДиспатч скорость будет слабенькая :(
23. artbear 1448 16.03.09 14:05 Сейчас в теме
(21) А как построена схема поиска метода? линейный поиск, бинарный, хеш, деревья и т.д.?
20. artbear 1448 16.03.09 13:33 Сейчас в теме
А как быть с конструкторами классов, как базовых, так и наследников?
Есть какой-нибудь вариант?

ЗЫ кстати, народ, есть ли у кого-нибудь какая-нибудь система тестирования (функционального или юнит-тестирования) для 8 ?
С ее помощью было бы удобно протестировать и данную ВК :)
26. coder1cv8 3468 16.03.09 16:21 Сейчас в теме
Вот честно, не понимаю, какая в этом практическая польза? ) Столько разговоров про ООП, наследование... Зачем это в языке КОНФИГУРИРОВАНИЯ? Может конечно, дело в том, что я пришел в 1С не с "нормального" языка программирования, а изначально писал только на восьмерке (ну если не считать скрипты всякие)... Но вот за всю свою практику решения самых разнообразных задач, ни разу не чувствовал необходимости в чем-то подобном...
28. Robert 721 16.03.09 16:57 Сейчас в теме
(26) ООП это способ выражения программистской мысли. Весьма популярный способ на настоящий момент. Он имеет ряд преимуществ и ряд недостатков. Поклонников и противников.
ИМХО, V8 имеет все признаки объектно ориентированного языка или системы, как угодно.
simply1; Арчибальд; +2 Ответить
30. artbear 1448 16.03.09 17:34 Сейчас в теме
(28) 8 имеет только признаки ООП и сама сделана внутри на ООП-языке, но вот для разработчиков в среде 1С ничего в плане ООП не сделано.
ИМХО ООП - в первую очередь возможность создавать собственные классы, схемы наследования и т.д.
29. artbear 1448 16.03.09 17:33 Сейчас в теме
(26) ООП нужен тем, кто не занимается копи-пастом, а любит/умеет строить нормальные программы, удобные при сопровождении, разработке и т.д.

А 77 и 8, к сожалению, проповедуют минимальные знания разработчика/программиста - спец.термин даже придумали "внедренец" :(
simply1; mdzen; +2 Ответить
38. coder1cv8 3468 17.03.09 09:14 Сейчас в теме
Ну вот, один (29) сказал что я "не умею стоить нормальные программы" и вообще занимаюсь "копи-пастом", второй (35) юзером обозвал! ))
40. Арчибальд 2706 17.03.09 09:27 Сейчас в теме
(38)Если у тебя есть свои индивидуальные инструменты, ты, вероятно, мастер, а если нет, так, в лучшем случае, ремесленник. Т.е. пользователь (user).
42. coder1cv8 3468 17.03.09 09:32 Сейчас в теме
(40) Какие-такие инструменты? ) Поясни, пожалуйста...
46. Арчибальд 2706 17.03.09 10:03 Сейчас в теме
47. coder1cv8 3468 17.03.09 11:36 Сейчас в теме
32. Hadgehogs 489 16.03.09 23:20 Сейчас в теме
(26) Поддержу товарисча.
Страсти вокруг ООП напоминают беготню пигвинячьей стаи. Один побежал - и все ломанулись.
Прямо культ ООП.
Накуй-накуй оно не нужно в 1С.
Сделали вон СУПЕР УНИВЕРСАЛЬНОЕ движение по партиям в УПП - оно надо. Чем меньше универсальности - тем лучше.

ООПисты, баянисты млин.

Каждый раз, какой - нибудь спец напрягается, вываливает мегакод на Обработках, толпа начинает эрреагировать на это, потом успокаевается.
Забавные вы.
34. artbear 1448 17.03.09 07:01 Сейчас в теме
(32) Не хочешь - не ешь :)
Если не понимаешь смысла, также не говори.

ООП нужно тем, кто не хочет выполнять постоянный копи-паст, а ведет постоянное накопление рабочего кода в виде необходимых классов + (29)
63. kote 536 19.11.09 21:41 Сейчас в теме
(32) и др. не попробовавших ООП или не программировавших ничего, кроме учетных задач..

.. 1С не годится для моделирования чего либо, кроме задач учёта. Даже в VBA + Access больше возможностей, если честно, чем в 1C - в плане ВОЗМОЖНОСТЕЙ.. но 1С подарила на преднастроенные классы для решения учетных задач - Документ, Справочник, ПланСчетов.. и т.п. А в VBA пришлось бы самим создавать всю реализация и методы для решения учетных задач.

Смотрите что происходит - с появлением 8.1 - появились новые объекты (на самом деле классы) - БизнесПроцессы.. А будь там ООП - юзеры сами бы создали этот и много других классов.. но для 1С это плохо, - посмотрите на пользователей 1С++ - теперь их за уши не оттащишь от 7.7 с 1С++.. в общем, потерянные клиенты для 1С на неопределенное время.
35. Арчибальд 2706 17.03.09 08:07 Сейчас в теме
(26)Цитируем Кодера: ну зачем мне знать, как устроен автомобиль, если мне на нем ЕЗДИТЬ.
А никто и не заставляет. Выложен инструментик для инженера (=творца), а не для юзера.
(32)Сам-то ведь тоже в стае глупых пингвинов. ООП пользуешься - 1С на нем и стоит.
Автору. Привязка к 8 и 1С++ в заголовке не требуется. Семерочникам методичность мышления тоже требуется. А для "особо юзвернутых" читателей неплохо бы добавить что-то типа "потребителей просят не беспокоиться"
37. artbear 1448 17.03.09 09:01 Сейчас в теме
(35) Цитата "Автору. Привязка к 8 и 1С++ в заголовке не требуется. Семерочникам методичность мышления тоже требуется" к чему относится?
Расшифруй, нифига не понятно :)
39. Арчибальд 2706 17.03.09 09:21 Сейчас в теме
(37)А это я поддерживаю посты 29 и 34. В том, что ООП - это, в первую очередь, стиль/метод мышления. И сам пользуюсь оным методом на семерке, хотя синтаксиса семерочного и не хватает.
Автору плюсанул за методическую идею, а не за ВК-шку
27. Dziden 10 16.03.09 16:31 Сейчас в теме
я вижу применение только для обфускации кода и подобных задач.
31. Indgo 338 16.03.09 20:07 Сейчас в теме
33. Hadgehogs 489 16.03.09 23:22 Сейчас в теме
А, пардон, тут ВКшэчка, ну да не в этом суть.
36. Арчибальд 2706 17.03.09 08:11 Сейчас в теме
(0)>Общеизвестно(Sic!), что ООП строится на трех основных принципах: полиморфизме, наследовании и инкапсуляции

Безудержный оптимизм автора сильно воодушевляет.
sikvel2012; +1 Ответить
41. coder1cv8 3468 17.03.09 09:28 Сейчас в теме
А между тем все забывают что есть стандарты написания кода 1С, разработанные непосредственно создателями платформы, где использование всяких ВК и ООП отнюдь не поощряется. Специфика конфигураций 1С такова, что есть большая вероятность того что в дальнейшем ваш код будет сопровождать и разбирать кто-то другой. А для среднестатистического одинэсника, ООП - темный лес! Да, тут можно говорить о низком "пороге вхождения" в эту специальность, что поделать, так уж сложилось... Вот поэтому написание кода согласно стандартам 1С - это хороший стиль, признак мастера, не для себя, не для другого профи, а в первую очередь для ЗАКАЗЧИКА.
ZUL_MTFKA; AlexO; +2 1 Ответить
43. Душелов 4013 17.03.09 09:34 Сейчас в теме
(41) > есть стандарты написания кода 1С, разработанные непосредственно создателями платформы, где использование всяких ВК и ООП отнюдь не поощряется

Холивар! :)) А в 7-ке ВК очень даже используются в типовых... v7plus.dll к примеру...
44. coder1cv8 3468 17.03.09 09:41 Сейчас в теме
(43) Ну с семеркой-то как раз все понятно... Здесь холивар на другую тему! ))
45. Арчибальд 2706 17.03.09 09:53 Сейчас в теме
(41)Ровно все наоборот. 1С сама выпустила книжечку про технологию ВК. На использовании ООП вся платформа построена. "Агрегатные объекты" языка - это классы с присущими им атрибутами и методами, наследуемыми при создании экземпляра класса и/или подкласса. "Среднестатистический одинэсник" может их, конечно, называть колобашками или хреновинками - это вопрос культуры речи. Да, мастер должен обеспечить сопровождаемость продаваемого продукта - но именно продукта, а не инсрументария, им использованного. И уж совсем глупо запрещать одному мастеру поделиться с другим своими приемами.
AlexO; mdzen; be_nt_all; lustin; Donat; artbear; Robert; +7 Ответить
48. artbear 1448 17.03.09 12:03 Сейчас в теме
(41) Как раз с этим нельзя согласиться!
Данный стандарт, как и любой стандарт разработки, не является обязательным и автоматическим применяемым.
1С его ввела для упрощения/стандартизации ведения разработки и помощи разработчикам в плане указания полезных фич решения учетных задач и т.д.
ООП-схемы прекрасно можно уложить даже и в этот стандарт :)
49. WKBAPKA 214 17.03.09 14:27 Сейчас в теме
Плюсану за оригинальность идеи...
50. Valerich 1633 18.03.09 03:12 Сейчас в теме
Больше всего от ООП действительно не хватает полиморфизма и наследования. Особенно это касается форм. TormozIT как-то поднимал вопрос инкапсуляции форм, т.е. чтобы готовую форму можно было вставить в другую форму в качестве закладки на панели или что-то в этом роде.
64. Rusmus 45 07.10.10 11:06 Сейчас в теме
(50) а можно ссылку на эту тему? я и сам собирался реализовать подобное
51. Froloid 66 18.03.09 10:21 Сейчас в теме
Автору плюс. Тем кто пытается доказать что это не нужно - минус. Любая вещь не является нужной или не нужной по определению, она может быть нужной или нет для кого-то конкретно. И у этой обязательно найдутся свои поклонники!
52. rasswet 82 19.03.09 09:00 Сейчас в теме
я когда чего-то не понимаю часто думаю что наверное это что-то очень умное. Плюсану
53. K_A_O 538 28.03.09 19:02 Сейчас в теме
Чего-то не получается зарегистрировать: "regsvr32 RClassMngr.dll"

Права администратора есть. Говорит "Приложение некорректно настроено".
Пробовал в Windows XP SP3 и в Windows Server 2003 SP1
54. Robert 721 30.03.09 12:36 Сейчас в теме
(53) Никогда не встречал такой ошибки при регистрации.
Попробуй загрузить библиотеку через ЗагрузитьВнешнююКомпоненту. При такой загрузке она должна самостоятельно зарегистрироваться.
55. K_A_O 538 30.03.09 14:37 Сейчас в теме
(54) Так, естественно, тоже не регистрируется.

Я нашел ссылку на подобную проблему
http://www.rsdn.ru/Forum/message/3022647.all.aspx

В принципе все начинает регистроваться и работать, если установить "Microsoft Visual C++ 2008 Redistributable Package".
56. Robert 721 30.03.09 15:26 Сейчас в теме
(55) Понял. Спасибо. Буду иметь в виду
57. steban 73 30.03.09 17:42 Сейчас в теме
Чтобы не зависеть от VC90 runtime, можно собрать ВК прилинковав runtime статически:
в свойствах проекта -> c/c++ ->Code Generation -> Runtime Library поставить "Multi-threaded" вместо "Multi-threaded DLL"

dll-как чуток распухнет в размере и избавится от зависимости от msvcr90
58. steban 73 30.03.09 17:44 Сейчас в теме
Ой.
А она еще от ATL90.dll зависит.

Можно избавить так:
Свойства проекта -> Configuration properties -> General -> Use of ATL поставить "Static link to ATL"
59. Robert 721 30.03.09 20:04 Сейчас в теме
(55,57,58) Сделано. Спасибо.
60. artbear 1448 17.04.09 12:32 Сейчас в теме
Роберт, а ты отладчиком пробовал заходить в подобные классы/субклассы.
Работает ли отладка для подобной схемы?
61. Robert 721 19.05.09 12:42 Сейчас в теме
62. artbear 1448 19.05.09 12:51 Сейчас в теме
(61) Это очень хорошо, заморочек будет меньше.
В последнее время, работая на 8, все больше начинаю задумываться о классах и наследовании в 8 и применении твоей ВК.
66. cool.vlad4 2 10.10.11 23:53 Сейчас в теме
(62) artbear, столько времени прошло, честно скажи пользовался этой ВК? ...просто интересно...
67. artbear 1448 11.10.11 15:05 Сейчас в теме
(66) Нет, не пользовался, т.к. создание собственных классов все-таки не очень удобно.
Планирую сделать собственную ВК для реализации ООП и Перехватчика для 8-ки аналогично реализованным в 1С++ для 77 На базе прямого доступа к внутренним функциям 1С 8.2
ЗЫ в принципе уже есть примеры реализации ООП для 8.2, товарищ chessman с 1cpp.ru сделал :)
68. cool.vlad4 2 11.10.11 15:08 Сейчас в теме
(67) Сама идея неплоха, вот только проблема как мне кажется в 1С, они же не используют ничего подобного;-((( а с типовыми работать надо...
69. artbear 1448 12.10.11 07:27 Сейчас в теме
(68) В 1С++ для 77 мы вполне успешно юзали отдельные классы и целые наборы классов. было очень удобно.
70. artbear 1448 12.10.11 16:28 Сейчас в теме
(68) Например, уже сейчас у chessman-a работает такой код
Процедура КнопкаВыполнитьНажатие(Кнопка)
	объектИнформатор = Новый Информатор;
	объектИнформатор.Изучить(Справочники);
КонецПроцедуры

ЗЫ кстати, рекомендую Объект Информатор :)
Скриншот
ЗЗЫ tormozit в своей подсистеме "Инструменты ИР" уже начал пользоваться.
72. AlexO 135 20.04.12 13:43 Сейчас в теме
(67) artbear,
Нет, не пользовался, т.к. создание собственных классов все-таки не очень удобно.

а в чем неудобство конкретно? в том, что 1с не дружит с ООП принципиально? или в конкретной реализации?
(70) artbear,
это, я так понимаю, ВК из (67)?
(71) fixin,
АОП полностью работает на ООП. Сам АОП никогда не откажется от ООП, т.к. аспекты - это прикладная реализация, а ООП - это база для реализации.
73. artbear 1448 20.04.12 19:11 Сейчас в теме
(72) Да, именно эта доработка.
Работает на базе КОМ-объекта DynaWrapperX
74. fixin 4252 03.05.12 11:02 Сейчас в теме
(72) не согласен. В 1С есть элемент АОП - подписка на события. она не объектно-ориентированная.
76. AlexO 135 28.02.15 15:14 Сейчас в теме
(74) fixin,
В 1С есть элемент АОП - подписка на события
Это подделка под АОП. Как если сделать машину из фанеры, покрасить качественно, колеса приделать настоящие. И рядом поставить действительно настоящую. Обе стоят, от друг друга не отличить. Но одна сама ездит, другая - нет.
она не объектно-ориентированная.
В 1С нет вообще ничего объектно-ориентированно в настоящем значении этого определения. А есть подделки "ну вы же видите, что в результате некоторые моменты в платформе вроде как будто ООП!"
65. B0P0H 09.10.10 12:15 Сейчас в теме
хм. а множественное наследование?
71. fixin 4252 14.02.12 18:54 Сейчас в теме
забейте граждане.
будущее не за ООП, а за АОП (аспектно-ориентированным)
75. bainov 52 28.02.15 11:54 Сейчас в теме
Не получается переопределить метод.
Как вызывать абстрактные методы, предназначенные для переопределения в потомках?
77. AlexO 135 28.02.15 15:18 Сейчас в теме
(75) bainov,
Не получается переопределить метод.
Как вызывать абстрактные методы,
И не получится. Здесь имеем отдельную реализацию, "подтаскивание" 1С к ООП по каким-то пунктам или моментам. Если события или методы, или обработка "объекта" не реализованы у данной ВК - их не будет в 1С. Т.к. в 1С ООП нет и не было никогда. По-моему, фраза в описании
"Данная разработка в некоторой степени снимает это ограничение."
должна все объяснять сразу.
78. bainov 52 28.02.15 22:20 Сейчас в теме
(77) AlexO, Мне удалось таки реализовать при помощи данной разработки полиморфизм.

В обработке БазовыйКласс определяем переменную:

Перем Этот Экспорт; //через эту переменную будем вызывать переопределяемые методы

//Описываем виртуальный метод:


Процедура Рисовать(НомерРисунка) экспорт
   сообщить("Базовый класс рисует. № "+НомерРисунка);
КонецПроцедуры


//Используем метод в базовом классе:

Процедура ВывестиСписок() экспорт

  Для Инд=1 По 10 Цикл
       Этот.Рисовать(Инд);//вызываем свой виртуальный метод через переменную Этот
  КонецЦикла;

КонецПроцедуры

Этот = ЭтотОбъект; //пишем сюда ссылку на ЭтотОбъект. Но в потомке мы переопределим переменную на класс

Показать



В потомке НовыйКласс реализовываем инициализирующий метод-конструктор:

Функция Класс() Экспорт
    БазовыйКласс = Обработки.БазовыйКласс.Создать();
	Класс = Новый COMОбъект("RClassMngr.Class");
    Класс._Инит(ЭтотОбъект, БазовыйКласс);
	
    Класс.Этот=Класс; //прописываем себя в переменную Класс базового класса
	
    Возврат Класс;
КонецФункции

//Переопределяем метод 
Процедура Рисовать(НомерРисунка) экспорт
   сообщить("Класс-потомок класс рисует. № "+НомерРисунка+" уже по другому.");
КонецПроцедуры

Показать


Используем классы:

Базовый = Обработки.БазовыйКласс.Создать().Класс();
Базовый.ВывестиСписок();

Потомок = Обработки.НовыйКласс.Создать().Класс();
Потомок.ВывестиСписок();
79. AlexO 135 01.03.15 04:06 Сейчас в теме
(78) bainov,
Мне удалось таки реализовать при помощи данной разработки полиморфизм
У вас в примере минимум не хватает функции "Класс", которая вызывается в
Базовый = Обработки.БазовыйКласс.Создать().Класс();
, и что выводится в
Базовый.ВывестиСписок();
....
Потомок.ВывестиСписок();
80. bainov 52 01.03.15 10:54 Сейчас в теме
(79) AlexO, Писал по памяти. Очепятался немного :)

Правильная процедура теста:

Процедура КнопкаВыполнитьНажатие(Кнопка)
	Базовый = Обработки.БазовыйКласс.Создать(); //"Базовый класс" - на самом деле является обычной обработкой
        
	Базовый.ВывестиСписок();                    //Вызываем метод обычной обработки


	Потомок = Обработки.НовыйКласс.Создать().Класс();//Класс-потомок создается уже при помощи метода Класс(), который прописывает ссылку на себя в обработке-предке в переменную Этот. Поскольку вызовы виртуального метода в предке будут идти как Этот.<Имя метода> , то фактически будет отрабатывать переопределенный в потомке метод.
	Потомок.ВывестиСписок();
КонецПроцедуры
Показать


Результат работы:

Выводим список методом предка:
Базовый класс рисует. № 1
Базовый класс рисует. № 2
Базовый класс рисует. № 3
Базовый класс рисует. № 4
Базовый класс рисует. № 5
Базовый класс рисует. № 6
Базовый класс рисует. № 7
Базовый класс рисует. № 8
Базовый класс рисует. № 9
Базовый класс рисует. № 10
Выводим список методом потомка:
Класс-потомок класс рисует. № 1 уже по другому.
Класс-потомок класс рисует. № 2 уже по другому.
Класс-потомок класс рисует. № 3 уже по другому.
Класс-потомок класс рисует. № 4 уже по другому.
Класс-потомок класс рисует. № 5 уже по другому.
Класс-потомок класс рисует. № 6 уже по другому.
Класс-потомок класс рисует. № 7 уже по другому.
Класс-потомок класс рисует. № 8 уже по другому.
Класс-потомок класс рисует. № 9 уже по другому.
Класс-потомок класс рисует. № 10 уже по другому.

ВЫВОД:
Респект автору! Решение работает отлично!
Хотя и было разработано во времена 8.0. Пример для 1С идет для 1С 8.0. Кое-как нашел дистрибутив 8.0 чтобы проверить.
Протестировано на 1С:Предприятие 8.3 (8.3.5.1383).
Вдохновившись, за эти выходные переписал частично работу с интерфейсом в нашей программке.
В результате количество программного кода уменьшилось раза в три, а функциональности стало намного больше.
На скриншоте отображен результат приведенного мной выше теста с использованием виртуальных методов.
А также результат применения ООП при разработке интерфейса для моей программы.
Прикрепил обработки для демонстрации возможностей.
Прикрепленные файлы:
БазовыйКласс.epf
НовыйКласс.epf
Тест.epf
81. AlexO 135 01.03.15 12:26 Сейчас в теме
(80) bainov, а почему не сделали на общих функциях и программном формировании элементов?
82. bainov 52 01.03.15 14:41 Сейчас в теме
(81) AlexO,
так и сделано: классы программно отрисовывают свои области.
Общие функции - теперь в базовом классе.
Различающиеся методы рисования объектов - в потомках.
Каждый потомок теперь оснащен автоматически своими кнопками-скроллерами, отображаемыми при необходимости (если количество объектов не влезает в панель).

Базовый класс рулит общими процессами: порядком вывода "квадратиков" на экран, настройка вывода кнопок навигации, которые показываются и скрываются при автоматически.
количество элементов по горизонтали и вертикали, цвет, шрифт и т.п.

Потомки же сами выводят свои данные каждого объекта из своего списка в предназначенный ему "квадратик".

Раньше все было реализовано методами 1С. Код был очень громоздким, запутанным, зачастую повторяющимся.
Сейчас наконец-то можно писать на 1C, получая удовольствие от процесса работы с ООП.
А главное, производительность разработки существенно выше, чем при процедурном программировании - меньше ошибок, легче разработка.
83. artbear 1448 01.03.15 22:42 Сейчас в теме
(82) Красиво, большой плюс за ООП :)
87. AlexO 135 03.03.15 22:04 Сейчас в теме
(82) bainov,
Базовый класс рулит общими процессами
Я, может, не понимаю чего, но почему это нельзя было реализовать "общими" процедурами?
"Базовая" процедура - управляет общими процессами, "потомки" - "выводят свои данные каждого объекта".
Т.е. вызываются последовательно универсальные процедуры. Их можно сделать со своими "методами" и "свойствами".
Именно так предлагал в свое время реализовать "подобие ООП" Гений1С.
Вот если бы можно было готовый объект использовать или класс, например - базовый интерфейс, а на его основе - потомки. Меняем базовый - меняются и потомки. меняем потомка - меняется только он.
А тут все те же функции надо писать, т.е. отличия от концепции, предложенной Гением1С, минимальны.
88. bainov 52 04.03.15 13:59 Сейчас в теме
(87) AlexO, Конечно можно. Я ж говорил что так оно и было раньше. А сейчас код выглядит понятнее. И легче вносить изменения в потомков.
Вы наверное приниципиальный противник ООП.
Не нравится классы проектировать? Или вмешательство в работу платформы 1С для вас кошунство? :)
С классами же проще как-то работать.
По скорости же работы 1С - ничуть не уступает обычному методу работы.
Представленный COM-объект просто переадресовывает обращения от одной обработки к другой.
А нам не приходится напрягать себе мозг лишними усилиями.
В результате глюков меньше, толку больше. Что нам и нужно в итоге.
90. AlexO 135 04.03.15 14:32 Сейчас в теме
(88) bainov,
Вы наверное приниципиальный противник ООП.
Наоборот ))
Не нравится классы проектировать?
Ну так я здесь настоящих "классов"-то и не вижу - подмена функций - COM-объектами с функциями "внутри". Отличия от ранее предложенного подхода - минимальны.
Представленный COM-объект просто переадресовывает обращения от одной обработки к другой.
Вот именно, т.е. говорить о существовании отдельного объекта - нельзя. Чуть изменен способ перенаправления, и только.
Что у вас раньше было - в отдельных функциях, а теперь - в "отделной" обработке... ну, вам-то, может, и проще стало )). А я разницы не особо вижу )
В результате глюков меньше, толку больше.
Вот это точно не следствие "отдельных обработок".
(89) bainov,
Предполагаю что в какой нибудь 1С9 добавят ООП
Нет, не добавят. Потому что ООП - это крест на поддерживаемой ныне и бесконечно парадигме 1С "пропритетарности платформы", как они это понимают.
91. bainov 52 04.03.15 21:16 Сейчас в теме
(90) AlexO, Соглашусь с вами, что основным недостатком данной реализации является то, что нельзя сделать наследование более одного уровня.
Но, несмотря на это, все таки мне лично применение этого решения очень облегчает жизнь. Например, интерфейс с отрисовкой кнопок раньше я бы делал несколько дней.
А тут я успел переделать его несколько раз за день всего.
Прикрепленные файлы:
93. AlexO 135 05.03.15 14:26 Сейчас в теме
(91) bainov,
А тут я успел переделать его несколько раз за день всего.
Видимо, потому что вы уже заранее разобрались с механизмом формирования интерфейса по задаче "ООП в 1с"? :)
Не вижу возможности увеличения производительности при замене редактирования функций - редактированием функций в отдельных обработках.
(92) bainov,
А чем интересно ООП мешает "проприетарности платформы"?
Само ООП - не мешает проприетарности. Как мы это понимаем.
ООП мешает "проприетарности" в понимании 1С.
92. bainov 52 04.03.15 21:23 Сейчас в теме
(90) AlexO,
Нет, не добавят. Потому что ООП - это крест на поддерживаемой ныне и бесконечно парадигме 1С "пропритетарности платформы", как они это понимают.

А чем интересно ООП мешает "проприетарности платформы"?
89. bainov 52 04.03.15 14:04 Сейчас в теме
(87) AlexO, Предполагаю что в какой нибудь 1С9 добавят ООП - и все, в том числе и Вы, только и будут классы новые вовсю создавать.
И говорить потом - почему это вы отошли от принципов ООП? Сделали все обработками!
:)
84. CheBurator 3119 02.03.15 02:30 Сейчас в теме
Главное наверное - скорость работы решения, а не объем кода и его следование каким-то мегапринципам.
а то вот смотрю я на нашего восьмерочника и бп3 в таксях - две строки в документе и проводится документ секунд пять...
тоже на наверное на ооп все отрисовано..
85. AlexO 135 02.03.15 09:53 Сейчас в теме
(84) CheBurator,
Главное наверное - скорость работы решения, а не объем кода и его следование каким-то мегапринципам.
Здесь еще на первое место выходит - наличие и работоспособность длл-ки. Как основа.
тоже на наверное на ооп все отрисовано..
Нет, это 8.3 так работает.... Говорят, быстрее в десять раз, чем когда она только вышла. И радуются, радуются...
86. artbear 1448 02.03.15 16:19 Сейчас в теме
(84) ОФФ. главное, чтобы всех все устраивало - и бизнес, и разработчики, и конечных пользователей, и администраторов.
для этого и придумываются всякие методики, оптимизации и т.п.
Оставьте свое сообщение