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

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

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Слегка оффтоп.
Мне вот тоже не нравится такая позиция с оверрайдами и интерфейсами.
Ну с оверрайдом то логически более понятно, и я тут больше согласен чем нет.

А в интерфейсе хотелось бы побольше гибкости. Банально потому что в интерфейсе я хочу описать нечто сравнительно абстрактное, а при реализации уже использовать реальные классы проекта. Ан нет, не получится по той же причине что и оверрайд.

Такое, больше на судьбу пожаловался нежели конструктив, но вдруг есть решения вопроса - то готов услышать обсудить.

//*********************
А по теме таки да.
Ну оверрайд это значит перезаписать метод. Это значит оставить метод "as is" но поменять его реализацию. А другие типы принимаемые или возвращаемые - это уже будет не "as is" а нечто другое. Соответственно компилятор и ругается.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
хотите абстракций пользуйте интерфейсы, они для этого и придуманы

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

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Цитата:
хотите абстракций пользуйте интерфейсы, они для этого и придуманы
function get someVar():*
Убого же.
Почему именно нельзя - я так и не понял.
Ответ частично получен, можно закрывать.
__________________
Дебаггер не предлагать

Старый 02.07.2012, 13:16
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 14  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
хотите абстракций пользуйте интерфейсы, они для этого и придуманы
Где это в тему - там использую.
Но иногда это жутко неудобно.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 02.07.2012, 16:54
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 15  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Эта проблема похожа на проблему инвариантности коллекций с родовым ковариантным параметром. Т.е. A<extends B> не является подтипом A<B>. Не смотря на то, что определенное родство между ними есть. Но мне как-то тяжело придумать пример, когда и в чем это проявляется. Тут вод недавно статья попадалась, может пригодится:

http://blogs.msdn.com/b/ruericlipper...atibility.aspx
__________________
Hell is the possibility of sanity

Старый 02.07.2012, 19:46
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 16  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Но мне как-то тяжело придумать пример, когда и в чем это проявляется.
Для модифицируемых (mutable) коллекций это нужно. Допустим, есть ковариантность по типу, тогда:
Код:
final List<A> la = new ArrayList<A>();
final List<B> lb = la; //A extends B, при ковариантности присваивание возможно
lb.add(new B()); // сигнатура позволяет
final A a= la.get(0); // Что должно быть здесь?
Возможность ковариантности зависит от структуры самого типа. Так, для немодифицируемых "типизированных" значений ковариантность возможна. В scala наличие ковариантности явно указывается у параметров типа (SomeValue[+A, B] ковариантент по A).

Исходный же вопрос (уточнение типов) обычно никаких проблем не создает. Обычно допускается уточнять тип результата, убирать лишние исключения (это в Java поддерживается). Без overloading'а (в AS) можно было бы еще позволить типы аргументов более общими делать (вместо B дать его родителя A). Могут быть проблемы при полиморфизме по return type, но это далеко не все языки (а там, где он есть, система типов совсем другая) и точно не AS.

Старый 03.07.2012, 14:37
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 17  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если бы в Яве были нормальные генерики, это бы загнулось уже на lb.add()... но это такое Статический полиморфизм - наше все.

Собственно, если у нас есть метод, то у нас есть его тип выведенный как:

A->B->C

где, для простоты, A - тип this, B - тип аргумента, C - тип возвращаемого значения.
Когда этот метод унаследовался, то мы уже его представляем как:

A'->B->C

И он ковариантен по первому типу.

A'->B'->C

можно считать совместимым по присваиванию, но, на сколько я понимаю, в общем случае, ковариантность не гарантируется.
__________________
Hell is the possibility of sanity

Старый 03.07.2012, 15:08
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 18  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от BuKT Посмотреть сообщение
function get someVar():*
Убого же.
Почему именно нельзя - я так и не понял.
Потому что нужна обратная совместимость.
Любой SomeOtherClass является одновременно и SomeClass, но SomeClass не обязательно является SomeOtherClass. Грубо говоря, если вы используете оверрайд геттера, а не называете его по другому, то подразумевается, что на месте используемого объекта может быть как экземпляр SomeClass, так и SomeOtherClass, поэтому сигнатура возвращаемых типов должна совпадать.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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