Опрос
Опрос Тема Опроса: Динам.свойства - нужна ли совместимость со старым кодом ?
bars   pie

Нет - пусть все будет просто и удобно    
  10 (47.6%)
Да - оставляем старый код и проблемы при его использ.    
  2 (9.5%)
Мне все равно, я не использую динам.свойства    
  9 (42.9%)




Всего голосов: 21
« Создано: artbear : 18. Марта 2008 :: 07:24 »
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) Зачем нужны динамические свойства? (число прочтений - 21873 )
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #15 - 06. Марта 2008 :: 06:48
Печать  
artbear писал(а) 06. Марта 2008 :: 06:44:
Предложение - переделать/доработать всю схему работы с динамическими свойствами для обеспечения нормального ООП.

ИМХО можно добавить к КОП два зарезервированных метода
ДобавитьДинамическоеСвойство(Имя) - нужен 100%,
УдалитьДинамическиеСвойства ( или УдалитьДинамическоеСвойство(Имя) )
- хотя я также не могу представить, зачем свойства нужно удалять Печаль

Также оставляем у КОП методы _ПриЗаписиСвойства, _ПриЧтенииСвойства или можно их доп. переименовать в _ПриЗаписиДинамическогоСвойства, _ПриЧтенииДинамическогоСвойства

В этом случае вроде бы без проблем получается решить все проблемы с ООП.


+1
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #16 - 17. Марта 2008 :: 18:02
Печать  
artbear писал(а) 06. Марта 2008 :: 06:44:
Предложение - переделать/доработать всю схему работы с динамическими свойствами для обеспечения нормального ООП.

ИМХО можно добавить к КОП зарезервированные метод
ДобавитьДинамическоеСвойство(ИмяСвойства).

Также оставляем у КОП методы _ПриЗаписиСвойства, _ПриЧтенииСвойства или можно их доп. переименовать в _ПриЗаписиДинамическогоСвойства, _ПриЧтенииДинамическогоСвойства

В этом случае вроде бы без проблем получается решить все проблемы с ООП.

Народ, вроде все получилось Улыбка
Я реализовал вышеуказанную схему, теперь нормально можно работать как с обычными, так и с динамическими свойствам, как базовым классам, так и классам-наследникам.
Мои тесты это подтверждают.

Завтра буду заливать тесты 1С++ и код С++
Т.е. завтра в ночной сборке еще ничего нет.

Прошу дополнительно подумать, что я упустил

Удалять динам.свойства ИМХО не нужно, будет только большая путаница.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #17 - 18. Марта 2008 :: 05:11
Печать  
Обратная  совместимость есть?
Старые классы с динамическими свойствами переделывать не придется?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #18 - 18. Марта 2008 :: 05:14
Печать  
Есть только одна небольшая проблема Улыбка
Предположим, есть иерархия - Наследник-Предок, оба класса реализуют/используют динамические свойства.

В этом случае, если написать в произвольном коде
Код
Выбрать все
ОбъектНаследника.ДобавитьДинамическоеСвойство(Имя);
Сам().ДобавитьДинамическоеСвойство(Имя);
или
ОбъектБаза = ОбъектНаследника.ПолучитьБазовыйКласс("Предок");
ОбъектБаза.ДобавитьДинамическоеСвойство(Имя);
 


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


на самом деле динамическое свойство будет добавлено только к объекту класса Наследник, а не к базовому классу, и обработка добавленного имени будет происходить в классе-наследнике, а не в базовом классе.

Связано это с "питоновой" реализацией ООП в С++ Улыбка

Но, если для такой иерархии в коде класса Предок (внутри класса, а не снаружи) написано
Код
Выбрать все
Сам().ДобавитьДинамическоеСвойство(Имя); 


динамическое свойство будет добавлено именно к объекту базового класса, и обработка добавленного имени будет происходить в базовом классе, а не в его потомке.

Считаю это правильным, т.к. ИМХО динамические свойства в подавляющем большинстве случаев должен добавлять сам класс внутри своего кода, а не его клиенты.
Вышеописанная проблема актуальна только для иерархий, в которых и предок, и потомок реализуют динамические свойства. Для всех остальных вариантов нет разницы, из какого кода вызывается метод ДобавитьДинамическоеСвойство.

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #19 - 18. Марта 2008 :: 05:46
Печать  
Это всё хорошо. А совместимость?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #20 - 18. Марта 2008 :: 06:28
Печать  
Nick писал(а) 18. Марта 2008 :: 05:46:
Это всё хорошо. А совместимость?

Совместимость на 99% Улыбка - т.к. методы для чтения/записи не меняются, а остальные методы для динам.свойств (типа _ПолучитьКолвоДСвойств и _ПолучитьИмяДСвойства) все равно не использовались, т.к. неверно работали Улыбка
Т.е. сейчас в существующие классы с динамическими свойствами нужно явно добавить динамические свойства, например, в конструкторе.
Оставшийся 1% я отвожу на код удаления динамических свойств, считаю, что этого быть не должно.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #21 - 18. Марта 2008 :: 06:32
Печать  
artbear писал(а) 18. Марта 2008 :: 06:28:
а остальные методы для динам.свойств (типа _ПолучитьКолвоДСвойств и _ПолучитьИмяДСвойства) все равно не использовались, т.к. неверно работали Улыбка

