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

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

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

Регистрация: Jul 2007
Сообщений: 25
По умолчанию Вопрос про классы

Здравствуйте. Вопрос про классы.
Есть два класса: A и B.
Код:
class A {
    var x,y,z:Number;
    function A(){
        x=0;
        y=0;
        z=0
    }
}
class B {
    var Av:A;
    function B(FAv:A){
        Av=FAv;
    }
    function catch(){
        trace("catched");
    } 
}
При создании объекта класса B указывается ссылка на объект класса A.Необходимо, чтобы по изменению переменных внутри Av через B (B.Av.x=5, к примеру) вызывалась функция catch.

Дополнительная информация:
Можно, конечно же, создать ссылку внутри A на B, создать в A свойства и при set этого свойства выполнять, к примеру, Bv.catch. Но так не хотелось бы делать, потому что у меня не обязательно A связан с B, но обязательно B связан с A, а значит, хотелось бы свой "замысел" осуществить из B.

Старый 16.07.2007, 22:57
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Геттеры и сеттеры в помощь.

Старый 16.07.2007, 23:12
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. Вам надо срочно пересмотреть подход к названию переменных. Названия а-ля A.b.Av.Bv.e.vB.dA.xE сразу выключают в голове логический блоки. В название должны быть видно, что отражает переменная, если x,y,z понятно, то Av не несет в себе ни какой информативной нагрузки.
2. В большой быквы пишут только имена классов или констант (но там все с больщой буквы), а все останое начинаетс с маленькой. Поэтому переменных Av и FAv быть не может.
3. catch не может быть именем функции, это зарезервированное слово
4. Вам надо смотреть в сторону слушателей, то есть в B подписаться на события в A, а из А при изменении состояния переменной, рассылать события зарегистрированным слушателям.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.07.2007, 03:22
Pasha L вне форума Посмотреть профиль Отправить личное сообщение для Pasha L Найти все сообщения от Pasha L
  № 4  
Ответить с цитированием
Pasha L

Регистрация: Jul 2007
Сообщений: 25
iNils,
Спасибо за советы. Извините, если мой код неудобен для вашего восприятия. Но вы говорите здесь не по теме - я не просил учить меня программированию. Умею и сам поучить могу, если есть необходимость.

Вместо catch может быть что угодно - это, что, я думаю, очевидно, не принципиально.

А теперь по теме, насчет классов в AS:
Как именно использовать геттеры и сеттеры? Не придется ли мне ставить,к примеру, три пары гет-сет в B (на Av.x (или как вам удобнее называть эту переменную, iNils) Av.y и Av.z)? Как именно организовать это дело, подскажите.

Хотел бы подчеркнуть, то что указал в первом посте темы: я знаю, что можно сделать ссылку в A на B (как будто, на родитель), и с помощью сеттера при присваивании значений свойствам x, y или z объекта класса A посылаать надлежащие посылки по ссылке на B. Но хотелось бы осуществить свою задумку, не затрагивая структуру класса A, а работая только со структурой B.

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

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Цитата:
Сообщение от Pasha L
Не придется ли мне ставить,к примеру, три пары гет-сет в B (на Av.x (или как вам удобнее называть эту переменную, iNils) Av.y и Av.z)?
Из-за этого набора букв, действительно, как говорил iNils, ничего не понятно, даже в вашей цитате. А что плохого в нескольких геттерах?
__________________
"We Are The Champions My Friends!" Queen

Старый 17.07.2007, 17:12
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 6  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Первый:
Код:
import mx.events.EventDispatcher;

class A 
{
	private var dispatchEvent:Function;
	
	public var addEventListener:Function;
	public var removeEventListener:Function;

	private var _myProperty:Number;
	
	/**
	 * Конструктор.
	 */
	public function A()
	{
		EventDispatcher.initialize(this);
	}

	/**
	 * Свойство.
	 */
	public function set myProperty(value:Number)
	{
		this._myProperty = value;
		this.dispatchEvent({type:"change"});
	}
	
