Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Динамические атрибуты. Кто нибудь юзал? (число прочтений - 10349 )
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #15 - 25. Мая 2007 :: 13:22
Печать  
Цитата:
Цитата:
Класс отработает только последние, а первые у меня не захотел (пока я не закоментировал вторые )
Я об этом и талдычу:" После добавления в модуль методов _ПриЗаписиСвойства и _ПриЧтенииСвойства ВСЕ переменные контекста перестают реагировать на что-либо, кроме прописанного в этих методах".

Так сделай обманку, например как в #9
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #16 - 25. Мая 2007 :: 15:04
Печать  
Цитата:
Так сделай обманку, например как в #9
Обманка-то работает. Разговор о том, чтобы все-таки была воэможность включать\отключать методы (флаг ст.обработки).
А дальше - больше. Есть класс:
Код
Выбрать все
Class НовыйКласс = НовыйКласс@MD: ТаблицаЗначений
{
};
 

Модуль класса:
Код
Выбрать все
Перем Сам;
//_____________________________________________________________________________
Функция Сам(Конт) Возврат Конт КонецФункции
//_____________________________________________________________________________
Процедура Конструктор()
	Сам = Сам(Контекст);
КонецПроцедуры //Конструктор
//_____________________________________________________________________________
Функция _ПриЧтенииСвойства(ИмяАтрибута)
	Если ИмяАтрибута = "Сам"
	Тогда
	    Возврат Сам;
	ИначеЕсли ИмяАтрибута = "НомерКолонки"
	Тогда
	    Возврат Сам.НомерКолонки;
	КонецЕсли;
КонецФункции //_ПриЧтенииСвойства
//_____________________________________________________________________________
Процедура _ПриЗаписиСвойства(ИмяАтрибута,Значение)

КонецПроцедуры //_ПриЗаписиСвойства 

И есть обработка
Код
Выбрать все
Перем ТЗ;
//*******************************************
Процедура Сформировать()
	ТЗ.НоваяКолонка();
	Сообщить(ТЗ.НомерКолонки);
КонецПроцедуры
//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная
	ТЗ = СоздатьОбъект("НовыйКласс");
КонецПроцедуры //ПриОткрытии
 

1С падает. Интересно, а здесь-то в чем дело?
  

Константин
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #17 - 25. Мая 2007 :: 15:44
Печать  
Цитата:
Предупреждение: нельзя сохранять контекст класса в его атрибуте, т.е. запрещен следующий алгоритм:

Перем Конт;
Функция GetThis(Конт) Возврат Конт; КонецФункции
...............
Конт = GetThis(Контекст);
...............

Если Вы будете использовать такое присваивание, объекты класса, созданные Вами в алгоритмах с помощью конструкции СоздатьОбъект("ИмяКлассаКОП"), никогда не уничтожатся (memory leaks), из-за циклической ссылки на объект внутри модуля реализации КОП. Это замечание также справедливо и для взаимных ссылок, когда один экземпляр класса содержит в себе ссылку на другой, и этот другой, в свою очередь, имеет ссылку на первый.
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #18 - 25. Мая 2007 :: 15:54
Печать  
Arta писал(а) 25. Мая 2007 :: 15:44:
Цитата:
Предупреждение: нельзя сохранять контекст класса в его атрибуте, т.е. запрещен следующий алгоритм:

Перем Конт;
Функция GetThis(Конт) Возврат Конт; КонецФункции
...............
Конт = GetThis(Контекст);
...............

Если Вы будете использовать такое присваивание, объекты класса, созданные Вами в алгоритмах с помощью конструкции СоздатьОбъект("ИмяКлассаКОП"), никогда не уничтожатся (memory leaks), из-за циклической ссылки на объект внутри модуля реализации КОП. Это замечание также справедливо и для взаимных ссылок, когда один экземпляр класса содержит в себе ссылку на другой, и этот другой, в свою очередь, имеет ссылку на первый.

