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

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

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Полиморфизм как :*

Вот такая интересная байка :
Есть скажем 5 классов, похожих по реализации и все имеющие setter / getter ( set info / get info )
Однако установка set info(value:SomeDiffrentClass)

как создать общий интерфейс для этих 5 классов, чтобы включить в него данный сеттер / геттер , если у каждого из 5 классов свой SomeDiffrentClass ?
__________________
Марк Tween

Старый 09.11.2011, 20:48
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 2  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Если у них разные SomeDiffrentClass, какой же это интерфейс?
делай ISomeDiffrentClass
а уже в реализациях кастуй
Код AS1/AS2:
set info(value:ISomeDiffrentClass) {
_info = value as SomeDiffrentClass
}
__________________
Отряд Котовскага

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Котяра - это все понятно. Косяк в другом
SomeDiffrentClass имеет различные методы внутри от другого сомеДифрент, соотв основной класс не увидит нужных методов. Я понимаю, что это не есть тру, мне было просто интересно. в данном случае яконечно же не буду строить интерфейс, он там не к месту
__________________
Марк Tween

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

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

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Wolsh не я одумался, точнее я все это понимаю и так не строю программу, это чисто ради интереса вопрос был
__________________
Марк Tween

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Инфокора дело говорит.
Мне тоже хотелось создать RenderersGroup, в котором присобачить скролл с пулом объектов. Ну, например, 20 рендереров, которые рендерят некоторый вектор Vector.<SomeModels>, а при прокрутке меняют свои модели (рендерили с 0 по 19, после с 20 по 39).
Однако, модели могут быть какие угодно, главное, чтобы когда рендереру дёргали сеттер модели - тип совпадал.
Да, мне хочется темплейтов/генериков. Очень хочется.

Старый 09.11.2011, 21:06
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
соотв основной класс не увидит нужных методов
объявляте
_info как КонкретныйКласс
Цитата:
главное, чтобы когда рендереру дёргали сеттер модели - тип совпадал
ну сделай интерфейс-маркер
__________________
Отряд Котовскага

Старый 12.11.2011, 21:26
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Проблема принципиальная (нет генериков в as3) - либо приведение типов, либо копипаста кода.
Приведение типов обычно, как бы не было противно его делать - выигрывает.

В критических случаях, где типизация очень нужна, можно обернуть базовый нетипизированный класс, пример обертки для хеша:
Код AS3:
public class TypedObject
{
    private var _object:Object = {};
 
    public function get(key:String):MyType
    {
       return _object[key];
    }
 
    public function set(key:String, value:MyType):void
    {
       _object[key] = value;
    }
}
Но если такое требуется для многих классов, или надо передавать сам хеш как универсальный тип - лучше смириться с приведениями.

Ну или, если требуется универсальная обработка TypedHash - дальше изголяться (пробовал такое для итератора - оверхед жуткий - выкинул нафиг и забил - итераторы только для haXe хороши):

Код AS3:
public interface IHashable
{
    function getUniversal(key:String):Object;
    function setUniversal(key:String, value:Object):void;
}
 
public class TypedObject implements IHashable
{
    private var _object:Object = {};
 
    public function get(key:String):MyType// Этим пользуется кто знает, что им TypedObject передали
    {
       return getUniversal(key) as MyType;
    }
 
    public function set(key:String, value:MyType):void
    {
       setUniversal(key, value);
    }
 
    public function getUniversal(key:String):Object// Этим пользуется тот, кто знает только о IHashable
    {
         return _object[key];
    }
 
    public function setUniversal(key:String, value:Object):void
    {
        _object[key] = value;
    }
}


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

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

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


 


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


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