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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.03.2015, 18:02
OlmerDale вне форума Посмотреть профиль Отправить личное сообщение для OlmerDale Найти все сообщения от OlmerDale
  № 1  
Ответить с цитированием
OlmerDale
[+1 09.05.15]

Регистрация: Jan 2015
Сообщений: 113
По умолчанию Деревья в программировании

Возможно flash-программисты смогут мне ответить, так как в местах где я уже спрашивал, мне не смогли дать однозначный ответ.

Могут ли деревья состоять из узлов-листьев не класса контейнера с полем data:*, а из самих-поведенчески законченных классов-объектов?
То есть я объект CustomInstance и у меня есть ссылку на next, prew, up, down.
Если Вы видели прецеденты подобного, то можете на словах рассказать что это было.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Другими словами, "как в любой уже сформированный класс, не имеющий полей next:*, prew:*, up:*, down:* добавить эти поля динамически". Да никак.
__________________
Reality.getBounds(this);

Старый 21.03.2015, 18:25
OlmerDale вне форума Посмотреть профиль Отправить личное сообщение для OlmerDale Найти все сообщения от OlmerDale
  № 3  
Ответить с цитированием
OlmerDale
[+1 09.05.15]

Регистрация: Jan 2015
Сообщений: 113
Цитата:
Другими словами, "как в любой уже сформированный класс, не имеющий полей next:*, prew:*, up:*, down:* добавить эти поля динамически". Да никак.
Нет. Создаю структуру, которую проще всего было бы обслуживать, будь она деревом.
Но если строить по принципу, когда нужный объект просто передается в создаваемую ноду
и присваивается её полю, то получившийся механиз вызывает те же проблемы, которые и привели
мысли к созданию деревьев из данных. Но вот если бы сам объект был и законченным объектом и нодой одновременно и это бы не противоречило ООП, то это было тем, о чем я и спрашиваю.

Я знаю только очень простые случаи, типа -
Код AS3:
package
{
	public class Node 
	{
		public var next:Node;
		public var prev:Node;
		public var data:*;
 
		public function Node() 
		{
 
		}
 
	}
 
}
 
package recursive 
{
	public class CustomClass 
	{
		public function CustomClass() 
		{
			// это класс можно сравнить по своей важности
			// например со Sprite
		}
 
	}
 
}
 
 
package
{
	public class Main 
	{
		public function Main() 
		{
			var node:Node = new Node();
			node.data = new CustomClass();
		}
 
	}
 
}
А я спрашиваю о разумности и прецедентности в практике -
Код AS3:
package recursive 
{
	public class CustomClass 
	{
		public var next:Node;
		public var prev:Node;
 
		public function CustomClass() 
		{
			// это класс можно сравнить по своей важности
			// например со Sprite
		}
 
	}
 
}
 
 
package recursive 
{
	public class Main 
	{
		public function Main() 
		{
			var node:CustomClass = new CustomClass();
		}
 
	}
 
}
Как видно CustomClass стал и тем кем был ( например Sprite ) и узлом для построения дерева, одновременно. Я вот об этом. Можно так? Противоречит это чему-то?

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Зачем ему быть и тем и тем, какую практическую задачу вы решаете?
__________________
местонахождение

Старый 21.03.2015, 18:45
OlmerDale вне форума Посмотреть профиль Отправить личное сообщение для OlmerDale Найти все сообщения от OlmerDale
  № 5  
Ответить с цитированием
OlmerDale
[+1 09.05.15]

Регистрация: Jan 2015
Сообщений: 113
Вот взять для примера Sprite. Он узел-контейнер. В него можно добавить несколько спрайтов, а потом его с его детьми добавить в другой. Все спрайты имеют ссылку на родителя.

То что я делаю немного похоже на спрайт. Я делаю контейнер, который реализует интерфейс INode ( его можно сравнить с абстракцией DisplayObject ) который добавляет в себя такие же контейнеры и объекты которые не могут быть контейнерами, но тоже реализуют INode. Это нечто -

Код AS3:
package recursive 
{
	public class INode 
	{
 
		public function INode() 
		{
			function next():INode
			function prev():INode
		}
 
	}
 
}
 
 
// АБСТРАКТНЫЙ КЛАСС implements INode
package recursive 
{
	public class AbstractClass implements INode
	{
		public function AbstractClass() 
		{
 
		}
 
	}
 
}
 
package recursive 
{
	public class SomeCustomClass extends AbstractClass
	{
		public function SomeCustomClass() 
		{
			// это класс можно сравнить по своей важности
			// например со Sprite
		}
	}
 
}
 
