Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Выдается ошибка, если protected доступ к функции, при реализации интерфейса (http://www.flasher.ru/forum/showthread.php?t=197552)

Wolsh 09.04.2013 15:12

Цитата:

и там постоянно приводились примеры описывающие вышеприведенную ( в данном посте) взаимосвязь.
Какую? Памятка для программиста? Что-то я сомневаюсь, что это можно показать примером кода)))))
Вы еще раз задумайтесь. Нельзя вызвать у объекта методы с модификаторами private и protected. Какой был бы смысл упоминать их в интерфейсе? Интерфейс это взаимодействие. Он говорит что вот у этого объекта можно вызвать такой-то метод. А если его нельзя вызвать, то его и не может быть в интерфейсе.
Как наличие или отсутствие собственных, внутренних методов может помешать "созданию системы и взаимодействию"? Эти методы — личное дело каждого, недоступное для других. Они никак не участвуют ни в каких системах и взаимодействиях.

iflamberg 09.04.2013 16:40

Для чего нужны интерфейсы? Ну, представьте, что у вас есть несколько классов, которые не наследуют друг-друга в силу очень разной их природы(или в силу того, что в as3 нет множественного наследования), но, экземпляры которых надо все таки передавать в какую-то функцию, чтобы выполнить определенное дейсвие, общее для всех них. Как передать их в эту функцию? Как Object?

Частный случай. Скажем у вас есть игрушка-платформер, на сцене объекты - частицы, персонаж игрока, управляемые компьютером монстры, анимированный огонь и т.д. Вам нужно поставить сцену на паузу. Для этого вы создаете интерфейс
Код AS3:

package engine {
        public interface IPauseable {
                function pause ():void;
                function unpause ():void;
        }
}

И реализуете его во всех своих частицах, анимированных объектах и т.д. Для разных объектов он работает по разному. Для персонажа пауза отписывает его от клавиатуры(это кривая архитектура, просто для примера), для лифтов - отписывает от enterFrame, для анимированных задников делает .stop(), для какого-то другого объекта - останавливает таймеры и запоминает их значения. Но все этим объекты теперь ставятся на паузу одним циклом:
Код AS3:

var l:int = scene.numChildren;
while (l--){
  var cur:Sprite = scene.getChildAt(l);
  if (cur is IPausable) IPausable(cur).pause();
}


Alexmody 09.04.2013 18:04

Wolsh
Нет, книги типа Action Script 3: подробное руководство и пр.

iflamberg
Да, таким образом я и использую интерфейсы, т.е. объединяю едиными функциями различные объекты для конкретного функционала.
Кстати, тот же ваш пример, если заменить интерфейс базовым классом, получается почти то же самое...?
С другой стороны, если использовать больше композицию (без или с минимум наследования), тогда да интерфейсы приобретают большую значимость.

caseyryan 09.04.2013 18:10

Цитата:

Кстати, тот же ваш пример, если заменить интерфейс базовым классом, получается почти то же самое...?
Не всегда можно использовать один базовый класс для разных классов.

Wolsh 09.04.2013 18:19

Ладно, я окончательно потерял нить диалога (я Вам про одно, Вы мне о чем-то вообще своем отвечаете.. или это вопрос, нет ли у меня книги Мука? Есть).
Цитата:

Кстати, тот же ваш пример, если заменить интерфейс базовым классом, получается почти то же самое...?
Попробуйте написать "базовый" класс и унаследовать от него классы, расширяющие ТекстФилд, Спрайт и Битмап. Если получится, то — да, то же самое.
Цитата:

если использовать больше композицию (без или с минимум наследования), тогда да интерфейсы приобретают большую значимость.
Естественно, ведь интерфейсы не имеют никакого отношения к классам и наследованию. Они описывают только публичные методы только экземпляров.

Alexmody 09.04.2013 18:56

Wolsh

>>Попробуйте написать "базовый" класс и унаследовать от него классы, расширяющие ТекстФилд, Спрайт и Битмап. Если получится, то — да, то же самое.

Если взять в контексте С++, где есть множественное наследование, и особо не прибегать к композиции, то тогда какова в данном случае значимость и функционал интерфейсов? Если не ошибаюсь в С++ нет интерфейсов, вероятно потому что есть множественное наследование...

Ниже, вы конечно ответили частично на этот вопрос но все же:
>>Естественно, ведь интерфейсы не имеют никакого отношения к классам и наследованию. Они описывают только публичные методы только экземпляров.[/quote]

caseyryan 09.04.2013 19:12

Цитата:

Если взять в контексте С++, где есть множественное наследование, и особо не прибегать к композиции, то тогда какова в данном случае значимость и функционал интерфейсов? Если не ошибаюсь в С++ нет интерфейсов, вероятно потому что есть множественное наследование...
as3 не С++, и не нужно сравнивать. Да в С++ есть множественное наследование, и это не есть гуд. Конечно пути обхода придумываются, но тем не менее коллизии возникают. А что если разные классы имеют разную имплементацию одного и того же метода? Какую выбрать? Это взрыв мозга для компилятора. Поэтому интерфейсы - решение более разумное, чем множественное наследование.

iflamberg 09.04.2013 19:18

В as3 интерфейсы выполняют ту же роль, что абстрактные классы и множественное наследование в спп. Все.

Black Soviet 09.04.2013 19:30

iflamberg
Код AS3:

var l:int = scene.numChildren;
while (l--){
  var cur:Sprite = scene.getChildAt(l);
  if (cur is IPausable) IPausable(cur).pause();
}

Но эту же задачу можно реализовать и без участия интерфейса, если в каждом классе, экземпляры которого находятся на сцене, описать метод pause().

Wolsh 09.04.2013 19:38

Да? И как Вы докажете компилятору, что у этих эеземпляров действительно есть метод pause?


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

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