Код
Выбрать все
//_____________________________________________________________________________
//
Функция _ПолучитьКолвоДСвойств()
	// для отладчика: позволяет видеть динамические свойства
	//
	Возврат Сам().КоличествоКолонок();
КонецФункции // _ПолучитьКолвоДСвойств()

//_____________________________________________________________________________
//
Функция _ПолучитьИмяДСвойства(Знач чНомер)
	// для отладчика: позволяет видеть динамические свойства
	//
	Попытка
		Возврат ч_ВиртТаблица.ПолучитьПараметрыКолонки(чНомер + ч_СлужКолонок); // вначале идут служебные
	Исключение
	КонецПопытки;

	Возврат "";
КонецФункции // _ПолучитьИмяДСвойства()
 


Вот нашел у себя - видать я неудачнег.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #22 - 18. Марта 2008 :: 06:36
Печать  
spock писал(а) 18. Марта 2008 :: 06:32:
Вот нашел у себя - видать я неудачнег.
Код
Выбрать все
Функция _ПолучитьКолвоДСвойств()
	// для отладчика: позволяет видеть динамические свойства

Функция _ПолучитьИмяДСвойства(Знач чНомер)
	// для отладчика: позволяет видеть динамические свойства
 



Кирилл, сейчас этот методы не нужны, в отладчике и так все будет ок, проверено Улыбка
Их наличие/отсутствие в коде класса никак не влияет сейчас, они просто не используются и не вызываются Улыбка
Т.е. их можешь просто оставить.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #23 - 18. Марта 2008 :: 06:37
Печать  
artbear писал(а) 18. Марта 2008 :: 06:28:
Nick писал(а) 18. Марта 2008 :: 05:46:
Это всё хорошо. А совместимость?

Совместимость на 99% Улыбка - т.к. методы для чтения/записи не меняются, а остальные методы для динам.свойств (типа _ПолучитьКолвоДСвойств и _ПолучитьИмяДСвойства) все равно не использовались, т.к. неверно работали Улыбка
Т.е. сейчас в существующие классы с динамическими свойствами нужно явно добавить динамические свойства, например, в конструкторе.
Оставшийся 1% я отвожу на код удаления динамических свойств, считаю, что этого быть не должно.

т.е. классы придется править
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #24 - 18. Марта 2008 :: 06:38
Печать  
artbear писал(а) 18. Марта 2008 :: 06:36:
Т.е. их можешь просто оставить.

замечательно.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #25 - 18. Марта 2008 :: 06:47
Печать  
Nick писал(а) 18. Марта 2008 :: 06:37:
artbear писал(а) 18. Марта 2008 :: 06:28:
Т.е. сейчас в существующие классы с динамическими свойствами нужно явно добавить динамические свойства, например, в конструкторе.

т.е. классы придется править

Еще раз
Т.е. сейчас в существующие классы с динамическими свойствами нужно явно добавить динамические свойства, например, в конструкторе.
Т.е. либо меняем класс, либо его клиентов - предпочтительнее класс Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #26 - 18. Марта 2008 :: 07:06
Печать  
Если классы править не хотим и для совместимости, можно принять решение, что доступ к чтению/записи будут контролировать новые методы КОП _ПриЧтенииДинамическогоСвойства и _ПриЗаписиДинамическогоСвойства.
А старый код оставляем для совместимости - правда, с ним столько глюков Печаль Печаль
Тогда старые классы править не придется
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #27 - 18. Марта 2008 :: 07:15
Печать  
artbear писал(а) 18. Марта 2008 :: 07:06:
Если классы править не хотим и для совместимости, можно принять решение, что доступ к чтению/записи будут контролировать новые методы КОП _ПриЧтенииДинамическогоСвойства и _ПриЗаписиДинамическогоСвойства.
А старый код оставляем для совместимости - правда, с ним столько глюков Печаль Печаль
Тогда старые классы править не придется

Может сделать опрос?
Мне в принципе не слишком принципиально, т.к. таких классов не много
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #28 - 18. Марта 2008 :: 07:20
Печать  
Nick писал(а) 18. Марта 2008 :: 07:15:
Может сделать опрос?
Мне в принципе не слишком принципиально, т.к. таких классов не много

Т.к. сейчас текущая реализация динамических свойств сделана очень неудобно и довольно коряво, с подобным классом очень сложно работать Печаль, я считаю, что опрос не нужен.
Думаю, что классов c динамическими свойствами у всех немного Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #29 - 18. Марта 2008 :: 07:29
Печать  
Все-таки добавил опрос, т.к. мнение пользователей 1С++ интересно.
Прошу голосовать
Я проголосовал нет, совместимость не нужна.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5
ОтправитьПечать