Oberon space
General Category => Общий раздел => Тема начата: adva от Октябрь 19, 2013, 08:40:29 am
-
Заведу отдельную тему.
Если я правильно понял, то в О7 нет связанных с типом процедур.
Как должно быть изменено следующая строка из КП:
PROCEDURE (op: Op) Do
Я правильно понял, что надо у типа Op задать методо Do ? Как то так
TYPE
Op = RECORD
Do:PROCEDURE
END
И как потом задать текст этой процедуры? Просто присвоением?
-
Можно делать так, как это делается в gtk. Т.е.
PROCEDURE (op: Op) Do (x, y : INTEGER);
превращается в
PROCEDURE Do(op: Op; x, y: INTEGER);
-
Можно делать так, как это делается в gtk. Т.е.
PROCEDURE (op: Op) Do (x, y : INTEGER);
превращается в
PROCEDURE Do(op: Op; x, y: INTEGER);
Но вызов получается довольно многословным:
ModuleName.Do(op, 100,500);
Вместо
op.Do(100,500);
-
Ага, особенно если учесть, что свойства Op извне доступны только на чтение (если я правильно понял).
-
Ага, особенно если учесть, что свойства Op извне доступны только на чтение (если я правильно понял).
Давай код (модуль) целиком - скажу что там видно, а что нет.
-
Давай код (модуль) целиком - скажу что там видно, а что нет.
Да не, это я про многословность указанную выше (Modul.Do(Op), вместо Op.Do()). В этом же случае в процедуре Do нельзя присваивать свойства у Op ?
Модуля пока нет, пока только продумываю, чего надо. И пробую по мелочи
-
Заведу отдельную тему.
Если я правильно понял, то в О7 нет связанных с типом процедур.
Как должно быть изменено следующая строка из КП:
PROCEDURE (op: Op) Do
Я правильно понял, что надо у типа Op задать методо Do ? Как то так
TYPE
Op = RECORD
Do:PROCEDURE
END
И как потом задать текст этой процедуры? Просто присвоением?
Ну да, процедурная переменная, которой при создании объекта присваивается нужная процедура-метод.
-
Давай код (модуль) целиком - скажу что там видно, а что нет.
Да не, это я про многословность указанную выше (Modul.Do(Op), вместо Op.Do()). В этом же случае в процедуре Do нельзя присваивать свойства у Op ?
Поля записи она (Do) менять может. Особенно если объявить Do как PROCEDURE Do(VAR op: Op; x, y: INTEGER);
-
Modul.Do(Op), вместо Op.Do()
Op.Do(Op)
-
Modul.Do(Op), вместо Op.Do()
Op.Do(Op)
Во-первых лишний уровень косвенности (работает медленнее), во-вторых лишний расход памяти (если переменных аля Op будет много - то расход памяти будет существенный). В третьих - тот же самый синтаксический оверхед:
ModuleName.Do(VariableName);
VariableName.Do(VariableName);
-
лишний расход памяти (если переменных аля Op будет много - то расход памяти будет существенный).
С учётом, что в Оберонах все методы являются виртуальными, лишнего расхода памяти, по сравнению с ООП версией, нет
-
лишний расход памяти (если переменных аля Op будет много - то расход памяти будет существенный).
С учётом, что в Оберонах все методы являются виртуальными, лишнего расхода памяти, по сравнению с ООП версией, нет
Предлагаю еще раз перечитать контекст :-)
В Обероне НЕТ методов.
-
лишний расход памяти (если переменных аля Op будет много - то расход памяти будет существенный).
С учётом, что в Оберонах все методы являются виртуальными, лишнего расхода памяти, по сравнению с ООП версией, нет
Предлагаю еще раз перечитать контекст :-)
В Обероне НЕТ методов.
Как бэ речь шла о компонентном паскале, который суть диалект оберона и в нём методы есть, ну пусть они и называются "связанные с типом процедуры".
-
лишний расход памяти (если переменных аля Op будет много - то расход памяти будет существенный).
С учётом, что в Оберонах все методы являются виртуальными, лишнего расхода памяти, по сравнению с ООП версией, нет
Предлагаю еще раз перечитать контекст :-)
В Обероне НЕТ методов.
Как бэ речь шла о компонентном паскале, который суть диалект оберона и в нём методы есть, ну пусть они и называются "связанные с типом процедуры".
Нет, речь шла о Обероне. Предлагалось писать так:
Modul.Do(Op), вместо Op.Do()
Op.Do(Op)
Соответственно Op будет с собой таскать пачку процедурных полей. На что я и заметил, что это оверхед.
-
Да, это для Оберона, а не для КП. Да, заводится лишняя переменная. Но если модуль экспортирует несколько типов, то в момент инициализации соответствующих переменных им могут присваиваться разные процедуры в одно и то же поле. Полиморфизм.