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

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

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

Регистрация: Jun 2010
Сообщений: 2
По умолчанию Множественное наследование

Использую BLAZEDS для связи с java WEB приложением.
На java есть классы:
Код:
public class BasicObject implements Serializable {
protected long id;
	protected BasicObject parent;
	protected String name;
....
}


public class ElDocument extends BasicObject {
...
}
Создаю сервис, например, с методом получения списка объектов BasicObject:
Код:
public List<BasicObject> getObjects() {
  List res = new ArrayList();
  res.add(new ElDocument(...));
  return res;
}
С точки зрения ООП все должно работать красиво: есть список базового типа с различными экземплярами. Но при создании службы во FLEX, с помощью Flex Builder, такого эффекта не наблюдается. При вызове соответствующего метода во FLEX происходит ошибка преобразования типа
ElDocument в тип BasicObject, при этом часть полей из ElDocument обнуляются.

Как решить такую проблему, используя общепринятые подходы ООП? При попытке во FLEX множественно унаследовать ElDocument от BasicObject выдается ошибка.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Не использовать DCD, оно просто плохо работает, и от него больше головной боли, чем толку.
В вашем примере в упор не могу разглядеть множественное наследование... где оно? В AS3 поддерживается только множественное наследование у интерфейсов, у классов его нет. В принципе ваш пример должен работать, ну, на вид, нет в нем ничего такого, что бы помешало. То же самое нормально работает в PHP например.
__________________
Hell is the possibility of sanity

Старый 19.06.2010, 03:05
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 3  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
Да, вроде все слаженно. Хотя можно посмотреть на модель объектов во Flex'е.
Кстати, между идентефикатором управления доступом protected в Java и AS3 есть небольшие различия. Маловероятно, но все-таки можно допустить, что это могло привести к несоответствиям.

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
сериализуются только паблик свойства.
И, это.. а где про множественное наследование? )))))
__________________
Отряд Котовскага

Старый 25.06.2010, 14:21
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 5  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
Я так понял что на флексе у тебя есть 2 класса:
BasicObject
и
ElDocument extends BasicObject

На яве у тебя тоже должно быть 2 класса:
BasicObject
и
ElDocument extends BasicObject

притом оба класса на флексе должны быть pарегестрированны:
registerClassAlias("BasicObject", "BasicObject");
registerClassAlias("ElDocument", "ElDocument");
или через [RemoteClass], но это работает не всегда.

если же ты замапил 1 ява класс на два флексовых, то будет такой эффект.

Если же ты на флексе зарегистрировал 1 класс BasicObject и с явы пытаешь послать ElDocument, который на яве наследуется от BasicObject. То на флексе тебе прилетит не то, ибо флекс сериализует/десериализует один к одному (по мапе) и про наследование он ничего не знает и знать не будет.

ЗЫ: Множественное наследование - это когда класс наследуется от нескольких классов-родителей. Скажем:
ElDocument extends BasicObject, SecondObject.
Такое в яве и флексе не поддерживается


Последний раз редактировалось alexberkut; 25.06.2010 в 14:25.
Старый 05.07.2010, 13:31
Arust вне форума Посмотреть профиль Отправить личное сообщение для Arust Найти все сообщения от Arust
  № 6  
Ответить с цитированием
Arust

Регистрация: Jun 2010
Сообщений: 2
Прошу прощения что сразу подробно не описал:
на яве есть 2 класса
Код:
public class BasicObject implements Serializable {
....
}
public class ElDocument extends BasicObject {
...
}
На флексе автоматом (в среде Flash Builder) генерируется классы:
Код:
[ExcludeClass]
public class _Super_BasicObject extends flash.events.EventDispatcher implements com.adobe.fiber.valueobjects.IValueObject
{
    model_internal static function initRemoteClassAliasSingle(cz:Class) : void 
    {
        try 
        {
            if (flash.net.getClassByAlias("BasicObject") == null)
            {
                flash.net.registerClassAlias("BasicObject", cz);
            } 
        }
        catch (e:Error) 
        {
            flash.net.registerClassAlias("BasicObject", cz); 
        }
    }   
        
...
Код:
[ExcludeClass]
public class _Super_ElDocument extends flash.events.EventDispatcher implements com.adobe.fiber.valueobjects.IValueObject
{
    model_internal static function initRemoteClassAliasSingle(cz:Class) : void 
    {
        try 
        {
            if (flash.net.getClassByAlias("ElDocument") == null)
            {
                flash.net.registerClassAlias("ElDocument", cz);
            } 
        }
        catch (e:Error) 
        {
            flash.net.registerClassAlias("ElDocument", cz); 
        }
    } 
...
ошибка множественного наследования в том что ElDocument уже расширяет EventDispatcher, а попытка унаследовать и от BasicObject остается безуспешной.
Поля серриализуемых объектов все публичные. Если нельзя так, то какое есть красивое решение? Неужели для каждого типа объекта надо создавать свой метод?

Старый 05.07.2010, 13:37
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 7  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
А зачем такие хитрые манипуляции:
проверить если алиаса для класса нету то зарегистрировать, если упала ошибка, то зарегистрировать... Ещё и лишные классы заводить какие-то... зачем?

пиши просто сразу:
Код:
registerClassAlias("BasicObject", "BasicObject");
registerClassAlias("ElDocument", "ElDocument");
А классы сам руками создай:
Код:
BasicObject extends EventDispatcher
Код:
ElDocument extends BasicObject

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
alexberkut
Эти "хитрые манипуляции" генерит флексовый компилятор, ввиду большого ума разработчиков. Я даже постил багу, чтобы поправили, меня не поняли и сказали, что фиксить не будут, т.как не понимают в чем глупость в коде... вот так вот.
__________________
Hell is the possibility of sanity

Старый 05.07.2010, 17:15
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 9  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
Ещё один повод руками писать классы, а не пользоваться всякими рукозаменителями.

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

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

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


 


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


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