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

Фенёк 06.06.2011 18:11

Помогите разобрать понятие интерфейса
 
Уселся читать книженцию Коллина Мука по AS3. Добрался до темы "Интерфейсы" в которой окончательно заплутал.

Объясните пожалуйста, в чем принципиальная разница между интерфейсом и классом? Что значит класс реализует интерфейс? Почему интерфейс не может быть сам реализован?

i.o. 06.06.2011 18:26

Цитата:

Почему интерфейс не может быть сам реализован?
Потому, что в этом его предназначение.
Цитата:

в чем принципиальная разница между интерфейсом и классом?
интерфейс - абстракция.
класс - реализация.

in4core 06.06.2011 18:31

Ну вот давайте представим такую систему.
Есть у вас в руках 10 ручек, разных производителей, разных паст , все ручки соотв. Для чего нужны все эти ручки ? чтобы писать наверное. Значит они реализуют метод Write. Рассмотрим это на примере

Код AS3:

class Pencil implements IPencil
 
    public function doWrtite():void {
    }
public interface IPencil
    function doWrite():void;
 
Main class
 
var pn1:IPencil = new Pencil(color , mark )
var pn2:Ipencil = new EmptyPancil ( color , mark )

Классы Pencil и EmptyPencil - разные , но реализуют общий интерфейс IPencil имеющий 1 метод всего лишь doWrite()

-De- 06.06.2011 18:37

В интерфейсе указывается, какие параметры функция принимает и что возвращает. Реализации (т.е. что собсно делать с этими параметрами и как получать возвращаемое значение) - в интерфейсе нет.
В AS3 можно имлементить сколько угодно интерфейсов, но наследоваться только от одного класса.
PS: Есть термин "абстрактные функции", это как-раз только такие описания функций, как в интерфейсе. В as3 нет таких функций. В С++ есть такие функции, но нет интерфейсов %)

КорДум 06.06.2011 18:41

Цитата:

PS: Есть термин "абстрактные функции", это как-раз только такие описания функций, как в интерфейсе. В as3 нет таких функций. В С++ есть такие функции, но нет интерфейсов %)
В C# зато есть и то, и то ;)

2автор: понимание, зачем они нужны, придет со временем. Если вы только начали изучать as3, советую не останавливаться и идти дальше. Но в будущем обязательно вернитесь к этой главе.

Фенёк 06.06.2011 18:46

Но ведь интерфейсы могут содержать методы, разве это не будет реализацией?

Wolsh 06.06.2011 18:47

Есть утюг, телевизор, ноутбук и паяльник. Все делают совершенно разные вещи, но у всех один интерфейс "вилка на 220". Он гарантирует, что если у Вас в стене есть розетка на 220, то Вы сможете воспользоваться любым из этих приборов. Если класс А и класс В реализуют интерфейс IC, описывающий метод show(), это гарантирует что у обоих классов есть метод show(), принимающий такие-то типы данных и возвращающий такой-то тип данных. Это значит, что Вы можете использовать в коде экземпляр как класса А, так и класса В в одной и той же ситуации, и ошибки – отсутствия у экземпляра метода show() – не произойдет. Что именно происходит внутри метода – реализация – зависит уже от класса. Например рисовальные инструменты – все они при движении мышки оставляют след на "бумаге". Какой именно, размытый как у кисточки или резкий как у карандаша – это уже конкретная реализация. Важно что мы можем подставить любой инструмент и вызывать у него метод "рисуй" единым для всех образом. Заменяемость и расширяемость, универсальность – основные цели Интерфейсов.

Добавлено через 1 минуту
Интерфейсы НЕ могут содержать методы. Они только описывают сигнатуру.

Фенёк 06.06.2011 18:52

А разве не будет альтернативой вместо интерфейса создать другой класс, который будет расширяться?

i.o. 06.06.2011 19:02

Цитата:

А разве не будет альтернативой вместо интерфейса создать другой класс, который будет расширяться?
Ну попробуйте :)
Вообще, Wolsh хорошо донес суть, как, впрочем, и in4core.

Nemez 06.06.2011 19:07

Интерфейс удобен. А есть ли ситуации, при которых он необходим?


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

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