package recursive 
{
	public class CustomClass extends AbstractClass
	{
		public var nodes:INode
 
		public function CustomClass() 
		{
			// это класс можно сравнить по своей важности
			// например со Sprite
		}
 
		public function setNode(node:INode):void
		{
			this.nodes.next = node;
		}
 
	}
 
}
И эту архитектуру можно было бы с лихвой оправдать схожестью с DO, DOC, Sprite и Shape...
Но в DOC, как мне кажется, все чилды хранятся, хоть и в V<DO>, хоть и типизированном, но все же массиве, который сам состоит из нод. А у меня получается и DO и ещё и нода.

Если я не найду доказывающего, что это не нарушит ООР, то и делать так не буду. Расчитываю на Вашу помощь.

Старый 21.03.2015, 19:15
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 6  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Код AS3:
package
{
	public class Node 
	{
		public var next:Node;
		public var prev:Node;
		public var data:*;
 
		public function Node() 
		{
 
		}
 
	}
 
}
какие проблемы у этого подхода?

Старый 21.03.2015, 19:23
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 7  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Да никаких, Genome2D построен по такомо принципу. Но вы так и не ответили на вопрос "зачем?" вы это делаете.
__________________
местонахождение

Старый 21.03.2015, 19:25
OlmerDale вне форума Посмотреть профиль Отправить личное сообщение для OlmerDale Найти все сообщения от OlmerDale
  № 8  
Ответить с цитированием
OlmerDale
[+1 09.05.15]

Регистрация: Jan 2015
Сообщений: 113
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
Да никаких, Genome2D построен по такомо принципу. Но вы так и не ответили на вопрос "зачем?" вы это делаете.
Пока повременю с ответом и мысли в кучу соберу.

Старый 21.03.2015, 19:38
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 9  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
Да никаких, Genome2D построен по такомо принципу. Но вы так и не ответили на вопрос "зачем?" вы это делаете.
На всякий случай напишу, что я не OlmerDale.

Старый 22.03.2015, 00:35
OlmerDale вне форума Посмотреть профиль Отправить личное сообщение для OlmerDale Найти все сообщения от OlmerDale
  № 10  
Ответить с цитированием
OlmerDale
[+1 09.05.15]

Регистрация: Jan 2015
Сообщений: 113
Цитата:
Да никаких, Genome2D построен по такомо принципу. Но вы так и не ответили на вопрос "зачем?" вы это делаете.
Если без лишних умностей, то хочу создать последовательность, которую легко сортировать и удалять-добавлять узлы.
Если тоже самое создавать с нодами, в которые передавать классы в качестве значения свойства,
то я в этом просто не вижу смысла, так как массив ДАЖЕ быстрее ( он только по удалению выигрывает,
но этот выигрыш меркнет на фоне остальных проигрышей ).

И я немного не понял, Вы имели ввиду что genom создан по тому принципу, который хочу сделать я?
Или по тому, который мне не нравится? Я просто сейчас посмотрел его доки ( сорсы не смог найти на as3 ) и там у самого базового класса есть lastChild:GNode и nextNode:GNode... Это говорит о том, что базовый класс является и нодой и базовым ДО?

Добавлено через 3 часа 46 минут
Цитата:
Зачем ему быть и тем и тем, какую практическую задачу вы решаете?
Для начала немного исправил класс -
Код AS3:
package 
{
	public class AbstractClass implements INode
	{
		public var next:INode;
		public var prev:INode;
 
		public function AbstractClass() 
		{
 
		}
	}
}
 
package 
{
	public class CustomClass extends AbstractClass
	{
		protected var _nodes:NodeList;
 
		public var someProp:Type; // какое-то свойство
		public var someProp:Type; // какое-то свойство
		public var someProp:Type; // какое-то свойство
		public var someProp:Type; // какое-то свойство
		public var someProp:Type; // какое-то свойство
		public var someProp:Type; // какое-то свойство
		public var someProp:Type; // какое-то свойство
 
		public function CustomClass() 
		{
			// а в теле этого класса я реализую методы
			// которые будут инкапсулировать связь между
			// someProp
		}
 
		public function insert(target:INode):void
		{
			this._nodes.insert(target);
		}
 
	}
 
}
И вот теперь получается, что CustomClass становится группой для любых классов
расширяющих AbstractClass, в том числе и собственного типа. то есть я могу сделать
группу-групп.

А NodeList не содержит узлов, узлы это потомки AbstractClass, которыми он только управляет.
Вот так я хотел сделать и на то есть причины. Но как я понял, так делать нельзя.
Хотя так почему-то сделал автор genom2d, а ещё я то же самое в анимации tweenmax нашел,
в классе Animation есть ссылки на next:Animation prev:Animation, что не меняет ооп.

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

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

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


 


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


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