Да, читал я это. А теперь попробуй извне получить/установить значение твоей Перем Конт. А лучше в моем примере убери из ф-ции _ПриЧтенииСвойства все "Если"
  

Константин
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #19 - 25. Мая 2007 :: 17:19
Печать  
Цитата:
Да, читал я это. А теперь попробуй извне получить/установить значение твоей Перем Конт. А лучше в моем примере убери из ф-ции _ПриЧтенииСвойства все "Если"

Да вы батенька, мазохист?
Ну нельзя переменной присваивать контекст класса. Зачем что-то пробовать дальше, если нельзя?
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #20 - 25. Мая 2007 :: 18:05
Печать  
Цитата:
Ну нельзя переменной присваивать контекст класса. Зачем что-то пробовать дальше, если нельзя?
Ну нельзя, так нельзя.
А все-таки методы _ПриЗаписиСвойства и _ПриЧтенииСвойства должны работать четко и применяться только к ДИНАМИЧЕСКИМ атрибутам без дополнительных уловок и не трогать переменные контекста. Так-же четко, как ПриПолучении_ХХХ и ПриЗаписи_ХХХ.
Тема динамических реквизитов на этом форуме еще не обсуждалась, так что время для раздумий еще есть.
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #21 - 27. Мая 2007 :: 16:53
Печать  
Думаю, тема динамических атрибутов закрывать рано, хотя это не слишком и приятно для разработчиков. Ситуация следующая: есть класс-наследник от Структуры
Код
Выбрать все
//Class Проверки = Проверки@MD: Структура
//{  
//};  
Перем Сам;
Перем Текст Экспорт;  
//
Функция Сам(Конт) Возврат Конт КонецФункции  
//
Процедура Конструктор()
	Сам   = Сам(Контекст);
	Текст = "Привет !";
КонецПроцедуры //Конструктор
//
Функция _ПриЧтенииСвойства(ИмяАтрибута)  
	Если ИмяАтрибута = "Текст"
	Тогда
		Возврат Текст;  
	КонецЕсли;    
КонецФункции //_ПриЧтенииСвойства  
//
Процедура _ПриЗаписиСвойства(ИмяАтрибута,Значение)
	Если ИмяАтрибута = "Текст"
	Тогда
		Текст = Значение;    
	КонецЕсли;    
КонецПроцедуры //_ПриЗаписиСвойства
 

Есть обработка
Код
Выбрать все
Процедура Сформировать()
	Проверки = СоздатьОбъект("Проверки");
	Проверки.Вставить("Прощание","До свидания");
	Сообщить(Проверки.Прощание);
КонецПроцедуры  
 

Прекрасно, и все работает. А если в обработке добавить свойство с именем "Текст" ?  А вот если бы методы для работы с динамическими атрибутами работали бы только с ДИНАМИЧЕСКИМИ, этого бы не произошло. К атрибуту "Текст" можно было-бы обращаться напрямую.
  

Константин
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #22 - 12. Августа 2008 :: 14:41
Печать  
Подниму тему.

Итак, сейчас, согласно history.txt, для добавления в класс динамического атрибута, это надо сделать явно, с помощью метода ДобавитьДинамическоеСвойство().
Причем вызов этого метода не рекомендуется делать на клиенте.

У меня три вопроса.
1. Какое же это тогда будет динамическое свойство, если клиенту не рекомендуется добавлять эти самые свойства?
2. В багзилле, [Bug 3606] есть сноска, что это сделано "для нормального ООП". Нельзя ли развернуть это утверждение поподробнее? Что было ненормального в предыдущей реализации и почему предложенная реализация более нормальная?
3. Зачем делать обратно несовместимые изменения в рамках minor версий?
Да еще и без возможности сначала изменить клиентский код, и только потом - версию компоненты...

