PDA

Просмотр полной версии : как правильно между классами в as3 передавать объект?


zhukov
19.07.2010, 21:32
Всех приветствую!
Разбираю as3, не могу понять - как сделать
В классе А создан объект (класс) 1 со значением 2
Из класса А вызывается класс Б
Потом из класса Б вызываются классы Д,Е
Также из класов Д, Е в любое момент может быть вызван класс Б или Е
Как среди классов А,Б,Д,Е передавать объект (класс) 1 со значением 2 которое может меняться в процессе не через конструктор принимающего класса, а храня его как какой то глобальный объект?

в as2 все новые переменные доступны в любом месте
а как это делать в as3 хочу понять

mikhailk
19.07.2010, 21:53
http://www.flasher.ru/forum/showthread.php?t=142359

Только Вы не совсем правильно понимаете парадигму программирования. Классы не вызывают друг друга.

Nirth
19.07.2010, 22:08
Только Вы не совсем правильно понимаете парадигму программирования
Что такое парадигма программирования?

mikhailk
19.07.2010, 22:11
http://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%B8%D0%B3%D0%BC%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8 F


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

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

Nirth
19.07.2010, 22:15
Но обмен данными между Классами не противоречит Парадигме вобщем =) он противоречит конкретной ( ООП + Инкапсулирование ) композиции программирования =)

mikhailk
19.07.2010, 22:19
Имхо, обмен данными между объектами через глобальные переменные в определенном смысле противоречит парадигме ООП, поскольку по сути является "АНТИинкапсуляцией". :) Однако, к чему этот философский спор и именно тут? :D

Я считаю, что если потребовались глобальные переменные, то это означает неправильное проектирование, а если они появляются в уже готовых приложениях, то это 99% - костыли. Но они предусмотрены разработчиками языка - и это тоже факт.

Nirth
19.07.2010, 23:26
А чем еще заниматся в понедельник вечером?

По делу – передавать сообщения между объектами для новичков – оптимально либо через события, либо через реализацию Observer, примеры которой можно найти на Википедии и туче других сайтов

mikhailk
20.07.2010, 00:59
Ну да :)
Паттерн Observer - это именно для новичков :)

Котяра
20.07.2010, 01:25
Ну да :)
Паттерн Observer - это именно для новичков :)
Ъ флэшеры не поняли вашей иронии))

Nirth
20.07.2010, 02:10
Observer это 3 класса, для новичка будет неплхой тренировкой, реализовать 3 класса на AS.

Если мы говорим вообще о первом опыте программирования, человеку стоит пока меньше думать об абстракция, и просто пописать функции, и вызвать их, смотреть что делают, из кадра.

mikhailk
20.07.2010, 11:42
я насчитал один класс и один интерфейс :)


//файл IObserver.as
package
{
public interface IObserver
{
function notify(obj:Object):void;
}
}

//файл ExchangeRate.as
package
{
public class ExchangeRate
{
private static var _instance:ExchangeRate = null;
private var observers:Array = [];
private var _exchangeRate:Object;

public function ExchangeRate()
{
if (_instance == null) throw new Error('Model Singleton!');
}

public static function getInstance():ExchangeRate
{
if (_instance == null) {
_instance = new ExchangeRate();
}
return _instance;
}

public function get exchangeRate():Object
{
return _exchangeRate;
}
public function set exchangeRate(value:Object):void
{
_exchangeRate = value;
this.notifyObservers();
}

public function registerObserver(value:IObserver):void {
this.observers.push(value);
}

private function notifyObservers():void {
for each(var observer:IObserver in this.observers) {
observer.notify(this);
}
}
}
}



Но не суть, конечно.

http://ru.wikipedia.org/wiki/Observer_%28%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C%29#ActionScript

Nirth
20.07.2010, 13:17
Ну надо же реализовать IObserver, плюс неплохо иметь выделенный объект – Message например, или как сейчас модно называть - Signal =)