PDA

Просмотр полной версии : ООП и ООП воФлеш... это что две большие разницы?!


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

а почитать на эту тему можно здеся скачать (http://www.vmstudio.com/arch/oopF5_ru.zip)