Проблема с дизайном классов и наследованием во Flash AS3 - PullRequest
0 голосов
/ 07 ноября 2008

У меня проблемы с дизайном некоторых классов. У меня есть три класса. Один суперкласс и два подкласса.

Один подкласс (AnimatedCharacter) создается флэш-памятью и используется для отображения объекта на экране. Другой (CharacterPhysics) сделан мной, чтобы расширить суперкласс.

Проблема в том, что используемый мной объект имеет тип AnimatedCharacter, поэтому я не могу просто поместить его в переменную типа CharacterPhysics.

Я попробовал что-то вроде шаблона Decorator, дав объекту типа CharacterPhysics ссылку на другой объект. Но теперь я должен переопределить все методы суперкласса и передать вызовы методов в ссылку. Не идеальная ситуация.

Кто-нибудь знает, как решить эту проблему?

альтернативный текст http://www.freeimagehosting.net/uploads/7a95f8352c.png

Ответы [ 3 ]

1 голос
/ 11 ноября 2008

Я не совсем понимаю назначение этой структуры классов, которую вы описываете (имена классов меня смущают), но в целом вам могут прийти на ум несколько вещей:

Почти всегда лучшим решением является попытка переосмыслить вашу модель классов, оценивая, например, следует ли вам, например, разделить обязанности классов по-другому, чтобы вы могли лучше использовать наследование и полиморфизм способ.

"Проблема в том, что объект, который я использую, имеет тип AnimatedCharacter, поэтому я не могу просто положить его в переменную тип CharacterPhysics. "

Если вы хотите поместить AnimatedCharacter в переменную типа CharacterPhysics, первая должна расширять последнюю, или у вас должен быть общий интерфейс (или суперкласс) для обоих, а затем введите переменную как таковую. Если это невозможно, мое мнение таково, что вам, вероятно, следует попытаться переосмыслить и реорганизовать всю структуру вашего класса, предполагая, что у вас есть веская «объектно-ориентированная» причина для желания сделать это в первую очередь;).

Если вышеупомянутое невозможно, есть некоторые другие уловки, которые вы можете оценить в вашем контексте:

  • Использование mixins может работать как «множественное наследование бедняков». У Дерека Вишусена есть несколько примеров того, как реализовать их в AS3 на flexonrails.net .
  • «Вид», реализующий шаблон декоратора с flash.utils.Proxy . Проблема с этим подходом состоит в том, что вы откладываете много проверок ошибок от времени компиляции до времени выполнения, но хорошо то, что вам не нужно вручную писать «проксирующие» реализации всех методов «украшенного» объекта , но вместо этого напишите только одну (callProperty()).
0 голосов
/ 11 ноября 2008

Мне кажется, что эти 2 должны быть интерфейсами, которые реализует ваш основной класс

0 голосов
/ 11 ноября 2008

Вы можете интерпретировать подкласс как экземпляр суперкласса, но не как вице-класс. Вы утверждали это задом наперед?

Если это так, вы можете использовать:

vas cp: CharacterPhysics;

...

var ac: AnimatedCharacter = cp As AnimatedCharacter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...