PDA

Просмотр полной версии : Вопрос по классам


ir73
13.12.2005, 18:05
В чем понт использования AddEventListener() в классе?
------------------------------------------------
class TestClass extends MovieClip{
function TestClass(){
trace("constructor");
}
public function onRollOver(){
trace("rollover");
};
}

или такой вариант

---------------------------------------------
import mx.utils.Delegate;

class TestClass extends MovieClip{
function TestClass(){
trace("constructor");
this.addEventListener("rollover",Delegate.create(this,onRoll));
}


public function onRoll(){
trace("rollover");
};
}

ir73
13.12.2005, 18:23
В смысле интересует смысл использования Delegate с компонентами (если их так можно назвать - [InspectableList] в классе, привязаном к мувику.)

s_u_m_p
13.12.2005, 20:00
ты хоть сам понял что написал? у тебя оба твоих класса дадут ошибку при компиляции, потом при чем тут [InspectableList]?

ir73
18.12.2005, 13:21
это почемуже? Первый класс не даст никакой ошибки!

Antares
18.12.2005, 18:15
Мне интересно, задающий вопрос хотя бы раз разрабатывал что-нибудь с помощью AS2? :)

Представим себе класс..

class Foo
{
private var __XMLObj:XML;
private var __nodeName:String = "author";

public function Foo ( url:String )
{
init();
loadData( url );
}

private function init() : Void
{
__XMLObj = new XML();
__XMLObj.ignoreWhite = true;
__XMLObj.onLoad = function( success:Boolean )
{
// Тут начинается самое интересно.
// Надо как-то обратиться к __nodeName
}
}

private function loadData( url:String ) : Void
{
__XMLObj.load(url);
}
}


Можно делать в методе ссылки на самого себя, но по-моему это то еще извращение, особенно, если надо будет добраться в еще один вложенный обработчик.

Поэтому...

import mx.utils.Delegate;

class Foo
{
private var __XMLObj:XML;
private var __nodeName:String = "author";

public function Foo ( url:String )
{
init();
loadData( url );
}

private function init() : Void
{
__XMLObj = new XML();
__XMLObj.ignoreWhite = true;
__XMLObj.onLoad = Delegate.create(this, onLoadHandler);
}


private function onLoadHandler ( success:Boolean ) : Void
{
// TODO
}

private function loadData( url:String ) : Void
{
__XMLObj.load(url);
}
}

Ser D
18.12.2005, 20:56
Ребят, не сочтите за тупость. Но всегда хотел спросить, и боялся.

Зачем нужны классы, и объекты???!

Простой примерчик, или даже на пальцах показать, не сочтите за труд.

П.С.
Оч хочу понять.

Antares
18.12.2005, 21:24
Раз еще не понял, значит тееб и правда не нужны. Я не думаю, что кто-то захочет писать пример в ответ.

Самое простое, что приходит в голову: скоро новый год, подумай, как ты программный снег, учитывающий ветер будешь делать? ООП эту задачу очень сильно упрощает: делаешь класс "снежинка" и задаешь ему поведение. Можно сделать еще один, контроллер. Это самый тупейший пример.

Можно расширять классы, добавляя функционал, который в данной версии не доделали макромедийцы.

Там, где есть неоднократная работа с серверной стороной, без ООП, на котором строятся фреймворки, слишком много времени будет теряться зря.

В остальном -- сам решай, нужно или нет. Для меня ответ очевиден.

ir73
18.12.2005, 21:28
а что мешает так сделать?
import mx.utils.Delegate;

class Foo
{
private var __XMLObj:XML;
private var __nodeName:String = "author";

public function Foo ( url:String )
{
init();
loadData( url );
}

private function init() : Void
{
__XMLObj = new XML();
__XMLObj.ignoreWhite = true;
__XMLObj.onLoad = onLoadHandler;
}


private function onLoadHandler ( success:Boolean ) : Void
{
// TODO
}

private function loadData( url:String ) : Void
{
__XMLObj.load(url);
}
}

ir73
18.12.2005, 21:30
И вообще я хотел узнать в чем отличия данных двух классов, данных в первом посте? То есть в чем суть использования листенера, если обработчик можно повесит прямо на класс (который экстендит мувик)

Antares
18.12.2005, 21:30
А ты попробуй, куда у тебя будет this указывать, сможешь ли ты обратиться к private-свойствам и т.п.

Прежде чем спорить лучше попробовать.

Nirth
18.12.2005, 21:31
вопрос на засыпку, а нафига вверху импорт стоит?
а твой пример..ну протрейсь this в onLoadHandler.

