Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   ООП и ООП воФлеш... это что две большие разницы?! (http://www.flasher.ru/forum/showthread.php?t=32181)

Pietrovich 26.05.2002 19:18

ООП и ООП воФлеш... это что две большие разницы?!
 
Задача:
//ну типа дипломная работа (и это на кафедре которая к программированию никак не отностися, разве что на одном с ними ФАКультете !!!)
написать программу, иллюстрирующую работу РТК (типа Роботизированный Технологический комплекс),
с возможностью рассчета оптимального алгоритма работы (в рамках технологической последовательности обработки детали) и моделирования в риалтайме работы РТК....

загвоздки:
1. структура РТК задается методом драг-енд-дропа, т.е. изначально не известно что попытается задать юзер :(
2. писать под РТ да еще и с анимацией... короче кроме флеша я ничего более удобного не нашел :(

алгоритмы я уже написал, правда проверялись на Паскале, т.е. математика уже есть, осталось перебить ее на ФЛЕШ (желательно 5 или 6)

Вот тут и начинаются проблемы!!!!

кусок кода на паскале (описание типов, чисто тестовый код для проверки алгоритмов)
=======================================================
type
_flags = object
working :boolean;
finished :boolean;
empty :boolean;
finishtime :integer;
end;

_tools = object (_flags)
origin :string;
zCounter :byte;
WorkTime :integer;
MoveTo :integer;
Install :integer;
Insert :integer;
Eject :integer;

procedure TstartNewJOB;
procedure TfinishJOB;
procedure Tejecting;
procedure TpassTime;
end;

_robot = object (_flags)


worktime :integer;
count :byte; {count of serving tools}
point :array [0..20] of _tools;
moveTable :array [0..20,0..20] of integer;
outs :array [0..100] of integer;
sJob :boolean;
outCounter :byte;
inCounter :byte;
timer :integer;
position :byte;
zID :byte; {etap obrobki detali}
target :byte;
unloading :byte;
loading :byte;

procedure rPassTIME;
procedure rInit;
function rFindTarget:byte;
procedure rStartNewJOB(startTarget:byte);
procedure rDieHard;
end;

=======================================================

обратите внимание на свойство point у типа _robot это список обслуживаемых роботом железяк (станки конвеееры и т.п.)
для решения данной задачи выгодно разбить сложный многороботный РТК на кучку простых - однороботных
т.е. я создаю объект робот1 2,3, ... и т.д. который собственными методами решает свои задачи, остается только синхронизировать работу всех роботов...

при попытке сделать то-же самое на Флешевых объектах происходит грандиозный облом:

Код:

                //описание первых 2х типов пропускаю, методов тоже...
        _tools =
                {
                        outFile                :null,
                        working                :false,
                        finished        :false,
                        empty                :false,
                        finishTime        :null,
                        origin                :null,        //string
                        zCounter        :null,        //byte
                        WorkTime        :null,        //integer
                        MoveTo                :null,        //integer
                        tInstall        :null,        //integer
                        tInsert                :null,        //integer
                        tEject                :null,        //integer
                        TstartNewJob        :        function ()
                                                        {
                                                                this.finished = false;
                                                                this.workinf=true;
                                                                this.finishtime = this.workTime;
                                                                this.empty=false;
                                                                this.zCounter++;
                                                        },
                        TfinishJob                : function ()
                                                        {
                                                                this.finished=true;
                                                                this.working=false;
                                                                this.finishTime=0;
                                                                this.empty=false;
                                                        },
                        TEjecting                : function ()
                                                        {
                                                                this.finished=false;
                                                                this.working=false;
                                                                this.finishtime=0;
                                                                this.empty=true;
                                                        }
                }

        _robot =
                        {
                        WorkTime        :null, //integer
                            count                :null, //byte количество обслуживаемых единиц оборудования
                            point                :new array(), //вариант new Array(_tools) вообще не проходит...
                            moveTable        :new array([null],[null]),
                            outs                :new array(null),
                            sJob                :null,        //boolean
                            outCounter        :null,        //byte
                            inCounter        :null, //byte
                            timer                :null,        //integer
                            cPosition        :null, //byte
                            zID                        :null, //byte, etap obrobki detali
                            rTarget                :null, //byte
                            unloading        :null, //byte
                            loading                :null, //byte
                        }
        // теперю попітаемся проверить что получилось:
        robot1 = new Object(_robot);
        robot2 = new Object(_robot);

        //трабл первый и не последний
        robot1.count = "robot 1"; //пофиг типы. главное - трабл
        robot2.count = "robot 2";
        trace (robot1.count);

        !!!!!!!!!!!!!!!!!!!!!!
        видим robot 2

        та что? robot1 b robot2 не разные объекты ?!
        причем появляется еще и хитрый _robot который ==  robot2 :((


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

        в принципе устрит и вариант каждый новый объект генерить с нуля, но как тогда задавать имена этих объектов???


        //трабл 2
        или как залабать массив объектов ???


        qqq = new Array(_tools);

        и обращения типа
        qqq[2].origin="станок" не проходят :(

        а вариант типа

        mA = new Array();
        t = new Object(_tools);
        t.origin="sdfsdfs";
        mA[1]=t;
        t.origin="wete;lrjoyjthjltyhltjholjtojhtoyh";
        mA[2]=t;
        приводит  к траблу №1, т.е. mA[1].origin== "wete;lrjoyjthjltyhltjholjtojhtoyh" :(

хелп!!! может я чего-то не понимаю, но ООП чуть-чуть отличается от простого расставления "."

З.Ы. в принципе я могу использовать и мувики вместо математической модели, но тогда прога так тормозит... :((

Iv 27.05.2002 14:02

Цитата:

мне нужны отдельные, полностью независымые экземпляры, а вместо них я получаю тупые ссылки на прототип (
потому как надо:

robot1 = new _robot()
robot2 = new _robot()

Цитата:

или как залабать массив объектов ???
qqq = []
tools = new Tools()
qqq.push (tools)
qqq[0].origin="станок"

- в подробности твоего скрипта не вдавался, но примерно так...

Iv 27.05.2002 14:05

на будущее:
не пугай людей тоннами скрипта.
попробуй свести задачу к очень конкретному вопросу.
потому как разбирать две тонны кода никому не прет :p

Iv 27.05.2002 14:16

аа.. проворонил...
надо еще задавать так:
_tools = function (){
описываем
}

и то же самое с _robot

а почитать на эту тему можно здеся скачать


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

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