OberonCore
https://forum.oberoncore.ru/

Видеоуроки по Active Oberon, вопросы.
https://forum.oberoncore.ru/viewtopic.php?f=22&t=4309
Страница 1 из 1

Автор:  samuelspring [ Воскресенье, 14 Апрель, 2013 19:00 ]
Заголовок сообщения:  Видеоуроки по Active Oberon, вопросы.

Здравствуйте, уважаемые форумчане.

Позвольте представиться. Меня зовут Александр, я собираюсь записать серию видеоуроков по разработке на Active Oberon(далее буду, местами, упоминать как AO). Однако, у меня есть ряд вопросов, на которые я никак не нашёл ответа и некоторые утверждения, истинность которых хотелось бы уточнить у людей более разбирающихся.

О себе: студент 3-го курса специальности ИТ, имею опыт разработки на Black Box Component Builder, ну и относительно небольшой опыт на AO :) Сразу обозначу, что я - новичок, учусь, некоторые мои вопросы возможно покажутся глупыми, но тут уж не обессудьте. Лучше уточнить все непонятные моменты и на микрофон всё сказать правильно. Поправьте меня, пожалуйста, где буду не прав.

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

Итак, я бы хотел уточнить:
1. Чьими силами разрабатывается Active Oberon (и A2)? ETH? В сообщении о языке я выцепил информацию
Цитата:
Many experimental language extensions have been proposed for Oberon at, and outside of the ETH. Object Oberon [19], Oberon-2 [20], and Froderon [7] explored adding further object-oriented features to the language;
о том, что некоторые модификации Оберона разрабатывались и вне ETH. Русскоязычная википедия http://ru.wikipedia.org/wiki/Active_Oberon гласит, что
Цитата:
Это исследовательский проект, выполняемый группой проф. Гуткнехта (ETH, Цюрих).
то есть, всё-таки ETH, верно?

2. Определение модуля.
Цитата из публикации И.Е.Ермакова "Оберон технологии: что это такое?", страница 2.
http://store.oberoncore.ru/lib/article/oberontech.pdf
Цитата:
Обероны построены на гармоничном балансе структурного программирования и ООП. Архитектурной единицей программной системы является модуль. Это единица проектирования, разработки, инкапсуляции, компиляции, распространения, развертывания, загрузки и выполнения.
То есть, нормально ли будет, обьясняя, что такое модуль сказать, что:
а) Модуль - основной строительный блок в компонентно-ориентированной парадигме
б) Модуль - неделимая единица компиляции, загрузки в/выгрузки из памяти. То есть вы не можете скомпилировать (загрузить, выгрузить) полмодуля или треть модуля, только их целое число
в) Инкапсуляция имеет место только в модуле(экспорт*, экспорт только для чтения-)

3. Можно ли в A2 организовать подсистемы как в BlackBox?
Вообще, нужно ли думать в этом ключе? Имеет ли место такая организация исходников/объектных модулей в A2? Если да, то как её реализовать? Если нет, то как тогда? Всё в одном каталоге?

Взять, к примеру, папку */a2/source/. Все Mod файлы расположены в одном каталоге, хотя принципы названия модулей сохраняются, например BenchNew, BenchObjCount, BenchPingPong или VM%Module_Name%. Вроде бы ну и ладно, а вроде и беспорядок. Посмотрел вот эту тему http://forum.oberoncore.ru/viewtopic.php?f=22&t=4292. Пришла мысль о том, что можно исходники модулей раскидывать в подкаталоги Work и включать их в Paths.Search, а объектные модули пускай "падают" в Work/obj/ например.

Кстати, правильно ли я понял, что Paths.Work - это каталог, куда направляются продукты компиляции?

С другой стороны, не отпугнуть бы зрителя изобилием финтов, правок конфигурационных файлов только для того, чтобы просто организовать исходники. Обьясните пожалуйста, рассудите.

