Здравствуйте, samius, Вы писали:
S>Можно, но формулировка закона касается того, каким образом был получен объект, а не того, как его хранить в локальных переменных.
S>А что может запретить записывать в глобальную переменную? Она ведь вроде по умолчанию именно "переменная" и не указано что она readonly/const.
Вроде как тут должна быть полная аналогия. Если закон о том, "как получен объект" (т.е. некая политика владения), то глобальные переменные не должны давать индульгенцию на косвенный вызов методов. Если же мы принимаем, что все же закон в этой части дает послабление, то мы по идее должны признать такую же возможность и для локальных переменных.
ARK>>Так что формальное определение не то что сводит к абсурду, оно просто неполное и допускает разные трактовки.
S>А есть ли трактовка, которая объясняет чем вызов через точку вреднее явной передачи параметра?
Если явная передача идет в метод нашего же объекта, то мне такая трактовка неизвестна — разницы в этих двух случаях не вижу, по-прежнему мы завязаны на структуру другого объекта (потенциально подверженного изменениям).
S>Но все-таки закон не о том, какие объекты писать, а о том, какие методы не вызывать.
Не вызывать методы "внутреннего" объекта.
Но в таком случае получаем отсутствие абстрактных фабрик (как минимум).
Наверное нужно формальное определение политик владения. Если функция нам отдает объект "целиком", отказываясь от всех прав на него, то мы можем делать с этим объектом чего захотим. Если не отдает... то фиг знает, чего мы можем делать.
S>К сожалению раздел о LoD у того же Боба цитирует определение буквально и не раскрывает сути его работы.
Да, там все основывается на чутье и опыте. А хотелось бы больше формализма.
S>Да, Боб добавляет неразбирихи. Оказывается, что надо делать различие между объектами и структурами данных. Знать лишнее об объектах плохо, а о структурах данных — нет.
Да, есть там такое. Это не очень понятно, ведь изменение в структуре данных точно так же потребует изменений в клиентском коде.