Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2011, 01:08
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 31  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от i.o. Посмотреть сообщение
JackFromChaos, зачем писать точно такой же код, если он уже написан в посте номер 21?
Сорри... А слона то я и не заметил
__________________
Искренне Ваш, Джек.

Старый 16.01.2011, 01:12
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 32  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
у вас существенное упущение - не хватает this'а. Должно быть так:
Код AS3:
_eventDispatcher = new EventDispatcher( this );
если хотите, чтобы target в событиях ссылался куда нужно, а не на _eventDispatcher

Старый 16.01.2011, 01:14
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 33  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от i.o. Посмотреть сообщение
у вас существенное упущение - не хватает this'а. Должно быть так:
Код AS3:
_eventDispatcher = new EventDispatcher( this );
если хотите, чтобы target в событиях ссылался куда нужно, а не на _eventDispatcher
Спасибо, буду знать. Может пригодится... я вообще делал приписку, о том, что не уверен, что все будет правильно, именно о чем то таком подозревал Никогда не делал свой EventDispacher, примером просто хотел продемонстрировать принцип композиции, а не реальную задачу... Ну в общем вы поняли
__________________
Искренне Ваш, Джек.

Старый 16.01.2011, 02:22
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 34  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Конечно понял, просто сразу прояснил ситуацию

Старый 17.01.2011, 00:57
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 35  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Хорошо. Объясняю откуда взялась такая приверженность к множественному наследованию.

Пусть у нас есть большой проект (нам всё равно, какую иерархию он имеет, но он ОЧЕНЬ большой). В определённый момент возникает необходимость сделать графический трасировщик (box2d в тестовом режиме). При этом хочется, чтобы трасировщик оставался в парадигме дисплейных списков (иерархичность тестового отображения, родительские отображения передаются в детей, а главный класс иерархии передаёт всё дерево на сцену).

Выход...

Создаём класс (если бы делал на С++, объявил его виртуальным) с функцией
Код AS3:
graphTrace(parentSprite:Sprite):void
и конструктором, который создаёт этот спрайт (или делает super(), если было наследование ). Все объекты иерархии дополнительно к уже существующим наследованиям и реализациям хотим наследовать от трасировщика, реализуя функцию в каждом по-своему - рисуем в своём тестовом спрайте и передаём его в родительский список тестовых отображений...

Но тут оказывается, что множественного наследования нет! Не выйдет передавать базовый трасировщик как папу-класс. Как папу-интерфейс – можно, но что тогда делать со спрайтом? В интерфейс-то переменные совать нельзя!.. Тащить его по всей структуре, совать в наследников? Засорять private-секцию всех объектов системы?

Ладно, свойство одно, а если их пять? Если десять? Тоже везде заново писать в код наследников?

Ладно, такой класс один!.. А если много?

Например, у нас, в нагрузку ко всему прочему, есть класс, описывающий стандартный объект иерархии. Какой-нибудь CHierarchical? У него есть поле parent. Можно тоже обойтись без класса, но при этом поле снова-таки попадает в наследников… Дурная, надо сказать, наследственность.

Короче, я красивого выхода из подобной ситуации не вижу. Может кто-то подскажет?

Добавлено через 23 минуты
Так. Попробовал реализовать.

Не учёл, что описать вынесенные в наследника свойства надо будет только один раз, потом они будут переходить к наследникам, если описать его как protected. Будет легче, чем думал, но тоже не мёд, если честно.

Но я уже не уверен, что был сто процентов прав...

Добавлено через 1 час 4 минуты
Всё. Переделал... Однако, код мне начинает нравиться, он стал более управляемым!

Но тут как в игре в пинг-понг - повышаешь управляемость, но теряешь в скорости игры. Код стал более громоздким и в нём стали весомее комментарии.

В общем, так как-то:

Код AS1/AS2:
public class Child implements Interface_1, … , Interface_N
	{
		// БЛОК ОПИСАНИЯ НАСЛЕДУЕМЫХ СВОЙСТВ
 
		// эмуляция блока свойств Interface_1// эмуляция блока свойств Interface_N
 
		// БЛОК ОПИСАНИЯ СВОЙСТВ И МЕТОДОВ Child
 
		// свойства Child
 
		public function Child(/*ПАРАМЕТРЫ КОНСТРУКТОРА Child */)
		{
			// ЭМУЛЯЦИЯ КОСТРУКТОРОВ СВОЙСТВ
 
			// эмуляция конструктора Interface_1// эмуляция конструктора Interface_N
 
			// КОНСТРУКТОР Child
 
			// здесь творятся свойства Child
		}
 
 
		// РЕАЛИЗАЦИЯ МЕТОДОВ Child
		. . .
 
 
		// РЕАЛИЗАЦИЯ МЕТОДОВ Interface_1
		. . .
		// РЕАЛИЗАЦИЯ МЕТОДОВ Interface_N
	}


Последний раз редактировалось semenyakinVS; 17.01.2011 в 02:03. Причина: Поправил механические ошибки, структурировал код... И ещё раз структурировал
Старый 17.01.2011, 14:02
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 36  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Это вы сейчас кому разговариваете слова? Вы поняли зачем нужны интерфейсы?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.01.2011, 14:46
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 37  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Вот в Вашем примере это решается одним интерфейсом, ITraceable.

Старый 17.01.2011, 15:04
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 38  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Цитата:
Сообщение от dimarik Посмотреть сообщение
Это вы сейчас кому разговариваете слова? Вы поняли зачем нужны интерфейсы?
Нет. Я понял как очень извращённо можно с помощью них эмулировать множественное наследование.

Те комментарии, которые описаны у меня ДОЛЖНЫ БЫТЬ в коде, они должны предварять код, который описывают. Иначе код станет нечитабельным и вообще ужасным. Использование такого подхода - акт отчаяния.

Другого выхода в языках, где отсутствует множественное наследование попросту не вижу. Включение - не выход. Там, где логика базируется на наследовании, включение будет суррогатом похлеще предложенного.


Да и, кстати, описанный подход к формату будет действенным только для первого уровня иерархи. В более сложной ситуации - когда необходимы наследники от не корневых классов - он не поможет. Останется только композиция. (Могу показать картинку, не не понял как её вставлять сюда).

Добавлено через 1 минуту
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Вот в Вашем примере это решается одним интерфейсом, ITraceable.
Верно. Но вы бы видели код в ситуации, когда надо много наследников. Могу показать, если интересно.

Старый 17.01.2011, 15:30
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 39  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Верно. Но вы бы видели код в ситуации, когда надо много наследников. Могу показать, если интересно.
Это проблема не платформы и не языка, а Вашей архитектуры.

Старый 17.01.2011, 15:32
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 40  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от semenyakinVS Посмотреть сообщение
Да и, кстати, описанный подход к формату будет действенным только для первого уровня иерархи. В более сложной ситуации - когда необходимы наследники от не корневых классов - он не поможет. Останется только композиция.
Вам уже тонко намекали предпочитать композицию наследованию. Ну и первичное проектирование, когда каркас приложения обсужден и утвержден, никто не отменял. Представьте, что строители уже строят десятый этаж многоэтажки, а тут приходит архитектор и говорит, что мы тут подрефакторили немного и будем строить торговый центр с подземной парковкой.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:57.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.