![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+6 24.06.11]
Регистрация: Mar 2001
Адрес: תל אביב
Сообщений: 68
|
В большей части обучающей литературы приводятся примеры довольно далекие от практического применения, из которых не совсем ясна необходимость
использования интерфейсов. например в книге : ActionScript 3.0 Design Patterns "William B. Sanders and Chandima Cumaranatunge" приводится пример : file : IVid.as package { import flash.display.DisplayObject; public interface IVid { function playVid(flv:String):void; function get displayObject():DisplayObject; } } 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); } } } 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; } } } Хотелось бы увидеть примеры с реальной необходимостью добавления интерфейсов? |
|
|||||
|
а вот что у вас может быть к примеру быть 10 классов реализующих этот интерфейс. И скажем вам в массиве надо будет хранить Н-ое число экземпляров этих классов. Так вот чтоб не выкареживаться с выяснением и приведением типов и существуют интерфейсы.
|
|
|||||
|
[+6 24.06.11]
Регистрация: Mar 2001
Адрес: תל אביב
Сообщений: 68
|
Наследование решает те-же задачи, и количество классов и Н-ое число экземпляров этих классов.
к тому же все равно писать реализацию или прописывать функции. Последний раз редактировалось teda; 07.08.2009 в 04:53. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Наследование не всегда полезно и подходит для решения задачи.
|
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
примеры из жизни, да пожалуйста:
школа/институт интерфейсы: ITeacher(задавать домашнее задание, з/п, ...) IStudent(делать дом задание, знания ...) Вася implements IStudent(раздолбай - делает дом. задание дооолго) Мария Ивановна implements ITeacher(Супер учитель, способный воспитать и 10 Васей в людей, Лаурет различных бонусов, миллион дипломов ...) Все они ходят в школу, школа принимает всех Iteachers & IStudent несмотря кто это Вася или Мария Ивановна. |
|
|||||
|
r_r_f_r, завернул круто, но тема сисек не раскрыта)
по теме: интерфейсы удобны когда надо проверить, реализует ли инстанс этот интерфейс или нет, независимо от того экземпляр какого он класса.
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Вроде бы ещё в AS нет множественного наследования, т.е. нельзя написать:
а вот так можно: поправьте, если я ошибаюсь ещё интерфейс нужны для того, чтобы требовать от объекта только "умения" что-то делать, не важно как он это делает. Например у меня в моём типа физ движке для водички есть силы(IPower), есть рисуемые объекты(IDrawable) от сил я требую умение применять силу(IPower.applyPower()), от рисуемых объектов - нарисовать себя(IDrawable.draw()); |
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
окей
![]() все учителя и ученики являются отоброжаемыми объектами и есть ещё 3-и, нет 4-ре контроллера которые ими управляют(и все они работают не с интерфейсами а с одним из супер классов(их 4-ре, т.е. много)), т.е. всю эту структуру изменить дороже выйдет, нежели написать интерфейс. Хорошо также писать класс реализующий интерфейс "по дефолту", и делегировать все действия ему(получаем практически обычное наследование, но оно не требует глобального изменения структуры приложения). Цитата:
![]() |
|
|||||
|
можно, если нам нужно обратиться к методу , который 100% есть у родителя...а если нужно обратиться к методу который есть у нескольких наследников, но нет у родителя, то интересней проверять на интерфейс, с этим методом, чем перебирать всех наследников с этим методом
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|