Показать сообщение отдельно
Старый 12.08.2011, 12:04
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Во-первых, это обычная логика, что и заложено собственно в ООП. Данная схема ее переворачивает. По логике вещей, предназначение детей знает тот, кто их народил. Он создавал эти экземпляры с известной ему целью. Само слово "родитель" не обязано означать контейнер, в котором непосредственно лежит экземпляр. Родитель это тот, кто его инициализировал и "бросил на поле боя". Поэтому именно у него права управления, у него логика. Логика будет чудовищной, если ее не распределить правильно. Никто же не заставляет вас описывать в Мейне смену стейтов каждой кнопки при наведении мыши. Надо правильно провести абстракцию, чтобы каждый занимался своим делом и знал его хорошо. Брал на себя ровно столько, сколько может сделать сам, обеспечивал свой жизненный цикл и управлял своими составляющими. Здесь невозможно делать наполовину правильно или на 75% логично. Надо стремиться к четкой иерархии. Если вы добавляете в класс ссылку на родителя, это «сильная связность». То есть вы не сможете использовать этот класс отдельно в другом проекте. Этот класс получил недостаточную абстракцию, он не самодостаточен, не может жить и работать отдельно от класса родителя установленного образца. Дети начинают требовать наличия определенных свойств у родителей, что противоречит всякой логике.
Конкретно о цепочке. Предположим, что она хороша. Тогда давайте использовать ее везде. Что мы получим? Всякие сеттеры типа width, height, rotation теряют свой смысл, ведь это некошерный прямой доступ к свойствам ребенка, больше он нам не нужен, у нас есть отличная система событий! Давайте подпишем ребенка на События от родителя - Event.SET_WIDTH, Event.SET_HEIGHT. Маразм? Но это ровно то, что вы предлагаете.
Код AS3:
this.addEventListener(Event.SET_WIDTH, child.newWidthHandler);
Родитель знает своих детей, он их создал в своем теле. Дети не знают своих родителей (parent не в счет, это ссылка на контейнер, а не на родителя). AS3 устроен изначально по концепциям ООП. Родители знают свойства и методы своих детей, они импортировали их классы)). Они могут вызывать нужные методы напрямую, child.width = 5, без всех этих странных цепочек с созданием и распространением Событий. Дети же – наоборот, не знают кто их создал и кто ими управляет, это дает свободу создавать эти экземпляры в разных проектах разными родителями, использовать классы повторно, расширяя при необходимости, безо всякой сильной связности с родителем. Родитель не должен обладать какими-то особыми публичными методами для работы с этими экземплярами. Он может быть таким, как нужно данному проекту. Ваше решение использовать данный модуль в своем приложении не требует от вас переделки всего приложения ради этого модуля из-за того, что он требует от классов выше каких-то особых точек доступа, за которые он собирается их дергать, вмешиваясь в их работу. Такой модуль должен только информировать вышестоящих, но никак не управлять ими. Вышестоящие решат, что делать или не делать с этой информацией. Это и есть иерархия. Это – правильная и логичная цепочка связи.
__________________
Reality.getBounds(this);