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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.09.2013, 16:53
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 41  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от razerw Посмотреть сообщение
что тогда будет в таком случае.
я отправляю в метод blow() интерфейса IBlowable аргумент.
Но метод blow() имплементирова в классах Car, Tank. какая будет реакция? аргумент придет в оба класса? Car, Tank?
Нет. Интерфейс, это как инструкция для пользования. То-есть класс который "хочет" реализовывать интерфейс, 100% должен содержать описанные свойства и методы интерфейса который он реализовует.

Аналогию можно провести к USB-порту. К примеру вы берёте объект "мышка", проверяете есть ли у него интерфейс "USB", если есть, значит Вы можете его подключить к USB на Вашем компьютере и начать ею пользоваться. Но это не значит что если вы подключили мишку и начали использовать USB порт, то все устройства с USB начнут работать.
И соответсвенно существует огромное количество девайсов с "USB-интерфейсом", флешка, блютуз, клавиатура, колонки, мышка и так далее которые используют USB-интерфейс по своим нуждам. Что-бы подключить какой-либо из устройств, нам нужно узнать, реализовывает ли объект USB-интерфейс и если реализовывает использовать его по своим нуждам ( соответсвено передвигая мышкой мы будем передавать данные через сам интерфейс, а с другой стороны эти данные будут считываться ). То-есть прямоугольный штекер с четырьмя контактами по которым передаются различные данные. Что в программирование реализовывалось бы, как различные методы по работе данного интерфейса.
__________________
return this...


Последний раз редактировалось AlexCooper; 12.09.2013 в 21:56.
Старый 12.09.2013, 17:04
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 42  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
я отправляю в метод blow() интерфейса IBlowable аргумент.
Ошибка компиляции, метод blow не имеет входных параметров

Старый 12.09.2013, 17:07
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 43  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Как пример допустим у нас есть два класса ( пишу не для компилятора )
Код AS3:
class DigitalClock implements IClock {
    public function showTime(time:Date):void {
        // и тут выводим время в цифровом формате, то-есть 10:23:33
    }
}
Код AS3:
class MechanicsClock implements IClock {
    public function showTime(time:Date):void {
        // тут рисуем стрелочки и выводим время как на механических часах
    }
}
и соответсвено сам интерфейс, который говорит о том что это - часы, а значит классы которые будут его реализовывать, должны показывать время ( пример: при вызове метода showTime )
Код AS3:
public interface IClock {
    function showTime(time:Date):void
}
теперь где-то в программе мы пишем

Код AS3:
 
var mClock:MechanicsClock = new MechanicsClock();
var dClock:DigitalClock  = new DigitalClock();
 
if (mClock is IClock) showClock(mClock);
if (dClock is IClock) showClock(dClock);
 
function showClock(clock:IClock):void {
    clock.showTime(new Date());
    addChild(clock);
}
__________________
return this...


Последний раз редактировалось AlexCooper; 12.09.2013 в 22:02.
Старый 13.09.2013, 10:14
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 44  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
Цитата:
Сообщение от AlexCooper Посмотреть сообщение
Как пример допустим у нас есть два класса ( пишу не для компилятора )
Код AS3:
class DigitalClock implements IClock {
    public function showTime(time:Date):void {
        // и тут выводим время в цифровом формате, то-есть 10:23:33
    }
}
Код AS3:
class MechanicsClock implements IClock {
    public function showTime(time:Date):void {
        // тут рисуем стрелочки и выводим время как на механических часах
    }
}
и соответсвено сам интерфейс, который говорит о том что это - часы, а значит классы которые будут его реализовывать, должны показывать время ( пример: при вызове метода showTime )
Код AS3:
public interface IClock {
    function showTime(time:Date):void
}
теперь где-то в программе мы пишем

Код AS3:
 
var mClock:MechanicsClock = new MechanicsClock();
var dClock:DigitalClock  = new DigitalClock();
 
if (mClock is IClock) showClock(mClock);
if (dClock is IClock) showClock(dClock);
 
