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

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

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

Регистрация: Feb 2007
Сообщений: 174
По умолчанию Изменение значений свойств между классом-родителем и классами потомками.

Подскажите плиз, совсем запутался.
Есть класс родитель, есть несколько классов его детей, у класса родителя есть public свойство, следовательно такие-же свойства есть и у его потомков.
Подскажите как создать следующий механизм: в одном из классов-потомков изменяется значение свойства, наследуемое от класса-родителя. Как присвоить это новое значение свойства в класс-родитель, с таким расчётом, что бы оно затем могло получаться из него в других классах-детях.

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

Регистрация: Feb 2012
Сообщений: 1,540
Ух как запутано
Может, super.свойство?

Старый 16.03.2013, 01:49
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 3  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Пробовал. Из класса-потомка присваивал супером значение свойству в класс-родитель, затем создавал в это-же классе-потомке объект другого класса-потомка и обрашался к указанному свойству - и оно не читалось.

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

Регистрация: Feb 2013
Сообщений: 176
так оно и не должно вроде. дети - самостоятельные объекты, имеющие свойства родителя.
нельзя поменять свойство предка, чтобы оно тут же изменилось у всех детей.

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

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Вы скорее всего путаете иерархию наследования классов с иерархией объектов во время выполнения

Если вы создаете новый объект класса - потомка, то обращаясь к любым переменным класса-родителя через super вы будете обращаться к одному конкретному объекту который создали.
То есть таким образом никакой другой объект не сможет получить значения переменных из якобы "родительского класса"

В вашем случае стоит подумать о большом классе - держателе, в котором находятся другие более мелкие объекты (заметьте, это сделано на стадии реализации, а не на стадии проектирования и описания наследования классов. мелкие классы совершенно не обязательно должны наследовать большой держатель). В эти объекты можно напрямую передать ссылку на объект держатель - это самый простой способ, и потом по этой ссылке обращаться к конкретным переменным, которые теперь будут одни на всех


Последний раз редактировалось KumoKairo; 16.03.2013 в 02:14.
Старый 16.03.2013, 02:30
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 6  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
С термином "класс-держатель" ранее не сталкивался, надо подумать над ним.
Попробую несколько конкретизировать вопрос. Есть массив - упорядоченная структура объектов и данных. Содержимое данного массива в процессе работы изменяется, причем объектами вот тех самых классов-детей о которых я упоминал. Требуется делать это как-то попроще. Первое что приходит в голову - передавать этот массив в качестве аргумента в методы. Но может кто-то подскажет лучший вариант?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Что мешает сделать статическое поле?

Старый 16.03.2013, 11:08
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 8  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Т.е. если я в классе-родителе объявлю массив как public static var myarray, то я смогу изменять его содержимое в процессе работы?
Я создавал статическое поле для stage, но что бы для массива ?!

Старый 16.03.2013, 12:28
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 9  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
Я бы рекомендовал шаблон одиночку: удобно тем что всегда если надо можно расширить и вызывать из любого места программы

Реализация одиночки для вашего массива
Код AS3:
package
{
	public class Singleton implements ISingleton
	{
		// Реализация шаблоная одиночки
		private static var _instance:ISingleton;
 
		private var myarray:Array;
 
		public function Singleton(pvt:PrivateClass)
		{
			this.myarray = new Array();
		}
 
		public static function get Instance():ISingleton
		{
			if (Singleton._instance == null)
			{
				Singleton._instance = new Singleton(new PrivateClass());
			}
			return Singleton._instance;
		}
 
		// Добавляет новый элемент в массив
		public function set addElement(element:*):void
		{
			this.myarray.push(element);
		}
 
		// Удаляет элемент из массива
		public function set removeElement(element:*):void
		{
			this.myarray.splice(this.myarray.indexOf(element),1);
		}
 
		// Возвращает массив элементов
		public function get returnMyArray():Array
		{
			return this.myarray; 
		}
 
	} // Конец класса
} // Конец пакета
 
class PrivateClass
{	
	public function PrivateClass()
	{
	}	
}

Интерфейсичек для удобства (или для последующего расширеня):
Код AS3:
package
{
	public interface ISingleton
	{
		function set addElement(element:*):void;
		function set removeElement(element:*):void
		function get returnMyArray():Array
	}
}

И далее для доступа к этому массиву во всех необходимых классах прописываете нижеследующую реализацию:
Код AS3:
package
{
	public class Client
	{
		public function Client()
		{
			var singleton:ISingleton = Singleton.Instance;
			// Добавление в массив элемента
			singleton.addElement = 'Новый элемент массива';
			// Удаляет элемент из массива
			singleton.removeElement = 'Новый элемент массива';
			// Возврат получившегося массива
			singleton.returnMyArray;
		}
	}
}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Я бы рекомендовал шаблон одиночку
Нет никакого смысла в том, чтобы создавать синглтон для простого массива.
Достаточно класса с парой статических методов
Код AS3:
package {
        public class SomeClass {
              private static var _array:Array = [];
 
              public static function addElement(element:SomeElement):void {
                    if (_array.indexOf(element) < 0) {
                         _array.push(element);
                    }
              }
              public static function removeElement(element:SomeElement):void {
                    if (element == null) return;
                    var index:int = _array.indexOf(element);
                    if (index > -1) {
                          _array.splice(index, 1);
                    }
              }
        }
}

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

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

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


 


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


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