4. Можно ли в A2 просматривать интерфейс модуля как в BlackBox?
В BB это были символьные файлы, если я не ошибаюсь. Правой клавишей по имени модуля - Интерфейс - посмотрел, нашёл название процедуры и какие аргументы требует, применил у себя. Удобно. В PET(инструмент разработчика в A2) это только панель слева.

Может быть горячие клавиши какие для этого есть? Или компонент специальный для этой цели?

5. К какой модели работы приучать себя и зрителей?
Например.
0.1) Ставим задачу, разбираем на листке, выделяем задачи, сущности, алгоритмы, проектирование.
0.2) Составляем список необходимых модулей, строим схему их взаимодействий, проектируем интерфейс каждого из них.
0.3) Думаем о внутреннем устройстве модулей, внутренних процедурах, типах данных.

0.4) Открываем WinAOS

1) Открываем разрабатываемый модуль, настраиваем шрифт ввода на зелёный цвет(взято в одной из видеовстреч по BlackBox http://oberoncore.ru/projects/bb-hangouts, там Денисов Иван упомянул, что удобно новый, разрабатываемый код выделять отдельным цветом, старый, готовый отдельным), пишем код модулей, не забываем про ASSERT-ы. Код понравился - делаем весь текст модуля чёрного цвета, сохраняем модуль.
2) Продолжаем 1), периодически компилируя модули и запуская их, до тех пор, пока задача не решена

Т.е. традиционное: постановка задачи -> проектирование -> разработка -> отладка. Поделитесь, пожалуйста своим опытом. Всё-таки привычка - вторая натура, имеет смысл сразу заводить привычки хорошие.

6. Есть ли шаблоны, приёмы модульного тестирования(UT) в AO?
Вопрос тестирования приложений, особенно автоматизированного, насколько я знаю, больной и в рамках BlackBox-а. Тут у меня 2 варианта
1) Если имеем SuperModule.Mod, заводим SuperModuleTests.Mod и SuperTests.Mod (Super - это имя подсистемы такое :) ).

В *Tests.Mod файле тестируем интерфейс соответствующего модуля и заводим процедуру TestAll, в которой по порядку идут тесты.

А в SuperTests.Mod заводим только 1 метод TestSubsystem, который тестирует "подчинённые" модули тестирования. Однако, так мы можем протестировать только интерфейс.

2) Внутри самого модуля после всех процедур заводим тестовые процедуры TestFeatureA, TestFeatureB, ... TestAll

Цель у UT здесь - запустил команду, она тебе "Ок, всё по-прежнему работает" или "Всё работает, кроме А, Б, В". Хорошо, удобно, быстро. Однако, цель противоречит средствам. Вариант 1) как я понимаю идёт против идеологии оберонов, а именно - размножение сущностей без острой на то необходимости, вместо N модулей мы имеем 2N+1, да если они все в одной папке, да это только одна подсистема. Вобщем, в результате имеем хаос и ужас. Вариант 2), на мой взгляд сущая ахинея. У модуля внутри "опухоль" из модульных тестов, хотя я может быть ошибаюсь.

Опять же, может быть имеются готовые решения, компоненты для этой задачи? Можно выделить отдельную папку под тесты, сделать GUI-фрэймворк, в котором только генерируются модули тестов. Можно сделать TestsRunner, который использует рефлексию(а есть ли она в AO?) и запускает процедуру TestAll

7. Что такое макросы и как с ними работать?
Цитата из Tutorial.Text
Цитата:
Macros are invoked by pressing the Ins key while the cursor is placed behind a macro name.
Macro parameters are separated by ":"
Some helpful macros :
name:M MODULE ...
name:P PROCEDURE ...
classname:O TYPE classname = OBJECT ...
classname:superclassname:o TYPE classname = OBJECT(superclassname) ...
output macros: oi, os, oc take one identifier parameter
e.g. identifier:oi KernelLog.Int(identifier);
ol output line takes no parameters
debug macros: di, ds, dc, dr take one identifier parameter
e.g. identifier:ds KernelLog.String("identifier = "); KernelLog.String(identifier);
XML macros:
name:t <name></name>
similar:T

