Форум 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=122302)

alekson 07.03.2009 02:30

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

toFlash 07.03.2009 03:04

вот возьми например какой нить фрэймворк, aswing,... посмотри реализацию компонентов в исходниках, должно стать понятнее

Fernando Costa 07.03.2009 12:14

ну например
Код AS3:

private function mekeSmthng($spr:iSprite):void
{
$spr.callHisMethod();
 
}

В параметры этой функции ты можешь передать Любой экземпляр класса, реализующий интерфейс iSprite

†‡Paladin‡† 07.03.2009 13:05

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

BlooDHounD 07.03.2009 13:39

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

Роман Вадимович 07.03.2009 13:52

Вот пример. Допустим Вы пишете программу, в которой каждый используемый класс хотите очищать при помощи метода destroy(). При этом используемые классы могут выполнять совершенно различные функции, и не быть родственниками.
Это значит, что нужно следить, чтобы в каждом из классов была реализована функция destroy, иначе возникнет ошибка.

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

†‡Paladin‡† 07.03.2009 14:06

Цитата:

Сообщение от BlooDHounD (Сообщение 803712)
†‡Paladin‡†, с тысячным постом Вас. и да ... ересь полнейшая.
интерфейсы нужны, что бы объединить классы в общий тип, которого нельзя добиться наследованием в силу архитектуры, или наследование не требуется в принципе.

Кстати да. 1000й пост. Не Вам судить про ересь - Вы не евангелист. Я свои выводы сделал на основе опыта изучения открытых проектов типа Batik, т.к. пришлось с ними поработать. Там к каждому классу написан интерфейс в не зависимости от того нужно наследование или не нужно. Глядя на только одни эти интерфейсы можно легко представить структуру и масштаб не хилого проекта. Классы лишь делают черновую работу. С другой стороны в AS3 интерфейсы куцые и лично я их практически не использую в работе, предпочитая делать что-то вроде абстрактных классов.

DarkLight 07.03.2009 14:20

Цитата:

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

etc 07.03.2009 14:24

†‡Paladin‡†, писать к каждому классу интерфейс — перебор. Это значит, что разработчик кроме как «интерфейсы — это круто!» ничего больше не знает.

Котяра 07.03.2009 14:44

Очень важный момент: работа с загружаемыми отдельно модулями:
Есть класс Main в main.swf который грузит modul.swf явлющийся классом Modul, модулей может быть много, но например все они реализуют интерфейс IModul с одним единственным методом init();
Это позволит создать такую конструкцию
Код AS3:

package {
inteface IModul{
public function init():void;
}
}

Код AS3:

package {
import IModul;
public class Module implements IModul{
public function init():void{
}
}
}

Код AS3:

package {
import IModul;
public class Main{
var modul:IModul;
..
// загрузка
..
public function initModul():void{
modul.init();
}
 
}
}


Только IModul будет скомпилирован в обоих классах.
Это ИМХО основная задача интерфесов: служить связующим звеном между различными независимыми объектами.


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

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