Инструменты пользователя

Инструменты сайта


bb:lessons:first-module

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
bb:lessons:first-module [2014/11/14 20:37]
admin [Команды]
bb:lessons:first-module [2016/04/07 21:34]
prospero78 [Команды]
Строка 4: Строка 4:
  
 ===== Модуль ===== ===== Модуль =====
- +Весь каркас **Блэкбокса** строится из модулей. Модуль, это что-то вроде строительного кирпича, наподобие всем известных кирпичиков конструктора Лего:
-Весь каркас Блэкбокса строится из модулей. Модуль, это что-то вроде строительного кирпича, наподобие всем известных кирпичиков конструктора Лего:+
 {{ :bb:lessons:lego_color_bricks.jpg?nolink |}} {{ :bb:lessons:lego_color_bricks.jpg?nolink |}}
  
Строка 13: Строка 12:
  
  
-Кстати, компонент это более общее понятие, чем модуль. Компонентом можно назвать и модуль, и целый комплект модулей. Главное, что компонент - это //часть расширяемой компонентной системы// (расширяется она за счёт добавления новых компонентов). А модуль в Блэкбоксе это //единица проектирования, разработки, компиляции и распространения//, то есть, программирование в Блэкбоксе ведётся по-модульно. Вы строите архитектуру вашей системы из модулей, пишете исходный текст программы-модуля, компилируете в исполняемый модуль и его же распространяете.+Кстати, //компонент// это более общее понятие, чем //модуль//. Компонентом можно назвать и модуль, и целый комплект модулей. Главное, что компонент - это //часть расширяемой компонентной системы// (расширяется она за счёт добавления новых компонентов). А модуль в **Блэкбоксе** это //единица проектирования, разработки, компиляции и распространения//, то есть, программирование в Блэкбоксе ведётся по-модульно. Вы строите архитектуру вашей системы из модулей, пишете исходный текст программы-модуля, компилируете в исполняемый модуль и его же распространяете.
  
 Текст пустого программного модуля выглядит так: Текст пустого программного модуля выглядит так:
-<code>MODULE MyModule;+<code oberon2> 
 +MODULE MyModule;
 END MyModule. END MyModule.
 </code> </code>
-В Компонентном Паскале операторы разделяются точкой с запятой и только в конце модуля ставится точка.+В **Компонентном Паскале** операторы разделяются точкой с запятой и только в конце модуля ставится точка.
  
 ===== Компиляция ===== ===== Компиляция =====
  
