AndreyM писал(а) 03. Июня 2008 :: 10:56:2. По-моему, не указывая контекст, класс получается намного "юзабилити": не нужно делать того, что является внутренним механизмом самого класса. Согласись, что код (примерно как я делаю сейчас)
Класс = СоздатьОбъект("КлассОбработкиРеквизитаФормы");
Класс.ОбрабатываемыйРеквизит = "НомерДок";
Намного читабельнее и понятней, чем
Класс = СоздатьОбъект("КлассОбработкиРеквизитаФормы");
Класс.УстановитьКонтекст(Контекст);
Класс.ОбрабатываемыйРеквизит = "НомерДок";
Класс.Лево=300; Класс.Верх=30; Класс.Ширина=100; Класс.Высота=22;
Класс.Формула="ИзмНомерДок()";
Класс.Цвет=0;
и т.д. и т.п.
Почему делается упор, что Контекст нужно передавать, а указывать различные параметры для работы класса - нет?
И что значит: "
вносит элементы неявного поведения в классы" Это связано с реализацией самой компоненты 1CPP?
Ведь во всех языках программирования можно получить указатель на вызывающий объект. Чем компонента 1С++ не язык программирования в среде1С?
1. Приведи пример подобного языка, который позволяет получить подобный указатель без явного указания? Вот я лично не припомню подобного.
С++, Паскаль, Ада, Модула - точно нет.
2. Лучше писать так
Класс = СоздатьОбъект("КлассОбработкиРеквизитаФормы");
Класс.УстановитьКонтекст(КонтекстНужнойФормы, ДругиеПараметры);
а уж внутри этого метода пиши, что и как хочешь.
Почему неявное поведение?
Объясню вкратце, более подробно иди в поиск по форуму.
Представь, тебе нужно объект класса использовать в другом контексте, например, форма другого документа. Ты, как обычно, тупо копируешь код создания объекта, не меняя класса, а в итоге класс может начать работать неверно, потому что он не знает, что его окружение изменилось.
Далее - этот метод в 1С++ возвращает контекст только того объекта, в котором объект создан, а не того, в котором выполняется его очередной метод.
Вообще это вопрос религии и идеалогии разработки.
Мы эту тему обсуждали не один раз, и в итоге пришли к подобному мнению.
Опытные разработчики, не раз сломавшие копья на подобных неявных методах, отказались от его использования. Я сам также перестал его юзать, и другим категорически не советую.