![]() |
|
||||||||||
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Wolsh дело толкает.
Я с ним.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Забудем про нативное API
public interface IInventory { function addItem(item:Item):void function removeItem(item:Item):void; function get items():Array; } ... public function onAddItemButtonPress(event:Event) { var item:Item = new Item(); inventory.add(item); } Где эта тонкая грань между "вызовом у" и "действием над"? А так? Мы "над", теперь уже итемом, издеваемся, или "у" итема что-то вызываем? Последний раз редактировалось expl; 20.11.2011 в 23:10. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я уже потерял нить Вашего непонимания, поэтому просто отвечу как бы не чувствуя подвоха:
1. Здесь над экземпляром item производится действие addItem(item:Item). В то же время у экземпляра IInventory вызывается метод addItem(item:Item). 2. Здесь у экземпляра Item вызываются сеттеры set damage() и set defence(). Ну или меняются публичные свойства, я не в курсе. Перечитав несколько страниц раньше, заметил таки нить. Вы слишком буквально поняли мои слова о том что требуется передавать Класс, если действие "над". Естественно, все зависит от вашей реализации, но кончится процесс тем, что Вы будете вызывать нативные методы у intrinsic-классов вроде ДОК. Тема была про addChild. В какие бы обертки, принимающие интерфейсы, вы его ни заворачивали, в конце махинаций будет написано DOC#addChild() и принимать он будет DO, хоть из кожи лезь. Мои слова не значили, что в любой метод надо передавать классы. Это зависит от того, что с аргументами будет происходить в методе. Если у аргумента-экземпляра будут вызываться методы, то предпочтительней интерфейс. Если же над этим экземпляром будут производиться действия, ни Класс, ни Интерфейс в этом процессе вообще не играют никакой роли. Важно только то, какого типа аргумент нужен этим действиям. Если это draw в битмапдату, то и карты в руки, передавайте интерфейс. Так вот у автора этим действиям (addChild) нужен Класс ДО. Необходим. Почему передается нечто, что заведомо не "является" (с точки зрения компилятора) ДО, мне абсолютно непонятно. Правильно построенное наследование решило бы эту проблему одним махом. Если не получается наследовать компоненты от одного класса, то есть альтернатива наследованию – композиция. Не интерфейс! Интерфейс вовсе не заменяет наследование, это вещи параллельные. Задача интерфейса максимизировать инкапсуляцию, "сократив" тип данных до одного-двух методов и сделав все остальные методы и вообще все переменные экземпляра полностью недоступными. Интерфейс никогда ничего не "расширяет", он не способен ничего добавить экземпляру. Интерфейс "сокращает" экземпляр до необходимого в данной ситуации минимума. Это не матрешка, в которой лежит еще что-то и еще что-то. Это.. левый глаз последней, неоткрываемой, матрешки. Интерфейс говорит только о том, что У всех его экземпляров независимо от класса ЕСТЬ такой-то метод. Если Вам нужно вызвать этот метод, то вот он здесь Интерфейс. Но если Вы хотите добавить экземпляр в дисплейлист, то извините. Метод добавления работает только с типом ДО, реализованным в самом плеере. Никакие способности компонента его не интересуют.
__________________
Reality.getBounds(this); |
|
|||||
|
Да и не было подвоха.
Насколько понял, если не брать это пример с get displayObject() в интерфейсе, я пишу код точто таким же макаром как и ты, только описываю другими словами. а get displayObject() тебе претит использовать из-за нарушения инкапсуляции (по-моему несущественного). Напоследок, как бы выглядело API, если бы был интерфейс IDisplayObject: - DisplayObject реализует IDisplayObject - DisplayObjectContainer принимает объекты IDisplayObject - Реализовывать IDisplayObject может только наследник DisplayObject (иначе исключение или ошибка компилятора - не важно) На первый взгляд смысл интерфейса теряется, но это не так, даже с этим ограничением гибкость увеличивается. Например мы можем сказать, что менеджер принимает интерфейс IManageredDisplayObject extends IDisplayObject Тогда мы можем реализовать через разные наследники DisplayObject, где-то удобнее это сделать, отнаследовавшись от TextField, а где-то - от Shape. Ну и да, можно добавлять на сцену IManageredDisplayObject без приведения типов. |
|
|||||
|
Если бы да кабы, что ж тогда никто не голосует на джире?
http://bugs.adobe.com/jira/browse/FP-5164 (нужна регистрация)
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
И это всё потому что написать as DisplayObject не круто? Атас.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Как раз это меня не волнует. Просто изредка доставляется мелкие неудобства. Причем даже самим адобовцам, вон во флексе IFlexDisplayObject накатали.
![]()
__________________
משיח לא בא משיח גם לא מטלפן |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|