Antares
18.12.2005, 21:33
И вообще я хотел узнать в чем отличия данных двух классов, данных в первом посте? То есть в чем суть использования листенера, если обработчик можно повесит прямо на класс (который экстендит мувик)
То, что в первом посте, я бы делать не стал. Это ненужное усложнение, не дающее выгоды. А как говорили умные товарищи Фаулер и Бек: keep it simple.

ir73
18.12.2005, 21:36
Antares,
а вот это уже интересно. В чем так усложнение? Наглядность кода же гораздо выигрышнее в первом примере!

ir73
18.12.2005, 21:41
Antares,
И как бы ты в таком случае переписал бы первый пример?

Antares
18.12.2005, 21:47
Ты не понимаешь немного. В первом посте onRollOver -- просто наследуемый метод, а не твой обработчик. Не надо в этом случае переносить области видимости, все за тебя уже перенесли.

А в примере, который привел тебе я, забив на Delegate ты вынужден будешь изобретать цепочку ссылок.

Мне нравится позиция вот таких вопрошающих. Приходит человек на форум с вопросом "зачем нужен Х". Ему отвечают. Он в ответ "но бла бла бла!!!" -- ему отвечают еще раз. Он настаивает на том, что есть средства лучше, хотя вопрос ставился совершенно не так.

Может, стоит задавать вопрос как "в чем преимущества средства Х?" Или хотя бы делать пометку: "зачем нужно средство Х? (все равно потом скажу, что У лучше)".

ir73
18.12.2005, 21:53
А в примере, который привел тебе я, забив на Delegate ты вынужден будешь изобретать цепочку ссылок.

во, тут я понял.


"в чем преимущества средства Х?"
Именно это я и хотел узнать.

-----

И все же, касательно моего примера, как бы вы написали код?

Nirth
18.12.2005, 21:55
одно из главных приемуществ - это стандартный метод перевода области видимости метода. тоесть если я потом увижу в коде Delegate я сразу буду знать, что это, и буду знать что искать.

UPDATED
твой второй пример меня озадачивает, ты инициализировал класс через EventDispatcher.initialize() ? что бы использовать addEventListener ?

Antares
18.12.2005, 21:57
И все же, касательно моего примера, как бы вы написали код?
Оставил бы самый верхний вариант.

Antares
18.12.2005, 21:58
Если говорить о "лучших техниках", я бы никогда не экстендил MovieClip без лишней необходимости. Почему -- еще почти 2 года назад отлично описал Мук.

ir73
18.12.2005, 22:00
Почему -- еще почти 2 года назад отлично описал Мук.

если можно, то линк.

Nirth
18.12.2005, 22:02
не помню в какой точно главе было написанно, вроде про ImageLoader
вобщем ссылка на инфу о книге http://www.moock.org/eas2/

Ser D
19.12.2005, 01:28
А ты попробуй, куда у тебя будет this указывать, сможешь ли ты обратиться к private-свойствам и т.п.

Прежде чем спорить лучше попробовать.

Я наверно чего-то не знаю.
Плиз скажи, что такое private-свойства?
и как к ним обращаться?
+ Зачем?

Прости за глупость.
Но нужно наконец когда-то узнать всё об этих объектах и классах.

Antares
19.12.2005, 02:03
Читай (http://novemberain.com/livedocs/Help/UsingActionScript/00001049.html)

Ser D
19.12.2005, 02:31
Тяжеловато.
Р*тот раздел кратко описывает основным принципам, используемым РїСЂРё разработке объектно-ориентированных программ. Р*ти принципы описаны более глубоко РІ оставС?ейся части этой главы, наряду СЃ тонкостями РёС… реализации РІ Macromedia Flash MX 2004 Рё Macromedia Flash MX Professional 2004.

Чтобы изучить принципы объектно-ориентированного программирования, смотри следующие топики:
Лично уменя это набор символов, а не текст.

Пожалуйсто просветите!
Просто две страки, зачем нужны классы, и зачем объекты.

Antares
19.12.2005, 02:33
Кодировку поменяй (utf-8). Если ты впервые в жизни открыл браузер и начинаешь программировать -- увы, будет тяжело. Но надо преодолеть.

Nirth
19.12.2005, 02:33
Кодировка - UTF 8 поставь в ручную

Две строки:
Классы жутко удобная вещь, определяют тип объектов.
Объекты жутко удобная вещь, их взаимодействие дает возможность мыслить так же, как и в жизни.

Если интересует информация купи книжек, не хватит и двух глав книги чтоб объяснить ( у меня ушло 2 книги, по C# чтоб въехать какая это клевая штука )