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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.02.2014, 15:24
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 1  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
По умолчанию Как создать класс для изменения нескольких свойств сразу

И название придумать сложно и объяснить, хотя со вторым проще, так-как хочется не придумать новое, а повторить имеющееся. Как пример класс Matrix. Одноимённое свойство есть у всех ДО и при помощи этого класса, можно изменить несколько свойств сразу. Как такое реализовать я даже представить не могу, некогда такого не встречал. Единственное что приходит на скудный ум - ... Но я знаю, что это совсем не то, скорее всего для такой реализации есть правильное название. Поделитесь, как такое сделать?
Код AS3:
package 
{
	import flash.display.Sprite;
 
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			var customClass:CustomClass = new CustomClass();
			var properties:Properties = customClass.properties;
			properties.propertyOne = 10;
			properties.propertyTwo = 20;
			properties.propertyThree = 30;
			customClass.properties = properties;
			trace(customClass.propertyOne, customClass.propertyTwo, customClass.propertyThree);
		}
	}
 
}
Код AS3:
package 
{
	public class CustomClass 
	{
		private var _propertyOne:Number;
		private var _propertyTwo:Number;
		private var _propertyThree:Number;
 
		private var _properties:Properties;
		public function CustomClass() 
		{
 
		}
 
		public function get properties():Properties 
		{
			if (_properties == null)
					_properties = new Properties();
 
			return _properties;
		}
 
		public function set properties(value:Properties):void 
		{
			_properties = value;
			_properties.mutableClass = this;
		}
 
		public function set propertyOne(value:Number):void 
		{
			if (value == _propertyOne) 
			{
				return;
			}
			_propertyOne = value;
		}
 
		public function set propertyTwo(value:Number):void 
		{
			if (value == _propertyTwo) 
			{
				return;
			}
			_propertyTwo = value;
		}
 
		public function set propertyThree(value:Number):void 
		{
			if (value == _propertyThree) 
			{
				return;
			}
			_propertyThree = value;
		}
 
		public function get propertyOne():Number 
		{
			return _propertyOne;
		}
 
		public function get propertyTwo():Number 
		{
			return _propertyTwo;
		}
 
		public function get propertyThree():Number 
		{
			return _propertyThree;
		}
 
 
	}
 
}
Код AS3:
package 
{
	public class Properties 
	{
		private var _propertyOne:Number;
		private var _propertyTwo:Number;
		private var _propertyThree:Number;
 
		private var _propertis:Vector.<String>;
 
		private var _mutableClass:CustomClass;
		public function Properties() 
		{
			_propertis = new < String > ['propertyOne', 'propertyTwo', 'propertyThree'];
		}
		private function changeProperties():void
		{
			var length:int = _propertis.length;
			var property:String;
			for (var i:int = 0; i < length; i++) 
			{
				property = _propertis[i];
				_mutableClass[property] = this[property];
			}
		}
		public function set mutableClass(value:CustomClass):void 
		{
			if (value == _mutableClass) 
			{
				return;
			}
			_mutableClass = value;
			this.changeProperties();
		}
 
		public function get propertyOne():Number 
		{
			return _propertyOne;
		}
 
		public function set propertyOne(value:Number):void 
		{
			if (value == _propertyOne) 
			{
				return;
			}
			_propertyOne = value;
		}
 
		public function get propertyTwo():Number 
		{
			return _propertyTwo;
		}
 
		public function set propertyTwo(value:Number):void 
		{
			if (value == _propertyTwo) 
			{
				return;
			}
			_propertyTwo = value;
		}
 
		public function get propertyThree():Number 
		{
			return _propertyThree;
		}
 
		public function set propertyThree(value:Number):void 
		{
			if (value == _propertyThree) 
			{
				return;
			}
			_propertyThree = value;
		}
	}
 
}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
При изменении матрицы, изменения с объектом, которому она принадлежит не происходят. После изменения матрицы, ее нужно снова задать этому объекту.

То есть что получается. Есть у объекта свойство properties.
Сначала мы получаем эти свойства через someObj.properties. Тут их можно прочитать и посмотреть что же там внутри. Дальше можно задать им новые значения

Код AS3:
var props:Object = someObj.properties; // берем
props.someValue = newValue; // меняем значения
 
someObj.properties = props; // снова отдаем
и снова передать сеттеру объекта.
Ну а в сеттере уже прочитать их и провести нужные изменения, что-то вроде
Код AS3:
public function set properties(value:Object):void {
   for (var i:String in value) {
       this[i] = value[i];
   }
   _properties = value;
}

Старый 19.02.2014, 15:42
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 3  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
caseyryan Спасибо! Но тогда вот какой вопрос -
Код AS3:
public function set properties(value:Object):void {
   for (var i:String in value) {
       this[i] = value[i];
   }
   _properties = value;
}
Ведь это не будет так, как реализовано в ДО ( могу ошибаться ), ведь в случаи с матрицей, важен порядок присвоения значений, который for не гарантирует. Или допустим для меня важен порядок и получается, что в матрицу ( или мой класс ) в сеттере нужно передавать так же и ссылку на себя? Но ведь если бы так было и с матрицей, то метод для назначения себя, был бы виден в pablic.
Хотя я наверное с порядком присвоения напутал...

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Это был пример. Параметры могут и не иметь тип Object. Можно написать свой класс, или использовать массив, например. Да мало ли

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Это называют VO — Value Object DTO, Data Transfer Object — класс, который не производит никаких действий/изменений, а только содержит набор данных, облегчая передачу набора данных одним объектом.
Matrix, GraphicsPath, TextFormat, наследники BitmapFilter, трансформации для цвета и звука.
Им не нужны никакие ссылки на "хозяев". "Хозяева" сами должны уметь их правильно применять к себе. Это только свойства, в крайнем случае инструкции.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 19.02.2014 в 19:33. Причина: ошибочка
Старый 19.02.2014, 18:26
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
caseyryan я только написал и сразу понял ЧТО написал А Вы ещё заодно не подскажете, describeType свойства выводит в порядке объявления?

Добавлено через 36 минут
Wolsh Спасибо! Сначала подумал, что это техническое название, но гугл показал, что даже паттерн такой есть. Сейчас буду читать.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А блин, сам запутался. Это все же Data Transfer Object. Ну, я думаю Вы и сами уже нашли это и поняли разницу.
__________________
Reality.getBounds(this);

Старый 19.02.2014, 23:08
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Как пример класс Matrix. Одноимённое свойство есть у всех ДО и при помощи этого класса, можно изменить несколько свойств сразу
Когда?! Когда ты отличишь класс от объекта? Свойство ссылается на объект (инстанс, зкземпляр) класса (типа) Matrix. Не на класс Matrix ни разу. Не на класс, а на объект. Объект этого класса. Класс тут вообще не причем. Есть объект, значит, у него есть класс, по которому он был сделан. Класс есть и у класса, т.к. сам класс является объектом. Чума.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 19.02.2014, 23:48
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 9  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Когда ты отличишь класс от объекта?
я понимал разницу ещё в первый раз, но не мог быть уверен. Теперь я уверен, что класс, это класс, а объект, это его экземпляр. Так же я понял разницу между типом Object и Class.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
аве мария
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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