	public function get myProperty():Number 
	{
		return this._myProperty;
	}
}
Второй:
Код:
import mx.utils.Delegate;
import A;

class Example 
{
	private var _a:A;
	
	/**
	 * Конструктор.
	 */
	public function Example()
	{

	}
	
	/**
	 * Свойство. Используемый экземпляр класса A.
	 */
	public function set a(value:A):Void 
	{
		if(value)
		{
			this._a = value;
			this._a.addEventListener("change", Delegate.create(this, this.changeHandler));
		}
	}
	
	public function get a():A 
	{
		return this._a;
	}

	/**
	 * Метод. Обработчик события, вызываемого при изменении свойства myProperty объекта a.
	 */
	private function changeHandler(event:Object):Void
	{
		trace("changed");
	}
	
}
Пример:
Код:
import A;
import Example;

var a:A = new A();
var example:Example = new Example();
example.a = a;
a.myProperty = 10; // trace: "changed"

Старый 17.07.2007, 10:20
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну если вы знаете, как программировать, то тогда вы можете сделать все самостоятельно.

Старый 17.07.2007, 13:35
Pasha L вне форума Посмотреть профиль Отправить личное сообщение для Pasha L Найти все сообщения от Pasha L
  № 8  
Ответить с цитированием
Pasha L

Регистрация: Jul 2007
Сообщений: 25
__etc, умение программировать и знание языка программирования - разные вещи. Я думаю, что заметно, что iNils несколько отошел от темы в своем посте №4.

Так. Значит. CorC предлагает так? (я изменил _специально_ некоторые имена, чтобы участвующим в теме было легче его воспринимать)

Код:
class Class1 {
    private var xVariable,yVariable,zVariable:Number;
    private var class2Variable:Class2;
    function Class1(argumentOfClass2:Class2){
        class2Variable=argumentOfClass2;
        xVariable=0;
        yVariable=0;
        zVariable=0;
    }
    public function set x(argument:Number){
        xVariable=argument;
        class2Variable.theFunctionINeedToCall();
    }
    public function set y(argument:Number){
        yVariable=argument;
        class2Variable.theFunctionINeedToCall();
    }
    public function set z(argument:Number){
        zVariable=argument;
        class2Variable.theFunctionINeedToCall
    }
    public function get x(){
        return xVariable;
    }
    public function get y(){
        return yVariable;
    }
    public function get z(){
        return zVariable;
    }
}
class Class2 {
    var class1Variable:Class1;
    function Class2(argumentOfClass1:Class1){
        class1Variable=argumentOfClass1;
    }
    function theFunctionINeedToCall(){
        trace("called");
    } 
}

Код программы:
var objectOfClass1:Class1;
var objectOfClass2:Class2;
objectOfClass1=new Class1(objectOfClass2);
objectOfClass2=new Class1(objectOfClass1);
objectOfClass1.x=5;
Да, это одно из решений проблемы. Но я повторюсь: хотел бы решить свою задачу, не затрагивая структуры класса Class1 (оставив в нем только переменные x, y, z, не задействовав переменную class2Variable и не задействовав гет-сеты в Class1)

Старый 18.07.2007, 00:50
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от Pasha L
Я думаю, что заметно, что iNils несколько отошел от темы в своем посте №4.
Совет по теме был под пунктом 4. А 1-3 это не советы как вам прогроммировать (может хоть иероглифами переменные называть), а как сделать так, что бы приходя сюда задавать вопросы, вы быстрее бы получали на них ответы, многие увидя абракадабру в вашем коде, просто закроют тему, и вы со своим умением программировать, ответа можете и не дождаться.

PS. Модератор всегда по теме говорит
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.07.2007, 20:20
Pasha L вне форума Посмотреть профиль Отправить личное сообщение для Pasha L Найти все сообщения от Pasha L
  № 10  
Ответить с цитированием
Pasha L

Регистрация: Jul 2007
Сообщений: 25
Cпасибо. Буду втыкать

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

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

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


 


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


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