-Откройте новый документ Ctrl+N, наберите в нём текст пустого модуля и нажмите Ctrl+K (или меню //Dev, Compile//):+Откройте новый документ **<Ctrl+N>**, наберите в нём текст пустого модуля и скомпилируйте нажатием **<Ctrl+K>**/ (или меню //Dev, Compile//):
 {{:bb:lessons:bb_first_compile.png?nolink |}} {{:bb:lessons:bb_first_compile.png?nolink |}}
  
  
-Как видите, Блэкбокс запрашивает разрешения на создание подкаталога My\Sym. Далее он точно так же спросит про подкаталог My\Code. И этот момент надо рассмотреть поподробнее.+Как видите, **Блэкбокс** запрашивает разрешения на создание подкаталога //My\Sym//. Далее он точно так же спросит про подкаталог //My\Code//. И этот момент надо рассмотреть подробнее.
  
-Имя нашего модуля **MyModule**. Это двойное имя, которое содержит название подсистемы //My// и название модуля в ней, //Module//. Внутри этой подсистемы Блэкбокс создаст ещё две папки, одна из которых Sym (для символьных файлов), а другая Code (для кодовых).+Имя нашего модуля ''MyModule''. Это двойное имя, которое содержит название подсистемы //My// и название модуля в ней, //Module//. Внутри этой подсистемы **Блэкбокс** создаст ещё две папки, одна из которых //Sym// (для символьных файлов), а другая //Code// (для кодовых). Подробнее о подсистемах вы можете узнать в [[http://oberoncore.ru/_media/blackbox/tut-tot.ru.pdf|учебнике]]. 
 + 
 +Сохранять документы с исходными текстами следует в папке //Mod// вашей подсистемы, эту папку придётся создать вручную
  
 Символьные файлы нужны только для совместной компиляции разных модулей. Кодовые, они же исполняемые файлы, нужны только для загрузки и выполнения. После создания символьного и кодового файлов нашего модуля, компилятор завершит работу и выведет сообщение в журнал. Символьные файлы нужны только для совместной компиляции разных модулей. Кодовые, они же исполняемые файлы, нужны только для загрузки и выполнения. После создания символьного и кодового файлов нашего модуля, компилятор завершит работу и выведет сообщение в журнал.
Строка 38: Строка 40:
 Например, если в теле нашего пустого модуля написать что-то, непонятное компилятору, то он сгенерирует сразу два маркера.{{:bb:lessons:bb_error_compile.png?nolink |}} Например, если в теле нашего пустого модуля написать что-то, непонятное компилятору, то он сгенерирует сразу два маркера.{{:bb:lessons:bb_error_compile.png?nolink |}}
  
-На картинке первый из них развёрнут (его текст продублирован внизу экрана, в строке статуса) и означает, что после имени модуля и точки запятой компилятор ожидает только объявления раздела констант CONST, или раздела переменных VAR, или объявление процедуры PROCEDURE или же конец модуля END. Ничего из этого он не видит и поэтому сразу же выдаёт ошибку. +На картинке первый из них развёрнут (его текст продублирован внизу экрана, в строке статуса) и означает, что после имени модуля и точки запятой компилятор ожидает только объявления раздела констант ''CONST'', или раздела переменных ''VAR'', или объявление процедуры ''PROCEDURE'' или же конец модуля ''END''. Ничего из этого он не видит и поэтому сразу же выдаёт ошибку.
- +
-А второй маркер стоит после непонятного слова. Компилятор не понимает, что это слово означает, потому что его словарь не содержит этого слова. Компилятор понимает только специальные символы и особые зарезервированные слова (всё, что понимает компилятор, перечислено в Сообщении об Языке, см. меню //Help, Contents//, раздел //Component Pascal, Language Report//, пункт //3. Vocabulary and Representation//)+
  
 +А второй маркер стоит после непонятного слова. Компилятор //не понимает//, что это слово означает, потому что его словарь не содержит этого слова. Компилятор понимает только специальные символы и особые зарезервированные слова (всё, что понимает компилятор, перечислено в Сообщении об Языке, см. меню //Help, Contents//, раздел //Component Pascal, Language Report//, пункт //3. Vocabulary and Representation//)
 ===== Вывод в журнал ===== ===== Вывод в журнал =====
  
 Попробуем теперь написать небольшую программу, выводящую в журнал приветствие "Hello, world!". Попробуем теперь написать небольшую программу, выводящую в журнал приветствие "Hello, world!".
  
-<code>MODULE MyModule;+<code oberon2> 
 +MODULE MyModule;
  
  IMPORT Log;  IMPORT Log;
Строка 55: Строка 57:
  END Do;  END Do;
   
-END MyModule.</code>+END MyModule. 
 +</code>
  
 Итак, что же тут написано? Итак, что же тут написано?
  
-Со словом MODULE в первой строчке мы уже знакомы. +Со словом ''MODULE'' в первой строчке мы уже знакомы. 
-На следующей строчке слово IMPORT объявляет блок импорта других модулей, а слово Log означает, что мы будем использовать возможности модуля Log. Это то самое место, где кирпичики Лего соединяются, чтобы работать вместе.+На следующей строчке слово ''IMPORT'' объявляет блок импорта других модулей, а слово ''Log'' означает, что мы будем использовать возможности модуля ''Log''. Это то самое место, где кирпичики Лего соединяются, чтобы работать вместе.
  
-Дальше идёт объявление процедуры. Звёздочка после имени Do означает, что эта процедура будет видна другим модулям. Между словами-скобками BEGIN и END находится тело процедуры (отметьте, что после END продублировано имя процедуры, это нужно для чёткой границы между скобками процедуры и скобками других операторов).+Дальше идёт объявление процедуры. Звёздочка после имени ''Do'' означает, что эта процедура будет видна другим модулям. Между словами-скобками ''BEGIN'' и ''END'' находится тело процедуры (отметьте, что после ''END'' продублировано имя процедуры, это нужно для чёткой границы между скобками процедуры и скобками других операторов).
  
-Ну а внутри процедуры мы видим последовательные вызовы процедур String и Ln модуля Log. Обратите внимание, что перед именем каждой процедуры стоит квалификатор модуля Log, это жёсткое правило языка Компонентный Паскаль (и, в общем, всех Оберонов). Благодаря обязательному квалификатору вы никогда не запутаетесь, откуда вызвана та или иная процедура или переменная.+Ну а внутри процедуры мы видим последовательные вызовы процедур ''String'' и ''Ln'' модуля ''Log''. Обратите внимание, что перед именем каждой процедуры стоит квалификатор модуля ''Log'', это жёсткое правило языка **Компонентный Паскаль** (и, в общем, всех Оберонов). Благодаря //обязательному// квалификатору вы никогда не запутаетесь, откуда вызвана та или иная процедура или переменная.
  
 ===== Команды ===== ===== Команды =====
  
-В нашем модуле объявлена процедура Do. Она ещё и доступна для других модулей, а это значит, что мы можем вызвать эту процедуру, - как будто отдать команду Блэкбоксу, - в любой момент.+В нашем модуле объявлена процедура ''Do''. Она ещё и доступна для других модулей, а это значит, что мы можем вызвать эту процедуру, - как будто отдать команду **Блэкбоксу**, - в любой момент.
  
 {{:bb:lessons:bb_first_do.png?nolink |}} {{:bb:lessons:bb_first_do.png?nolink |}}
-В любом месте любого текстового документа (хоть в журнале, хоть в исходнике нашего модуля) поставьте коммандер с помощью кнопок //Ctrl+Q// или меню //Tools, Insert Commander//. После коммандера (он выглядит как чёрный кружок с восклицательным знаком внутри) напишите команду //MyModule.Do//+В любом месте любого текстового документа (хоть в журнале, хоть в исходнике нашего модуля) поставьте //коммандер// с помощью кнопок **<Ctrl+Q>** или меню //Tools, Insert Commander//. После коммандера (он выглядит как чёрный кружок с восклицательным знаком внутри) напишите команду ''MyModule.Do''
  
-Далее, надо откомпилировать наш модуль (в журнале появится новая запись об обнаруженной процедуре Do. В дальнейшем, компилируйте модуль с выгрузкой (меню Dev, Compile and Unload), потому что Блэкбокс не выгружает просто так запущенные модули.+Далее, надо откомпилировать наш модуль (в журнале появится новая запись об обнаруженной процедуре ''Do''. В дальнейшем, компилируйте модуль с выгрузкой (меню Dev, Compile and Unload), потому что **Блэкбокс** не выгружает просто так запущенные модули.
  
-После компиляции и выгрузки, кликаем по коммандеру. Блэкбокс загрузит наш модуль и выполнит его процедуру Do. А она выведет в журнал приветствие.+После компиляции и выгрузки, кликаем по коммандеру. **Блэкбокс** загрузит наш модуль и выполнит его процедуру ''Do''. А она выведет в журнал приветствие.
  
-В заключение стоит отметить, что возможности модуля //Log// всегда можно изучить, открыв его интерфейс. Для этого выделите слово //Log// и скомандуйте в меню //Info, Client Interface// или правой кнопкой мыши (ПКМ) и во всплывшем меню выберите //Interface//.+В заключение стоит отметить, что возможности модуля ''Log'' всегда можно изучить, открыв его интерфейс. Для этого выделите слово ''Log'' и скомандуйте в меню //Info, Client Interface// или правой кнопкой мыши (ПКМ) и во всплывшем меню выберите //Interface//.
bb/lessons/first-module.txt · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)