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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.06.2005, 13:50
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 1  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
The bomb! [as2] interface'ы - давайте раставим все точки на и

предистория:
была такая тема - собственно интересует только часть про интерфейсы?

профи объясните пожалуйста тогда такое:

interFace.as
Код:
interface interFace {
   function myTest (Void):Void;
}
classA.as
Код:
class classA implements interFace {
   function myTest (Void):Void {
   }
}
test.fla
Код:
a = new classA ();

код декомпиллера:
Код:
 // [Action in Frame 1]
 a = new classA();
 
 // Action script...
 
 // [Initial MovieClip Action of sprite 1]
 #initclip
 class interFace {
     function interFace() {
     } // End of the function
 } // End of Class
 #endinitclip
 
 // Action script...
 
 // [Initial MovieClip Action of sprite 2]
 #initclip
 class classA implements interFace {
     function classA() {
     } // End of the function
     function myTest(Void) {
     } // End of the function
 } // End of Class
 #endinitclip

и при просмотре клипа деббагером в глобале есть функция interFace

Старый 28.06.2005, 16:38
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 2  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
вообщем кому интересно:

ответ Nox Noctis:

Цитата:
ответ на этот вопрос с livedocs.macromedia.com:

1. Interfaces as data types

Like a class, an interface defines a new data type. Any class that implements an interface can be considered to be of the type defined by the interface. This is useful for determining if a given object implements a given interface.

At runtime, in Flash Player 7 and later, you can cast an expression to an interface type. Unlike Java interfaces, ActionScript interfaces exist at runtime, which allows type casting. If the expression is an object that implements the interface or has a superclass that implements the interface, the object is returned. Otherwise, null is returned. This is useful if you want to make sure that a particular object implements a certain interface.

2. Casting objects

Casting is essentially a function call, and the function call returns null if the cast fails at runtime. If the cast succeeds, the function call returns the original object.

Старый 28.06.2005, 16:42
john вне форума Посмотреть профиль Отправить личное сообщение для john Посетить домашнюю страницу john Найти все сообщения от john
  № 3  
Ответить с цитированием
john
МЕГАФЛЭШЕР

Регистрация: May 1999
Адрес: Россия, Москва
Сообщений: 1,181
думаю изначально нужно забыть про анализ AS2 через декомпиляцию
при компиляции AS2 переводится в более простые конструкции (аля AS1), а программа декомпилятор на основе стандартного "строения" AS1 кода полученного при компиляции из AS2, создает некое свое "предположение" - как возможно, выглядел код до компиляции в AS2.

По интерфейсам. И в AS2 и в других языках, интерфейс лишь средство ООП, то есть упорядочивание структуры классов, а так же (если хорошее IDE) средство автоматизации работы программиста. Создал интерфес - редактор может автоматически создать реализацию этого интерфеса или же при добавлении implements в существующий класс - автоматическое создание методов, реализующих данный интерфес(ы).

к тому же, есть значительно отличие между использованием интерфейсов в AS2 и других языков (далее, как пример, java).
В AS2 - динамическая типизация, в java - жесткая типизация - компилятор не позволит обмануть его, подставив другой класс, не обладающим нужным типом, вызов несуществующего метода, приведет к исключетельной ситуации. К тому же, если "обмануть" компилятор - компилить "правильно", а использвать не правильно, то в момент выполнении программы будет так исключетельная ситуация.

В AS2 - принципы ООП есть лишь декларация, "хороший тон" программирования, после компиляции и проверок, программист може на все это дело "забить". И тем более глупо рыться в коде сгенеренном декомпилятором.

И самое искусственное в AS2 с точки зрения "обязательности" - это
интерфейсы.

В java интерфейсы позволяют обойти множество ограничений, одиночного
(не множественного) наследования - класс може относиться к нескольким
"группам по интерфейсам" и можно ожидать от класса необходимого
поведения. К тому же интерфейс можно указывать как тип, и в контексте конкретного класса и его реализации, не нужно будет знать о том, что некий объект, кроме того что он реализует некий интерфейс, обладает еще каким то другим функционалом.

Итак, интерфесы в AS2 -
1. хороший тон программирования. Организация классов в виде стандартных структур, с ожидаемым поведением.
2. средство автоматизации (пока не поддерживается не одним IDE, но скоро появятся). Во первых новый ASDT вероятно будет это уметь, во вторых точно уже умеет FDT.
3. Применение стандартных паттернов проектирования основанных на интерфесах.
4. Средство создания Plug-and-play фреймвороков.

остановлюсь на последнем пункте, например, есть некий класс. Например
мувиклип. Загружается swf библиотека, которая регистрирует для данного класса некий функционал. Мувиклип реализует стандартный интерфейс, который определяет возможность узнать, есть ли утилита этого класса, которая может работать по нужному интерфейсу.
Если такая имеется, то запрашивается экземпляр класса реализующий
нужный интерфейс, и производится работа не с конкретным мувиклипом, а
с данной утилитой. Здесь используется два принципа - работа с интерфейсами, и принцип композиции.
Таким образом можно подменять реализацию стандартных действий с классами, и группировать их по функционалу - как бы предполагать что они будут, но в момент написания конкретной реализации "начихать" на то что они пока не существуют в природе.
плюс, упрощение реализации, вместо того, чтобы реализовывать с десяток
интерфейсов в одном классе, создается десять классов реализующих
данные интерфейсы.

и еще о декомпиляции. Интерфейсы для того превращаются в некие пустые классы, чтобы их зарегистрировать в классе реализующие их, и потом определить с помощью instanceof, что класс экземпляр нужного типа.

Старый 28.06.2005, 17:17
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 4  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
<< тут >> еще на эту тему.


вместо instanceof можно и так: (плеер 7 и выше)
Код:
a = new Sound ();
trace (Sound (a)) // возвратит ссылку на объект, в противном случае null
всем большое спасибо

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

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

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


 


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


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