Я правильно понял, что макросы - это инструмент для быстрой генерации кода модуля/процедуры. То есть напечатал m, бацнул комбинацию клавиш и перед тобой шаблон модуля? Нужно ли вообще с ними работать?

8. Как совместить разработку в PET и макеты из GUIBuilder?
В смысле, как проектировать диалоги в GUIBuilder-е я понял примерно. А вот что потом с этими макетами делать не нашёл. Сколько ни смотрел примеры работы с GUI везде использовалось наследование от WM.BufferWindow, WMComponents.FormWindow итд, а элементы управления("контроллы") создавались прямо в коде. Ткните, пожалуйста в пример, как макет использовать.

9. Для рисования на 2D холсте нужно использовать WMGraphics? Что использовать для 3D рисования? Есть ли поддержка OpenGL?
В рамках курса хочу параллельно написать лабораторную по методам оптимизации - графика нужна для графического метода(http://ru.wikipedia.org/wiki/Графический_метод_решения_задачи_линейного_программирования).То есть нужно будет нарисовать оси, нарисовать область ограничений, нарисовать прямую и grad функции, может подписать. Вопрос в том, тот ли модуль я указал?

10. Для использования таблиц в GUI нужно использовать WMGrids? Если да, возможно ли пользователю редактировать содержимое ячеек?
Посмотрел примеры использования, везде ячейки заблокированы. (Т.е. как в Excel, например, два клика - ячейка редактируется - Enter). В BlackBox такое есть, реализовано ли здесь?

Классная таблица показана в программе Object Tracker. Последнюю можно запустить по Inspect->Objects.

11. Правильно я понял, что тип данных Rational из NdrRat.Mod - тип "дробь"?
Опять же, как в графическом, так и в симплекс методах часто приходится производить деление. Возникла мысль использовать дроби, дабы минимизировать погрешность деления (например, 5/3 != 1,67). Велосипед писать не слишком хочется.

12. Есть ли реализованная сущность - матрица? SVGMatrix.Mod?
Именно для математических нужд. Применяться будет в реализации метода Гаусса, симплекс метода итд.

13. Есть ли другие модули по работе со строками помимо Strings.Mod?
В частности, пригодилась бы процедура разворота строки. Да и вообще, для общего развития.

Фух, вроде бы всё. Жду ваших ответов, замечаний и разумной критики :) Спасибо за внимание.

Автор:  Иван Кузьмицкий [ Воскресенье, 14 Апрель, 2013 19:22 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Как я понял, работа над Active Oberon ведётся силами Native Systems Group: http://www.nativesystems.inf.ethz.ch/

Автор:  Александр Ильин [ Воскресенье, 14 Апрель, 2013 22:31 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
Здравствуйте, уважаемые форумчане.
Добро пожаловать! : )
samuelspring писал(а):
Позвольте представиться. Меня зовут Александр
А что же форумное имя не соответствует? Это меня зовут Александр, а вас - samuelspring. : ))
samuelspring писал(а):
Я правильно понял, что макросы - это инструмент для быстрой генерации кода модуля/процедуры. То есть напечатал m, бацнул комбинацию клавиш и перед тобой шаблон модуля? Нужно ли вообще с ними работать?
Всё правильно. Только не комбинацию клавиш, а одну-единственную клавишу Ins.