P.S. Если я где-то пропустил обсуждение данного вопроса - ткните меня носом, плиз.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #23 - 12. Августа 2008 :: 14:52
Печать  
fez писал(а) 12. Августа 2008 :: 14:41:
2. В багзилле, [Bug 3606] есть сноска, что это сделано "для нормального ООП". Нельзя ли развернуть это утверждение поподробнее? Что было ненормального в предыдущей реализации и почему предложенная реализация более нормальная?

Нашел http://www.1cpp.ru/bugs/show_bug.cgi?id=3592
Задумалсо.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #24 - 12. Августа 2008 :: 14:53
Печать  
fez писал(а) 12. Августа 2008 :: 14:41:
3. Зачем делать обратно несовместимые изменения в рамках minor версий?
Да еще и без возможности сначала изменить клиентский код, и только потом - версию компоненты...
P.S. Если я где-то пропустил обсуждение данного вопроса - ткните меня носом, плиз.


Смешно. Сам же и создавал. Как теперь выяснилось, на свою голову Улыбка http://www.1cpp.ru/forum/YaBB.pl?num=1204205191/0

Но вопрос о глубоком смысле несовместимых изменений в рамках minor-версий остался.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #25 - 12. Августа 2008 :: 17:51
Печать  
fez писал(а) 12. Августа 2008 :: 14:53:
Но вопрос о глубоком смысле несовместимых изменений в рамках minor-версий остался.

Надо чаще встречаться, Федор.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #26 - 13. Августа 2008 :: 01:22
Печать  
kms писал(а) 12. Августа 2008 :: 17:51:
fez писал(а) 12. Августа 2008 :: 14:53:
Но вопрос о глубоком смысле несовместимых изменений в рамках minor-версий остался.

Надо чаще встречаться, Федор.

Я ждал примерно такой реакции. И даже уже посыпал голову пеплом. Если кто не заметил - могу сделать это еще раз.

Вопрос не в этом. Для чего вообще у нас ЧЕТЫРЕ разряда в номере версии? Чтобы как минимум один разряд вообще никогда не использовать?

Я не против обратнонесовместимых изменений. Мне просто непонятно, зачем это делать в рамках минорной версии? Чтобы пользователю, который "редко встречается", бяку подложить? Чтобы "чаще встречался"?
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #27 - 13. Августа 2008 :: 03:13
Печать  
fez писал(а) 12. Августа 2008 :: 14:41:
1. Какое же это тогда будет динамическое свойство, если клиенту не рекомендуется добавлять эти самые свойства?

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

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: Динамические атрибуты. Кто нибудь юзал?
Ответ #28 - 13. Августа 2008 :: 03:16
Печать  
kms писал(а) 12. Августа 2008 :: 17:51:
fez писал(а) 12. Августа 2008 :: 14:53:
Но вопрос о глубоком смысле несовместимых изменений в рамках minor-версий остался.

Надо чаще встречаться, Федор.

Согласен, что можно менять номер версии для подобных сильных изменений.
Но главное, чтобы была обозначена несовместимость с предыдущим кодом и пути исправления старого кода.
Что и было выполнено.
  

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


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #29 - 13. Августа 2008 :: 06:47
Печать  
artbear писал(а) 13. Августа 2008 :: 03:16:
fez писал(а) 12. Августа 2008 :: 14:53:
Но вопрос о глубоком смысле несовместимых изменений в рамках minor-версий остался.

Согласен, что можно менять номер версии для подобных сильных изменений.
Но главное, чтобы была обозначена несовместимость с предыдущим кодом и пути исправления старого кода.
Что и было выполнено.


Где она была обозначена? В хистори? Отличное место. На форуме? Еще лучше.

Считаю, что для таких изменений номер версии не можно, а нужно менять. Причем не младший номер, а как минимум второй с конца. Ибо именно для таких ситуаций оно и придумано.

Мужики, мне кажется, что подобное отношение приведет к тому, что 1с++ будут пользоваться только активные участники форума и тестеры ночных сборок. Если это именно то, что вам нужно - вы так и скажите.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать