Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   [FMX] Object-oriented programming (http://www.flasher.ru/forum/showthread.php?t=36535)

SphinX 30.08.2002 23:27

[FMX] Object-oriented programming
 
Считайте, ... что это [man]ual.

Итак ... ... ...

в основном мысли из книги Гради Буча "Обьекно-ориентированный анализ и проектирование" советую!!!

Концепции ООП реализованные в FMX.
  • Инкапсуляция.
    разделение элементов объекта, определяющих его устройство и поведение, думаю, мало где её нет ...
  • Наследование.
    это реализация такого отношения между классами, что подкласс(который наследует) повторяет структуру и поведение своего суперкласса(который наследуется)
  • Полиморфизм.
    <поли> - много <морфос> - форма; к сожалению я не смог найти достаточно красивого определения, так что придётся на пальцах объяснять ... представьте себе некое дерево классов (допустим пространтвенных фигур) у кждого класса: и у элипсоида, и у куба есть метод "рисовать", НО ведь фигуры разные поэтому и методы должны работать по-разному; вот это и есть полиморфизм, когда один и тот же метод выполняется по-разному для разных классов
  • Механизм виртуальных функций.
    на примере покажу :D
теперь пример кода реализующий сразу всё ...
Код:

//определяем суперкласс
function SuperClass()
{
        trace("construction of class: SuperClass");
        this.property = "property of SuperClass";
        this.method = function()
        {
                trace("method of class: SuperClass");
                trace(this.property);
        }
}

//определяем подкласс
function SubClass()
{
        this.__proto__ = new SuperClass();
        trace("construction of class: SubClass");
        this.method = function()
        {
                this.__proto__.method();
                trace("method of class: SubClass");
        }
}

//работаем
trace("SuperClass--------------");
super = new SuperClass();
super.method();
trace("SuperClass--------------");

trace("SubClass--------------");
sub = new SubClass();
sub.method();
trace("SubClass--------------");

а это вывод этого кода ...
Код:

SuperClass--------------
construction of class: SuperClass
method of class: SuperClass
property of SuperClass
SuperClass--------------
SubClass--------------
construction of class: SuperClass
construction of class: SubClass
method of class: SuperClass
property of SuperClass
method of class: SubClass
SubClass--------------

а теперь вопрос: когда писал слово "super" в редакторе FMX оно вдруг засветилось, непонятно, что же оно даёт ???

Nox Noctis 31.08.2002 01:34

ой какой ты умныыый :)
прям страшно становится :)

а в хелп посмотреть ты конечно не догадался ? :)

SphinX 31.08.2002 08:05

я, короче, экспериментировал с переводом на руссий документации по FMX и теперь у меня ни русской ни английской нету :p
а субж затеял только из-за того, что не нашёл ничего о виртуальных функциях в обсуждении урока на эту же тему ...

SphinX 31.08.2002 09:12

super - это супер ... вот новая версия вчерашнего кода:
Код:

//определяем суперкласс
function SuperClass()
{
        this.create();//пусть это стандартный конструктор
}

//определяем конструктор
SuperClass.prototype.create = function()
{
        trace("construction of class: SuperClass");
}

//это, что называется "some_method_or_property"
SuperClass.prototype.method = function()
{
        trace("method of class: SuperClass");
}

//аналогично с подклассом
function SubClass()
{
        this.create();
}

SubClass.prototype = new SuperClass();// !!!

SubClass.prototype.create = function()
{
        super.create();
        trace("construction of class: SubClass");
}

SubClass.prototype.method = function()
{
        super.method();
        trace("method of class: SubClass");
}

trace("-----------------------------");
one = new SuperClass();
one.method();
trace("-----------------------------");
two = new SubClass();
two.method();
trace("-----------------------------");


SphinX 31.08.2002 09:14

заметно красивше :cool: ...

Nox Noctis 31.08.2002 14:31

...ты кого-то хотел удивить раскидыванием пальцев ? :))
извини :) могу тебя огорчить :)

SphinX 31.08.2002 22:19

тебя не понимаю, почему же ты думаешь что это "раскидывание пальцев", я всё это положил в форум для пользы (если кончно это кому-нибудь надо :p ) если бы я зашёл на форум с месяц назад и увидел этот топик, то помог бы он мне ОЧЕНЬ сильно ...

а вот ты показываешь себя не с лучшей стороны, необоснованная критика понимаш ;)

у Ричарда Баха есть рассказик "Иллюзии", дык вот, цитата:
"Самые простые вопросы на самом деле самые сложные. Где ты родился? Где твой дом? Куда ты идешь? Что ты делаешь? Думай об этом время от времени и следи за тем, как меняются твои ответы."

Nox Noctis 31.08.2002 22:30

для ЧЬЕЙ пользы, можно поинтересоваться ? :)))

твои слова:
Цитата:

а субж затеял только из-за того, что не нашёл ничего о виртуальных функциях
а все вышеизложенное иллюстрирует только то, что ты догадался поглядеть в хелп только после наводящего вопроса :)))

пользы не видать совсем:
— в первом посте код не откомментирован, поэтому абсолютно не понятно КАК он иллюстрирует принцыпы ООП, которые ты привел выше...
— во втором посте откоментированы простые вещи, но нет коментариев про собсно тему поста - указатель super. ...

так что... ИМХО ты хотел показать, что разобрался в том, что написано в хэлпе, мол вот ты какой, северный олень :)))

если я не прав - я готов это признать... но тебе придется объяснить мне, что в моих словах не так :)))

SphinX 01.09.2002 08:00

мне обьяснять что такое ООП на примере FMX както даже неприятно было бы, я выложил исходники только как демонстрацию как ООП сделан на FMX (люди понимающие с первого взгляда разбурутся где предки где потомки, что и как)

(блин, заставляешь оправдываться :o )
про super я узнал когда писал такое символическое имя, редактор подсветил синтакс, и узнал как им пользоваться не из хелпа, а маленько поэкспериментировав с Flash - компонентами (и чуть пораньше, чем ты свой топик об этом выложил :p )
про северного оленя ты совсем палку загнул, на ACM'овских олмпиадах был? - нет, значит надо ещё думать кто олень :cool:
Цитата:

если я не прав - я готов это признать... но тебе придется объяснить мне, что в моих словах не так :)
:D :D :D

llllllllll 01.09.2002 08:10

Мдя = function(){
trace( this(мдя =)));
}

SphinX 01.09.2002 08:50

не понял ... :rolleyes:

Nox Noctis 01.09.2002 16:30

2llllllllll
а компилить твою функцию - в пятерке =))))

2SphinX
слушай, о чем мы вообще говорим ? :)

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

— так для чего все это, а ? ;))

...и какой-такой 'мой' топик про 'супер' ты имеешь в виду ? чего-то не припомню :)


зы: а асмовские олимпиады тут абсолютно не причем :) не надо начинать меряться органами, ладно ? :)

llllllllll 01.09.2002 23:19

хех - вот протрезвею, и поговорим =)
 
сабж

SphinX 03.09.2002 16:52

... вообще спор, конечно, не стоит нашего достопочтенного внимания, лучше обсудим мой последний топик ??? :D :D :D про линкование символов
думаю, мощное средство получится, если это то, что думаю я:
во время проигрывания можно с определённой URI загрузить swf'ку

SphinX 04.09.2002 20:55

2lexass
если что непонятно, пиши ...

SphinX 04.09.2002 21:03

2lexxas если что непонятно, пиши ...

Nox Noctis 04.09.2002 21:12

Цитата:

Оригинал написал(а) SphinX
2lexxas если что непонятно, пиши ...
8)))))))))
хы-хыыыы :)))))
правильно-правильно... объясни лехассу трудные места по части флэша и ООП в нем =))))) а то задолбал он своей сиростью и убогостью :)))
*катается по полу*

lexass 05.09.2002 10:32

ПИШУ
 
всЁ написал сюда:
http://flasher.ru/forum/showthread.php?threadid=36697
:/

WD` 05.09.2002 20:54

Хэлп
 
Код:

onClipEvent(load)
 {
  function Kvdr()
  {
    trace("OBJ")
  }
  Kvdr.prototype.go=function()
  {
    trace("GO")
  }
k=new Kvdr();
 }

onClipEvent (enterFrame)
 {
    k();
    // ничего не выводит почему?
    k.go()
    // выводит GO на каждый фрейм
 }


Nox Noctis 05.09.2002 21:05

а с какой радости
k();
должно вообще что-то выводить ?
...это же НЕ функция :))

WD` 05.09.2002 21:42

2 Nox Noctis:
 
огром пасиба:)


т.е. то, что наход между скобками выполняется только при создании экземпляра? (так кажется называется:))
function Kvdr()
{
trace("OBJ")
}

SphinX 05.09.2002 21:53

k = new Kvdr(); создаёт экземпляр класса Kvdr и конструктор выполняется только один раз когда надо экземпляр сконструировать ;)
у тебя плохой стиль, я бы конструктор отделил, см. выше

WD` 06.09.2002 00:40

Цитата:

Оригинал написал(а) SphinX
k = new Kvdr(); создаёт экземпляр класса Kvdr и конструктор выполняется только один раз когда надо экземпляр сконструировать ;)


эт я понял уже:)
Цитата:

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

WD` 06.09.2002 02:05

Хэлп-2
 
function Kvdr(n)
{
trace("kv."+n);
attachMovie("kv","kv"+n,n);
}

Kvdr.prototype.go=function(x,y)
{
obj=eval("kv"+n);
eval("k"+(n+1)).go(1,2);
// хотел обратится к след. объекту:( - флэш плюется на слишком длинный скрипт.. как сделать такое обращение?
}

k1=new Kvdr(1);
k2=new Kvdr(2);

k1.go(1,1);

Nox Noctis 06.09.2002 20:48

все просто :)
у тебя нет глобальной переменной 'n'...
то есть выражение
eval("k"+(n+1)).go(1,2);
интерпретируется как eval("k"+1).go(1,2); (вместо 'n' - пустое место)
...получаем рефлексивное замыкание :) то есть бесконечную рекурсию...

кстати,
obj=eval("kv"+n);
создает переменную 'obj' в том контейнере, где находится сама функция Kvdr... оно тебе надо ? :)


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

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