Есть специальный текстовый файлик, в котором набор макросов можно отредактировать. Макросы можно вызывать один из другого как процедуры. В макросы можно передавать параметры. Например, макрос "P" вставит скелет процедуры:
Код:
PROCEDURE ;
BEGIN
END ;
А если написать "Name:P", то макросу P будет передан параметр "Name", и тогда он выдаст вот такое:
Код:
PROCEDURE Name;
BEGIN
END Name;
Вообще, очень хороший и полезный механизм. Любую конструкцию языка программирования можно вставлять в текст нажатием двух-трёх клавиш. С соблюдением отступов, форматированием шрифтов (если не ошибаюсь) и так далее.

Автор:  Ярослав Романченко [ Воскресенье, 14 Апрель, 2013 22:35 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Попытаюсь ответить на все Ваши вопросы.
samuelspring писал(а):
1. Чьими силами разрабатывается Active Oberon (и A2)?
Дополню ответ Ивана. В настоящее время одним из самых активных разработчиков системы является Феликс Фридрих (Felix Friedrich) http://www.nativesystems.inf.ethz.ch/FelixFriedrich
samuelspring писал(а):
то есть, всё-таки ETH, верно?
Верно, Active Oberon и A2 разрабатываются в ETH.
samuelspring писал(а):
2. Определение модуля.
Модульность в A2 не отличается от модульности в BlackBox. Ермаков в этом знает толк, можете на его формулировки ориентироваться.
samuelspring писал(а):
3. Можно ли в A2 организовать подсистемы как в BlackBox?
Размещение всего в одном каталоге - наследие ОС ETH Oberon, в которой файловая система имела лишь один корневой каталог.
B нативной A2, запускаемой на голом железе, основная файловая система тоже имеет один-единственный корневой каталог.
Существует возможность монтирования других файловых систем или файлов в качестве файловых систем (ZipFS) с поддержкой каталогов. Поддерживается файловая система FAT32.
Но, в нативной A2 при обращении к любому модулю или файлу данных, если не указан полный путь, система будет искать его только в основном корневом каталоге. Компилированные модули тоже попадают в основной корневой каталог.
В WinAos/UnixAos ситуация немножко другая. Система ищет файлы в каталогах заданных в параметре Paths.Search, а компилируемые модули попадают в папку заданную в параметре Paths.Work. В списке путей в Paths.Search, пути указанные первыми имеют более высокий приоритет при поиске.
samuelspring писал(а):
Посмотрел вот эту тему http://forum.oberoncore.ru/viewtopic.php?f=22&t=4292
Мне такая организация видится удобной.

Автор:  Ярослав Романченко [ Воскресенье, 14 Апрель, 2013 22:54 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
9. Для рисования на 2D холсте нужно использовать WMGraphics? Что использовать для 3D рисования? Есть ли поддержка OpenGL?
Для 2D холста можно использовать WMGraphics. OpenGL подсистему скачать можно отсюда https://code.google.com/p/opengloberon/

Автор:  Ярослав Романченко [ Воскресенье, 14 Апрель, 2013 23:13 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
12. Есть ли реализованная сущность - матрица? SVGMatrix.Mod?
SVGMatrix.Mod не то.
В AO встроена поддержка векторов и матриц непосредственно в язык, и определены операции над ними. Подробное описание надо поискать. Эта часть воплощалась в компиляторе AO Феликсом Фридрихом по заданию Computational Medicine Research Group

Автор:  Ярослав Романченко [ Понедельник, 15 Апрель, 2013 15:55 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
4. Можно ли в A2 просматривать интерфейс модуля как в BlackBox? ... В PET(инструмент разработчика в A2) это только панель слева.
Да, да, как-раз в PET на той панели слева кнопочку Details нажимаете и можно бродить по интерфейсам импортированных модулей.
Ещё в A2 есть дизассемблер объектных модулей. Чтобы запустить дизассемблер нужно открыть File Manager и в нём два раза нажать мышкой на объектном модуле (файлы *.Obw в WinAos).
Вложение:
Disassembler.png
Disassembler.png [ 123.91 КБ | Просмотров: 12595 ]
А ещё есть такой документ A2 user guide and applications description
Вложение:
A2Documentation.pdf [2.6 МБ]
Скачиваний: 637

Автор:  Ярослав Романченко [ Понедельник, 15 Апрель, 2013 16:03 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
6. Есть ли шаблоны, приёмы модульного тестирования(UT) в AO?
Можно посмотреть TestSuite.Mod, с его использованием сделано большинство тестов в A2, в том числе и тесты компилятора.
Цитата:
MODULE TestSuite; (** AUTHOR "negelef"; PURPOSE "Simple testing framework"; *)

Автор:  Ярослав Романченко [ Понедельник, 15 Апрель, 2013 16:33 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
8. Как совместить разработку в PET и макеты из GUIBuilder?
Можно сохранить диалог в XML, а потом грузить его с помощью WMComponents.Load(filename) и связывать код с компонентами по имени.
Вот, я для делал тест на знание таблицы умножения.
Вложение:
mult.png
mult.png [ 21.26 КБ | Просмотров: 12587 ]
Вложение:
mult.zip [3.42 КБ]
Скачиваний: 384

Автор:  samuelspring [ Понедельник, 15 Апрель, 2013 21:39 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Если что - никуда не пропал) Здесь, читаю. Спасибо всем огромное за уже изложенные ответы и замечания!

Александр Ильин писал(а):
А что же форумное имя не соответствует? Это меня зовут Александр, а вас - samuelspring. : ))
Виноват, сила привычки) Отправил заявку на регистрацию до того, как ознакомился с правилами форума...

viewtopic.php?f=22&t=4292
Ярослав Романченко писал(а):
Мне такая организация видится удобной.
Вполне удобно, преимущества есть. Как вариант, можно на сетевой диск какой-нибудь перенаправить или репозиторий. Во всяком случае имеет смысл показать, что можно произвести такую настройку.

Автор:  Ярослав Романченко [ Вторник, 16 Апрель, 2013 14:32 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
13. Есть ли другие модули по работе со строками помимо Strings.Mod?
Например, используя StringWriter и StringReader из модуля Streams можно производить генерацию/разбор строк в памяти. Можно работать и с нуль-терминированными строками и с бинарными (символ 0X может встречаться и в середине строки) строками. Для бинарных строк следует использовать GetRaw() вместо Get(), SetRaw() вместо Set() и LEN вместо Strings.Length() соответственно. Используя базовые Writer и Reader можно осуществлять генерацию/разбор файлов на диске.
Код:
MODULE StringsTest;

IMPORT
   Commands, Streams, Strings;

PROCEDURE Test*(context: Commands.Context);
VAR
   w: Streams.StringWriter;
   r: Streams.StringReader;
   s: Strings.String;
   a: ARRAY 32 OF CHAR;
   i: LONGINT;
BEGIN
   context.out.Ln;
   
   NEW(w, 128);
   
   w.String("one");
   w.Char(20X);
   w.Int(1, 0);
   w.Char(20X);
   w.String("two");
   w.Char(20X);
   w.Int(2, 0);
   w.Char(20X);
   
   NEW(s, w.Pos() + 1);
   w.Get(s^);
   NEW(r, Strings.Length(s^) + 1);
   r.Set(s^);
   
   IF r.GetString(a) THEN
      context.out.String(a);
      context.out.Char(20X)
   END;
   IF r.GetInteger(i, FALSE) THEN
      context.out.Int(i, 0);
      context.out.Char(20X)
   END;
   IF r.GetString(a) THEN
      context.out.String(a);
      context.out.Char(20X)
   END;
   IF r.GetInteger(i, FALSE) THEN
      context.out.Int(i, 0);
      context.out.Char(20X)
   END;

   context.out.Ln;
   
END Test;

END StringsTest.

StringsTest.Test ~

SystemTools.Free StringsTest ~

Автор:  Пётр Кушнир [ Вторник, 16 Апрель, 2013 14:44 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Сколько же у вас там всего вкусного :)
извиняюсь за оффтоп

Автор:  Иван Кузьмицкий [ Вторник, 16 Апрель, 2013 15:34 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Майнстрим всегда подпитывался идеями из оберон-ниши :)

Автор:  Valery Solovey [ Среда, 17 Апрель, 2013 01:51 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
То есть, нормально ли будет, обьясняя, что такое модуль сказать, что:
а) Модуль - основной строительный блок в компонентно-ориентированной парадигме
б) Модуль - неделимая единица компиляции, загрузки в/выгрузки из памяти. То есть вы не можете скомпилировать (загрузить, выгрузить) полмодуля или треть модуля, только их целое число
в) Инкапсуляция имеет место только в модуле(экспорт*, экспорт только для чтения-)

Не думаю, что делать так будет полностью корректно. Это всё характеристики модуля, взгляд на него с той или иной стороны. Определить модуль лучше фразой вида "это группировка ресурсов". И уже после этого дополнить определение вышеприведёнными пунктами.

samuelspring писал(а):
3. Можно ли в A2 организовать подсистемы как в BlackBox?
Вопрос об огранизации исходников встаёт при достаточном их количестве, а у самых новичков это количество будет ноль. Поэтому, данный вопрос рекомендую отложить на потом.

samuelspring писал(а):
5. К какой модели работы приучать себя и зрителей?
Например.
0.1) Ставим задачу, разбираем на листке, выделяем задачи, сущности, алгоритмы, проектирование.
...
Думаю, основной проблемой новичков (если это не абсолютные новички в программировании) будет непривычный интерфейс, сложности с документацией и библиотеками. По крайней мере, для этого видеоуроки подойдут гораздо лучше, чем для собственно программирования, которое привнесёт нудности и сделает просмотр не таким интересным.

Автор:  Valery Solovey [ Среда, 17 Апрель, 2013 01:59 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

И вообще, как бы банально ни звучало, для видеоуроков лучше выбирать задачи, которые хорошо показывать.
Например, "как запустить IDE" или "Как найти сохранённый модуль". То есть, тема даёт ясное представление об уроке, но тот же урок в виде текста восприниматься будет хуже.

Автор:  Иван Кузьмицкий [ Среда, 17 Апрель, 2013 06:54 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Valery Solovey писал(а):
И вообще, как бы банально ни звучало, для видеоуроков лучше выбирать задачи, которые хорошо показывать.
Да, я тоже с этим согласен. Например, разобраться с программированием на AO я и сам смогу, но я не умею обращаться с инструментом, не знаком с его особенностями. Поставить другой шрифт в систему, научиться компилировать и отлаживать, посмотреть на спектр возможностей среды - вот это было бы удобно изучать по видеоурокам. Ну а тонкости проектирования и программирования лучше пускать отдельным блоком уроков.

Автор:  samuelspring [ Четверг, 02 Май, 2013 23:10 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Я бы хотел оповестить сообщество о том, что не забыл о своём обещании и не "соскочил". Как только запишу несколько серий выложу ссылку на плэйлист сюда. Мои извинения за временные задержки.

Автор:  Иван Кузьмицкий [ Суббота, 04 Май, 2013 07:22 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Александр, может, по одному уроку будете выкладывать? А то не терпится уже посмотреть )

Автор:  Ярослав Романченко [ Суббота, 04 Май, 2013 07:46 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

Да, поддерживаю, не терпится )

Автор:  Ярослав Романченко [ Вторник, 03 Май, 2016 03:37 ]
Заголовок сообщения:  Re: Видеоуроки по Active Oberon, вопросы.

samuelspring писал(а):
Я бы хотел оповестить сообщество о том, что не забыл о своём обещании и не "соскочил". Как только запишу несколько серий выложу ссылку на плэйлист сюда. Мои извинения за временные задержки.

Уже 3 года прошло... :roll:

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/