Композиция: обращение вверх по иерархии
Всем привет.
Вот здесь Wolsh вкратце описал принципы видимости свойств и методов. Однако, некоторые практические следствия из этого мне неочевидны. Рассмотрим на примере. Есть два класса ClassA (он же документ-класс), и ClassB. ClassA содержит в себе экземпляр ClassB, то есть получаем простейший пример композиции. ClassA.as: Код AS3:
Код AS3:
Цитата:
1. Обратиться из конструктора ClassB к свойству classA_sv1 (или методу classA_get()) класса ClassA. 2. Обратиться из конструктора ClassB к самому экземпляру ClassA. 1. По первой задаче, я пробовал в конструкторе ClassB вот такие строки: Код AS3:
2. По второй задаче, у меня что-то даже нет идей. Имя экземпляра документ-класса мы не знаем... Вероятно, нужны какие-то специальные приемы, типа оператора super(). |
Цитата:
Если же сильно приспичило обратиться к Документ-классу, и никакой нормальной архитектуры в голову не приходит, можете смело пользоваться ссылкой root из любого ДисплейОбжекта. |
Хм, оказывается здесь я допустил концептуальную ошибку, занятно.
Благодарю также за подсказку насчет .root, поэкспериментируем, тем более что "грамотная архитектура" наверное означает знание Program Patterns. Но на данный момент это не мой уровень, хотя некоторое самое общее представление о каждом у меня есть. Кстати, интересный вопрос: какой паттерн обычно получается у нубов (или хотя бы ближе всего по структуре), только начинающих юзать композиции и наследования? Или у тех кто пишет чисто в Main. Наверное все-таки Singleton. Добавлю, что пример в этом посте взят не с потолка, а с одной моей тестовой разработки, где кнопка внутри главного дисплейного контейнера должна "очистить стэйдж", то есть грубо говоря, удалить этот контейнер, в котором находится и она, и другие чилдрены. В таком случае не понятно как можно повесить обработчик на кнопку так, чтобы можно было удалить его вместе со всем содержимым, включая и эту кнопку. |
Код AS3:
|
Цитата:
Почему она в данном контексте связывает, ведь она не чего не знает о родителе. И как тогда делать? Ловить в MainView клик от кнопки и обрабатывать как родителю хочется? |
Цитата:
Цитата:
UDP: Сможете ли вы это кнопку использовать в какой-то другой программе? Нет, потому что она завязана с другим классом, может быть и косвенно. Кнопка должна выполнять функции кнопки, не более того. По крайней мере тут. |
Цитата:
Если родителю нужно, он подписывается на события от ребенка. Таким образом ребенок может сказать "Папа, меня Вася побил!" и папа примет решение на основании своих соображений. Создавать ситуацию, когда ребенок требует "Папа.убей(Васю)" нарушает самые примитивные представления об иерархии. Всегда родитель распоряжается ребенком, никогда наоборот. Родитель создал ребенка для решения каких-то своих задач, ребенок не должен знать ни этих задач ни своего родителя. Должен просто хорошо делать свою работу, а родитель должен предоставить ему все необходимое для этой работы при создании или, по крайней мере, до того как требовать результат. Добавлено через 6 минут Кнопка не может содержать в себе код, делающий что-то не с кнопкой или ее детьми. Никогда. "Кнопка" это то, что нажимается, а не то, что удаляет все объекты со стейджа. Все, что должна уметь кнопка — нажиматься. Такую кнопку можно использовать в любом проекте, потому что она просто делает СВОЮ работу. Разносить логику, касающуюся всех, по всем мелким детишкам проекта еще хуже, чем писать код в отдельных кадрах мувиклипов. |
А для чего новое событие изобретать?
|
Цитата:
|
В MainView подписывайтесь на MOUSE_DOWN. Из кнопки убирите обработчик.
|
Часовой пояс GMT +4, время: 09:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.