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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.11.2011, 19:24
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 21  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
expl, может развернете свою мысль? Мне высказывания Wolsh вполне понятны. А вот вашу мысль я как-то не уловил.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 20.11.2011, 19:29
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 22  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Моя мысль проста:
"IEventDispatcher есть, а IDisplayObject нет, зато можно сделать интерфейс с медодом get displayObject() : DisplayObject и это замечательно"

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
А мне это совсем понятно.
Что такое DisplayObject? Объект, который можно добавить в дисплай-лист и визуализировать средствами рендера у флеш плеера.
Любой DisplayObject это IDisplayObject. Но и любой IDisplayObject это DisplayObject. Зачем делать интерфейс? Незачем. Он лишний. Только чтобы в исключительной ситуации наследовать интерфейсы, вместо использования "as".

Старый 20.11.2011, 19:37
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 24  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Тогда уже toDisplayObject() : DisplayObject.
Насчет "замечательно" — сомнительно, т.к. дает возможность легко сломать компонент (например по незнанию или по неосторожности). Придется как в spark контейнерах перекрывать addChild / removeChild и т.д., в случаях если используются собственные методы добавления детей.
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 20.11.2011 в 20:01.
Старый 20.11.2011, 19:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 25  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так вся проблема чисто в потоке сознания. Именно в сознании программиста IComponent является DisplayObject. Программист считает этот интерфейс расширением ДО. Именно поэтому принимает IComponent и, ничуть не сомневаясь, на автомате пишет addChild(). Потому что для него компонент – несомненно ДО, и никак иначе. Это и есть суть маркера. Но компилятор не обладает такой верой, и кричит "А позвольте-ка! Что это вы мне тут подсовываете?" Ну так если Вы так уверены, что компонент всегда будет ДО, что мешает использовать кастинг? Сомневаетесь в себе – используйте более точную архитектуру.
Так что я с кем... в идеале я за минимум маркеров и приведений, но и конструкции, возвращающие аватары экземпляра мне не по душе, ибо костыль. Реально проблема кроется выше в генофонде, в косяках с построением наследования компонентов, я думаю. Надо там копать. Проектировать надо, а не писать как фишка ляжет и потом искать в написанном архитектурные решения. Надо изначально понимать, о чем вообще интерфейсы, а о чем – классы. Если над экземпляром будут совершаться действия и надо гарантировать, что над ним такие действия возможны – это не входит в круг обязанностей интерфейса. Интерфейс говорит "ЯМогуПожаритьКартошку", но никак не "МеняМожноЖаритьКакКартошку".
Впрочем, с такими методами как IComponent#addAsChildTo(this) я уже ничему не удивляюсь...
"картошка.жарься(печка)" вместо печка.пожарь(картошка).
Приятная беседа получилась
__________________
Reality.getBounds(this);

Старый 20.11.2011, 19:48
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 26  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
А мне это совсем понятно.
Что такое DisplayObject? Объект, который можно добавить в дисплай-лист и визуализировать средствами рендера у флеш плеера.
Любой DisplayObject это IDisplayObject. Но и любой IDisplayObject это DisplayObject. Зачем делать интерфейс? Незачем. Он лишний. Только чтобы в исключительной ситуации наследовать интерфейсы, вместо использования "as".
Теперь понял.
отсутсвтие интерфейса - это такая защита от попыток "имплементировать" нативные функции.

Но зачем обобщать её, и говорить что везде, где с объектом надо что-то сделать непременно нужно использовать только наследники базовых классов? Так же не получится. Если мой класс смог реализовать мой(ненативынй) интерфейс - значит его можно передать в качестве параметра.

Цитата:
Насчет "замечательно" — сомнительно, т.к. дает возможность легко сломать компонент (например по незнанию или по неосторожности). Придется как в spark контейнерах перекрывать addChild / removeChild и т.д., в случаях если используются собственные методы добавления детей.
Никто не говорил, что оно идеальное. Все как всегда зависит от конкретной ситуации.

Цитата:
Именно в сознании программиста IComponent является DisplayObject
Не хотите - не расширяйте. Просто делаем компонент - не дисплей-объект и у него поле displayObject, которое добавляем. Или отодрать displayObject от компонента? Да ну, это какой-то уожос получается.

Цитата:
Интерфейс говорит "ЯМогуПожаритьКартошку", но никак не "МеняМожноЖаритьКакКартошку"
Медитирую...
Ухожу из дискуссии, пока медитация не даст результатов (пока не особо)


Последний раз редактировалось expl; 20.11.2011 в 19:56.
Старый 20.11.2011, 19:51
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 27  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Но зачем обобщать её, и говорить что везде, где с объектом надо что-то сделать непременно нужно использовать только наследники базовых классов? Так же не получится. Если мой класс смог реализовать мой(ненативынй) интерфейс - значит его можно передать в качестве параметра.
Напиши свою замену Sprite`а, не используя его в наследовании и композиции. Не получится.

Старый 20.11.2011, 19:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 28  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
"Интерфейс определяет поведение" тоже не понимаю.
Хорошо, другими словами – интерфейс описывает методы экземпляра. Это понятно? Он никак не описывает, что по отношению к экземпляру можно сделать, например, addChild(). Мало того, сам класс ДО этого тоже не описывает. Это подразумевается на уровне контейнера, который в метод addChild принимает только ДО. И всё. Если бы addChild принимал интерфейс, о чем вы так мечтаете, то всеравно вы никак не смогли бы описать этот факт в интерфейсе, только в сигнатуре метода addChild() класса DOC – совершенно в другом месте. Интерфейс не описывает методы других объектов по отношению к данному. Вы выворачиваете порядок наизнанку, отсюда и вывернутые методы-"решения" addAsChildTo(DOC).
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 20.11.2011 в 20:08.
Старый 20.11.2011, 19:59
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 29  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Ок, мысль уловил, пытаюсь понять оличия, как бы они выглядели в коде.

Цитата:
addAsChildTo(DOC).
А про это не надо замечания делать - я ради прикола этот код привел (который про то, как компонент добавляет сам себя в контейнере).

Цитата:
Напиши свою замену Sprite`а, не используя его в наследовании и композиции. Не получится.
Причем здесь композиция?
Мы, вроде, говорили о том, что если над объектом надо что-то сделать - то надо передавать объекты с типом базового класса,
а не с типом интерфейса, об этом же речь была?

Если ограничиваться передачей только экземпляров класса, то нельзя передать экземпляры, унаследованные другими путями.



Интерфейс описывает методы, интерфейс описывает методы, ... медитация идет нормально...

2 Wolsh:
"Говори, не спрашивай" - это тоже самое что "Интерфейс говорит "ЯМогуПожаритьКартошку", но никак не "МеняМожноЖаритьКакКартошку" ", или последний принцип взят на вооружение откуда-то еще?


Последний раз редактировалось expl; 20.11.2011 в 20:23.
Старый 20.11.2011, 20:27
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 30  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Интерфейс говорит "ЯМогуПожаритьКартошку", но никак не "МеняМожноЖаритьКакКартошку"
Не согласен. Повсеместо использую IExecutable для комманд
Код AS3:
addCommand(command:IExecutable );
ну и для другого тоже.
Код AS3:
addPoint(ICoordinates)
Код AS3:
show(IModule)
ну и IBitmapdrawable - как раз "меня можно отрисовать в битмапу".
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 20.11.2011 в 20:31.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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