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

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

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

Регистрация: Nov 2010
Сообщений: 150
Question Организация иерархии классов

В программе есть несколько классов, которые можно составлять в иерархичное дерево.
Код AS3:
public interface IGameObject
{
    name: String;
    parent: IGameObject;
}
 
public interface IGameObjectGroup implements IGameObject
{
    function addChild(child: IGameObject);
    function removeChild(child: IGameObject);
    ...
}
 
public interface IComponent
{
    name: String;
    parent: IComponent;
}
 
public interface IComponentGroup implements IComponent
{
    function addChild(child: IComponent);
    function removeChild(child: IComponent);
    ...
}
Хотелось бы этот функционал вынести в базовый класс, но при этом чтобы к примеру IComponentGroup не мог хранить IGameObject, шаблонов к сожалению в AS нет, поэтому вопрос, как это реализовать наиболее красиво.

Старый 24.11.2011, 17:12
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Может я конечно чего-то не понимаю, разве может интерфейс реализовать другой интерфейс??
Код AS3:
interface IGameObjectGroup implements
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 24.11.2011, 17:22
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 3  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
разве может интерфейс реализовать другой интерфейс??
Нет нельзя. Наверное имелось ввиду extends.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 24.11.2011 в 17:45.
Старый 24.11.2011, 17:58
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
IGameObject должен иметь возможность быть IComponent?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 24.11.2011, 18:32
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 5  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Извиняюсь, имелось ввиду extends.
Нет IGameObject и IComponent это разные сущности, общее у них только то, что они могут образовывать иерархию и пересылать сообщения в пределах своей иерархии.

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Ну тогда два базовых класса, да, шаблонов нет.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 25.11.2011, 00:21
Flashrunner вне форума Посмотреть профиль Отправить личное сообщение для Flashrunner Найти все сообщения от Flashrunner
  № 7  
Ответить с цитированием
Flashrunner

Регистрация: Sep 2010
Сообщений: 47
Цитата:
Код AS3:
parent: IGameObject;
parent: IComponent;
Наверное все же
Код AS3:
parent: IGameObjectGroup;
parent: IComponentGroup;

Stitch512 и -De- под шаблонами имеют ввиду генерики?

Старый 25.11.2011, 00:45
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 8  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Хотелось бы этот функционал вынести в базовый класс, но при этом чтобы к примеру IComponentGroup не мог хранить IGameObject, шаблонов к сожалению в AS нет, поэтому вопрос, как это реализовать наиболее красиво.
Чтобы вынести в базовый класс нужно чтобы IGameObject и IComponent наследовали еще какой-нибудь интерфейс либо использовать Object. И тогда и тогда придется все время кастить. А чтобы нельзя было добавлять несовместимые типы кидайте эксепшин.
Что типа такого:
Код AS3:
package 
{
	public class BaseGroup
	{
		private var baseType: Class;
		public function BaseGroup(baseType: Class)
		{
			super();
			this.baseType = baseType;
		}
 
		public function addChild(value: Object):void
		{
			if (value && value is baseType)
			{
 
			}
			else
			{
				throw new ArgumentError('BaseGroup can store only ' + baseType);
			}
		}
	}
}
var group: BaseGroup = new BaseGroup(IGameObject);
			group.addChild(gameObject);
Возможно в Вашем случае можно использовать вектор?
Ну или используйте realaxy там можно.
Цитата:
Stitch512 и -De- под шаблонами имеют ввиду генерики?
Да.
__________________
http://www.chessmax.ru

Старый 25.11.2011, 18:08
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 9  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Дело идет к blob антипаттерну

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

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

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


 


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


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