function showClock(clock:IClock):void {
    clock.showTime(new Date());
    addChild(clock);
}
спасибо отличный пример

Старый 13.09.2013, 10:38
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 45  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Код AS3:
addChild(clock);
Кстати тоже работать не будет, выдаст ошибку что не может добавить в дисплей лист объект, не наследующий DisplayObject. Как выход кастануть к дисплей объекту
Код AS3:
addChild(clock as DisplayObject);
Но тогда есть вероятность получить null reference exception, да и вообще весь полиморфизм коту под хвост (может наш IClock выводит информацию о времени в консоль, и вообще не является DisplayObject, а мы его пытаемся в дисплейлист добавить?)
Код AS3:
if(clock is DisplayObject)
{
    addChild(clock);
}
Вот так конечно можно перестраховаться, но это совсем не красиво

Старый 13.09.2013, 11:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 46  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Почему "не красиво"?
2. А как "красиво"?
3. Вообще, использовать интерфейсы для наследников ДО немного не тру ООП, поэтому и заморачиваться не стоит. В том смысле, что вообще-то не совсем нормально, когда всякие методы хранит и реализует Спрайт. Предполагается, что ДО это только отображение, картинка Сущности, а сама Сущность это "Модель Сущности", и всякие хитрые методы — у нее. В простых проектах, конечно, так не заморачиваются. Но в них и интерфейсы не шибко то применяют))
__________________
Reality.getBounds(this);

Старый 13.09.2013, 11:20
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 47  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
1. Потому что объект, в конце концов, должен сам решать, как он будет отображать свою информацию (разумеется мы сначала ведем переговоры и делаем так, чтобы накладок с отображением не возникало: если нашим часам нужен контейнер для отображения себя - предоставим, но это уже конкретная реализация конкретного класса)
2. Добавлять этот объект на экран там, где мы точно знаем, что это DisplayObject, и его точно можно добавить на сцену, только и всего
На примере кода товарища AlexCooper, добавлять на экран сами объекты mClock и dClock (там они все равно добавляются одновременно)
Или определить передачу контейнера в класс, в который (в контейнер), конкретные часы будут добавлять нужные вещи
3. Приму к сведению, спасибо)

Старый 13.09.2013, 11:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 48  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Ну так он сам и решает, как отображать свою информацию. Вы решаете только, отображать ли этот объект)))
2. Ну так вы и проверяете, точно ли это ДО))) А как иначе, если метод принял объект в переменную типа Интерфейс? Делайте наоборот)) принимайте как ДО и проверяйте на интерфейс перед вызовом методов интерфейса. Просто мне непонятно, где страдает "красота". Точно так же Вы можете принимать объект как ДО, но вам придется делать такую же проверку, если захочется использовать методы Текстфилда или МувиКлипа. Чтобы "точно знать" надо отказаться от полиморфизма во всех его проявлениях
__________________
Reality.getBounds(this);

Старый 13.09.2013, 12:10
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 49  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
KumoKairo я же сделал пометку что пишу не для компилятора.
Суть вовсе не в DisplayObject и addChild. Реализаций можно придумать немереное количество.
Естественно чтоб всё работало классы MechanicsClock и DigitalClock должны прежде всего наследоваться от DisplayObject или классов его наследников. А потом только уже пихать в addChild.
Давайте не будем отходить от темы "Помогите разобрать понятие интерфейса" к теме "Как не словить ошибку при addChild"

Добавлено через 4 минуты
поддерживаю мнение Wolsh.
__________________
return this...

Старый 24.10.2013, 14:46
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 50  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Не стал создавать тему из-за неоднозначности своего вопроса.
Дело вот в чём - после прочтения книг, в моем сознании отпечаталось, что при реализации интерфейса не обязательно соблюдать строгий порядок , как при переопределении. То есть, можно добавлять новые параметры. Вчера я открыл книгу с целью подтверждения своих слов и не обнаружил там не чего похожего.
Если я путаю и так нельзя, то с чем я путаю?)

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

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

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


 


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


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