Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   реальное применение интерфейсов, примеры из жизни ? (http://www.flasher.ru/forum/showthread.php?t=128397)

teda 07.08.2009 02:48

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

например в книге : ActionScript 3.0 Design Patterns "William B. Sanders and Chandima Cumaranatunge"

приводится пример :

file : IVid.as
Код AS3:

package
{
  import flash.display.DisplayObject;
 
  public interface IVid
  {
    function playVid(flv:String):void;
    function get displayObject():DisplayObject;
  }
}

file : VidPlayer.as
Код AS3:

package
{
      import flash.net.NetConnection;
      import flash.net.NetStream;
      import flash.media.Video;
      import flash.display.Sprite;
      import flash.display.DisplayObject;
 
      public class VidPlayer extends Sprite implements IVid
      {
      private var ns:NetStream;
      private var vid:Video;
      private var nc:NetConnection;
      public function get displayObject( ):DisplayObject
        {
        return this;
        }
      public function playVid(flv:String):void
          {
            nc=new NetConnection( );
            nc.connect(null);
            ns=new NetStream(nc);
            ns.play(flv);
            vid=new Video( );
            vid.attachNetStream(ns);
            addChild(vid);
          }
      }
}

file : DoVid.as

Код AS3:

package
{
  import flash.display.Sprite;
 
  public class DoVid extends Sprite
    {
      //Type as Interface
      private var showTime:IVid;
      public function DoVid( )
      {
      //Play the video
      showTime=new VidPlayer( );
      showTime.playVid("iVid.flv");
      //Include DisplayObject instance
      addChild(showTime.displayObject);
      showTime.displayObject.x=100;
      showTime.displayObject.y=50;
      }
    }
}

В чем смысл создания интерфейса, если можно обойтись без него ?
Код AS3:

var showTime:VidPlayer =new VidPlayer( );


Хотелось бы увидеть примеры с реальной необходимостью добавления интерфейсов?

ramshteks 07.08.2009 03:51

а вот что у вас может быть к примеру быть 10 классов реализующих этот интерфейс. И скажем вам в массиве надо будет хранить Н-ое число экземпляров этих классов. Так вот чтоб не выкареживаться с выяснением и приведением типов и существуют интерфейсы.

teda 07.08.2009 04:50

Наследование решает те-же задачи, и количество классов и Н-ое число экземпляров этих классов.
к тому же все равно писать реализацию или прописывать функции.

etc 07.08.2009 07:38

Наследование не всегда полезно и подходит для решения задачи.

r_r_f_r 07.08.2009 10:38

примеры из жизни, да пожалуйста:
школа/институт
интерфейсы:
ITeacher(задавать домашнее задание, з/п, ...)
IStudent(делать дом задание, знания ...)

Вася implements IStudent(раздолбай - делает дом. задание дооолго)
Мария Ивановна implements ITeacher(Супер учитель, способный воспитать и 10 Васей в людей, Лаурет различных бонусов, миллион дипломов ...)

Все они ходят в школу, школа принимает всех Iteachers & IStudent несмотря кто это Вася или Мария Ивановна.

cleptoman 07.08.2009 11:21

r_r_f_r, завернул круто, но тема сисек не раскрыта)

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

Герыч 07.08.2009 11:34

Вроде бы ещё в AS нет множественного наследования, т.е. нельзя написать:
Код AS3:

class A extends B,C

а вот так можно:
Код AS3:

class A implements IB,IC

поправьте, если я ошибаюсь

ещё интерфейс нужны для того, чтобы требовать от объекта только "умения" что-то делать, не важно как он это делает. Например у меня в моём типа физ движке для водички есть силы(IPower), есть рисуемые объекты(IDrawable)
от сил я требую умение применять силу(IPower.applyPower()), от рисуемых объектов - нарисовать себя(IDrawable.draw());

r_r_f_r 07.08.2009 11:43

Цитата:

Сообщение от cleptoman (Сообщение 841105)
r_r_f_r, завернул круто, но тема сисек не раскрыта)

окей:)
все учителя и ученики являются отоброжаемыми объектами и есть ещё 3-и, нет 4-ре контроллера которые ими управляют(и все они работают не с интерфейсами а с одним из супер классов(их 4-ре, т.е. много)), т.е. всю эту структуру изменить дороже выйдет, нежели написать интерфейс.

Хорошо также писать класс реализующий интерфейс "по дефолту", и делегировать все действия ему(получаем практически обычное наследование, но оно не требует глобального изменения структуры приложения).

Цитата:

Сообщение от cleptoman (Сообщение 841105)
по теме: интерфейсы удобны когда надо проверить, реализует ли инстанс этот интерфейс или нет, независимо от того экземпляр какого он класса.

А с классами случайно так нельзя сделать?Тема сисек раскрыта:)

cleptoman 07.08.2009 12:31

можно, если нам нужно обратиться к методу , который 100% есть у родителя...а если нужно обратиться к методу который есть у нескольких наследников, но нет у родителя, то интересней проверять на интерфейс, с этим методом, чем перебирать всех наследников с этим методом


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

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