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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.06.2011, 01:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 31  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Crazy, в ответ на Ваше замечание к моему тексту пример псевдокода:
Код:
class Утюг implements ЯВРозетку220Втыкабельный, ЯОдеждуГладящий
class Паяльник implements ЯВРозетку220Втыкабельный, ЯПроводаПаяющий
class Ноутбук implements ЯВРозетку220Втыкабельный, ЯВИнтернетХодящий
class Мобильник implements ЯВИнтернетХодящий, ЯДрузьямЗвонящий
Понимаете разницу между "втыкабельный" и "гладящий"? Интерфейс не обязан описывать НАЗНАЧЕНИЕ, ибо в ситуации, когда метод ничего не возвращает, описать "назначение" невозможно в принципе. Назначение утюга конечно же не в том, что он втыкается в розетку. Но нет никакого смысла описывать назначение, что "утюг гладит одежду", если неизвестно, как заставить его это делать, как использовать класс в коде. Это и описывает интерфейс – наличие вилки на 220 к примеру, без которой Вы не сможете воспользоваться ЭТИМ утюгом для глажки. И хотя ваши паровые и чугунные утюги тоже гладят, у них именно другой интерфейс для операции нагрева. Они все могут реализовывать Интерфейс ЯОдеждуГладящий, содержащий метод
Код:
гладить(одежда:Одежда):ПоглаженнаяОдежда;
но не могут реализовывать Интерфейс ЯОдеждуГладящий, если метод "гладить" требует уточнения – ведь чтобы погладить рубашку, Вам недостаточно иметь утюг и рубашку. Нужен еще один компонент - источник энергии для нагрева утюга. Если есть розетка, но нет печки, чугунный утюг не сможет погладить рубашку. Метод утюга не сможет отработать с такими входными параметрами – рубашка и розетка. Ему нужны рубашка и печка. Это и есть Интерфейс. И того, что на выходе метод возвращает именно ПоглаженнуюОдежду, должно хватать для точности Назначения. Это уже вопрос архитектуры самих данных – как Вы их спроектируете. Если дальше Вы будете использовать ПоглаженнуюОдежду для извлечения кодов запуска ядерных ракет, то пожалуй да, Интерфейс бессилен. Если же сам класс данных соответствует своему назначению, то вот способ – типизация возвращаемых методами значений. Но если метод ничего не возвращает, я не знаю как контролировать "назначение". Мне невероятно интересно, как Вы вообще себе представляете "интерфейс", или вообще ТипДанных, гарантирующий использование "по назначению" методов без типа возвращаемых данных. Как бы это гарантирование могло выглядеть, псевдокод в студию.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 07.06.2011 в 04:33.
Старый 07.06.2011, 02:40
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 32  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от in4core Посмотреть сообщение
... По факту, можно и штаны через голову надеть....
Не, а, правда. Пробовал? И что, получилось?!

Старый 07.06.2011, 03:15
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 33  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ПОлучился холивар
__________________
Марк Tween

Старый 07.06.2011, 13:40
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 34  
Ответить с цитированием
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Интерфейс не обязан описывать НАЗНАЧЕНИЕ, ибо в ситуации, когда метод ничего не возвращает, описать "назначение" невозможно в принципе.
Что может быть приятнее, чем явить чудо.

Код AS3:
/**
 * Вынимание меча из ножен.
 * pre: персонаж имеет меч
 * pre: меч находится в ножнах
 * post: персонаж держит меч в руке
 * invariant: количество предметов персонажа не изменилось
 */
function draw():void;
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

Старый 28.09.2011, 23:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 35  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Crazy, банально и на пальцах:
Вам поступило сообщение "Я сплю с твоей подругой".
Вопрос: а что же это значит?

Логика Ваша: ну, если спит, значит просто спит. Без вариантов.
Альтернативная логика: если я кот - то я просто сплю. А если я Вин Дизель - то не просто.


UPD: ох, ёлки, мне прислали ссылку на тему просто почитать, я подумал что актуально. Извиняюсь за некропост


Последний раз редактировалось Psycho Tiger; 29.09.2011 в 00:21.
Старый 12.09.2013, 11:10
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 36  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
Цитата:
Сообщение от goodguy Посмотреть сообщение
Это скорее не для того, чтобы гарантировать наличие методов, а для того, чтобы абсолютно разные классы принадлежали к одному типу данных.

Допустим диспатчат 2 разных класса одно событие и при этом оба класса применяют общий интерфейс (допустим ISomeInterface), но есть еще и другие классы, которые тоже диспатчат это событие. Нам же нужно делать что-то только с теми классами, которые применяют этот интерфейс.

Для большей наглядности, допустим есть игра, в которой есть различные виды техники, которую нужно уничтожать.
Все виды транспорта будут, естественно, принадлежать к разным классам (Car, Tank, Aaa и т.д.), но есть у них и одно общее, они все должны взрываться.
Для этого создаем интерфейс, например IBlowable, с методом blow();
И имплементим его во всех классах техники.
Теперь, при попадании бомбы в транспортное средство, мы можем проверить в обработчике события так:
Код AS3:
if (e.target is IBlowable) {
      e.target.blow();
}
В этом случае нам не нужно будет проверять принадлежит ли цель к каждому конкретному виду техники, например так:
Код AS3:
if (e.target is Car || e.target is Tank || e.target is Helicopter) {
      e.target.blow();
}
Кто-то возможно скажет: "но ведь можно же, например, првоерить e.target is DisplayObject"
И результат будет true. Но DisplayObject не имеет метода blow();


Вот, как-то так. Надеюсь не слишком стремное пояснение
Объясните пожалуйста как тогда вызвать метод blow() конкретно у Car

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
У Класса Car, то есть статический метод класса? Этот вопрос не имеет отношения к интерфейсам. Интерфейсы не могут описывать статические методы.
__________________
Reality.getBounds(this);

Старый 12.09.2013, 11:55
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 38  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
Цитата:
Сообщение от Wolsh Посмотреть сообщение
У Класса Car, то есть статический метод класса? Этот вопрос не имеет отношения к интерфейсам. Интерфейсы не могут описывать статические методы.

нет я не про статический а публичный метод. я не могу понять в каждом из классе Car, Tank, Aaa и т.д есть один и тот же метод blow(); как же он работает? если в классе интерфейса IBlowable есть тоже метод blow().
как имплиментных классах вызывать этот метод ну или отправлять аргументы в него.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
как же он работает?
Как раз таки прелесть интерфейсов в том, что никому не известно как работают методы, указанные в интерфейсе. Это черный ящик, мы знаем только что, допустим, метод blow() не принимает входных агрументов и ничего не возвращает.

Цитата:
Объясните пожалуйста как тогда вызвать метод blow() конкретно у Car
Код AS3:
var myLittleCar:Car = new Car();
myLittleCar.blow();
//Или так
var myLittleBlowableObject:IBlowable = new Car(); //С учетом что Car реализует IBlowable 
myLittleBlowableObject.blow();

Старый 12.09.2013, 12:33
razerw вне форума Посмотреть профиль Отправить личное сообщение для razerw Найти все сообщения от razerw
  № 40  
Ответить с цитированием
razerw

Регистрация: Jun 2012
Адрес: Татарстан
Сообщений: 118
что тогда будет в таком случае.
я отправляю в метод blow() интерфейса IBlowable аргумент.
Но метод blow() имплементирова в классах Car, Tank. какая будет реакция? аргумент придет в оба класса? Car, Tank?

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

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

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


 


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


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