Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Агрегация контекстов. WTF? (число прочтений - 2870 )
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Агрегация контекстов. WTF?
02. Мая 2010 :: 19:21
Печать  
Класс1:
Код
Выбрать все
Перем Атрибут Экспорт;
Перем Класс2 Экспорт;

//*******************************************
Процедура ПриЗаписи_Атрибут(ЗначениеАтрибута)
//#error Свойство доступно только для чтения!
КонецПроцедуры

//*******************************************
Класс2 = СоздатьОбъект("Класс2"); 


Класс2:
Код
Выбрать все
Процедура Сформировать() Экспорт
	Атрибут = 0; // вроде как локальная переменная
КонецПроцедуры 


Тест:
Код
Выбрать все
Класс1 = СоздатьОбъект("Класс1");
Класс1.Класс2.Сформировать(); 


Это так задумано, что выполнение тестового кода запускает процедуру ПриЗаписи_Атрибут?  Ужас
А если её убрать, изменяет атрибут класса Класс1?


1C++ v3.0.1.27
  

test_013.zip ( 17 KB | Загрузки )

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Агрегация контекстов. WTF?
Ответ #1 - 02. Мая 2010 :: 22:25
Печать  
Неприятный эффект, привнесенный в icpp.
На моей 2.0.3.2. такового не наблюдается.
Увы, разбираться в коде Артура - это выше моих сил.
Кстати, такие проблемы - это отличная иллюстрация всего блеска и нищеты концепции TDD в целом.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Агрегация контекстов. WTF?
Ответ #2 - 03. Мая 2010 :: 06:15
Печать  
Пользуйтесь правильным способом создания данных класса: все данные должны создаваться в конструкторе.
Если код создания Класс2 поместить в конструктор, проблема исчезает. Лично я сразу обратил внимание на нетипичное создание данных класса, поэтому легко удалось найти способ решения проблемы.

ИМХО проблема в каком-то тонком взаимодействии кода в теле класса, вне методов класса, с 1С.

Считаю ошибку не очень значительной. с кодом 1С в теле модулей полно проблем.

ЗЫ лучше иметь тесты, чем не иметь их вовсе.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Агрегация контекстов. WTF?
Ответ #3 - 03. Мая 2010 :: 07:09
Печать  
artbear

А как ты объясняешь тот факт, что в 2.0.3.2 с таким кодом проблем нет?

Кроме того, как тебе нравится поведение следующего кода:

Класс1
Код
Выбрать все
Перем Атрибут;// Экспорт;
Перем Класс2 Экспорт;

//*******************************************
Процедура ПриЗаписи_Атрибут(ЗначениеАтрибута)
//#error Свойство доступно только для чтения!
КонецПроцедуры

Класс2 = СоздатьОбъект("Класс2");
 



Класс2
Код
Выбрать все
Процедура Сформировать() Экспорт
	Сообщить(Атрибут);
	Атрибут = 0;
КонецПроцедуры
 



Тест
Код
Выбрать все
Класс1 = СоздатьОбъект("Класс1");
Класс1.Класс2.Сформировать();
 



У меня - это AV в чистом виде для icpp.
Опять же, на 2.0.3.2 проблем нет - мы получаем корректное сообщение об ошибке компиляции.

Может быть наличие "проблем с кодом 1С в теле модулей" - просто результат некоторой системной ошибки в процессе разработки?
  

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Агрегация контекстов. WTF?
Ответ #4 - 03. Мая 2010 :: 07:35
Печать  
artbear писал(а) 03. Мая 2010 :: 06:15:
Пользуйтесь правильным способом создания данных класса: все данные должны создаваться в конструкторе.

Хотя бы задокументируй этот "правильный" способ.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Агрегация контекстов. WTF?
Ответ #5 - 04. Мая 2010 :: 15:16
Печать  
kms писал(а) 02. Мая 2010 :: 22:25:
Кстати, такие проблемы - это отличная иллюстрация всего блеска и нищеты концепции TDD в целом.

Чем тебе концепция не угодила? Давай не будем холивар тут разводить, ага?
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Агрегация контекстов. WTF?
Ответ #6 - 04. Мая 2010 :: 19:25
Печать  
fez писал(а) 04. Мая 2010 :: 15:16:
kms писал(а) 02. Мая 2010 :: 22:25:
Кстати, такие проблемы - это отличная иллюстрация всего блеска и нищеты концепции TDD в целом.

Чем тебе концепция не угодила? Давай не будем холивар тут разводить, ага?

Давай не будем задавать вопросы, на которые нам не нужны ответы, угу?
  

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: Агрегация контекстов. WTF?
Ответ #7 - 05. Мая 2010 :: 10:43
Печать  
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать