Наука — Школе |
Будем предполагать, что Блэкбокс был установлен в первичную директорию, заданную по умолчанию — C:\Program Files\BlackBox\ — структура которой и показана на следующей картинке (окно Проводника/Windows Explorer):
Первый загружаемый EXE-файл (BlackBox.exe) находится в папке BlackBox, но это нам сейчас не важно. (Здесь и ниже будем указывать имя папки сокращенно, опуская C:\Program Files\)
Все файлы, с которыми работает Блэкбокс, распределены по т.наз. подсистемам, каждой из которых соответствует отдельная папка в папке BlackBox; имя подсистемы совпадает с именем соответствующей папки: Comm, Ctl, ... Xhtml. (Например, подсистема Comm содержит программы для коммуникации с внешним миром по Интернету в соответствии с протоколом TCP/IP; подсистема Text содержит средства работы с текстами — правка, форматирование и т.п.; и т.д.) Имя каждого модуля (идентификатор, стоящий в программном тексте после ключевого слова MODULE) в данной подсистеме должно начинаться с имени подсистемы; см. об этом ниже.
В каждой подсистеме могут иметься еще до 5 стандартных папок, как это показано на картинке для подсистемы Form:
В папке Mod (modules) хранятся исходные тексты модулей, входящих в подсистему; это документы Блэкбокса в его стандартном формате; файлы имеют расширение .odc. Например, для подсистемы Form имеется 5 исходников, как показано на картинке. Каждый файл должен содержать текст одного модуля в начале текста. После точки, закрывающей модуль, может быть что угодно — любые тексты, картинки и т.п. Имя модуля должно состоять из имени подсистемы и имени соответствующего файла (см. ниже). Поэтому можно, например, говорить о модуле Cmds подсистемы Forms: программный текст этого модуля хранится в файле Cmds.odc в папке BlackBox\Forms\Mod\.
В папке Code (code files) хранятся т.наз. кодовые файлы (расширения .ocf), содержащие оттранслированные машинные коды для каждого из модулей данной подсистемы. Например, модулю Cmds, текст которого хранится в файле Cmds.odc в папке Mod, соовтетствует кодовый файл Cmds.ocf в папке Code. (Кодовые файлы Блэкбокса аналогичны динамически загружаемым библиотекам (DLL) ОС MS Windows, но, в отличие от последних, построены предельно экономно.)
В папке Sym (symbol files) хранятся т.наз. символьные файлы (расширения .osf), содержащие информацию о внешних интерфейсах соответствующих модулей. Например, модулю Cmds соответствует символьный файл Cmds.osf в папке Sym. Символьные файлы Блэкбокса аналогичны header-файлам языков C/C++, но, в отличие от последних, создаются компилятором автоматически. Это исключает целый класс серьезных ошибок и сильно повышает надежность как самого Блэкбокса, так и создаваемых в нем программ. Более того, как компилятор, так и загрузчик проверяют согласованность соответствующих кодовых и символьных файлов, и обмануть систему нелегко.
В папке Docu (documentation) хранится документация: подразумевается, что для каждого модуля подсистемы есть соответствующий файл в папке Docu. Например, модулю Cmds соответствует файл с документацией Cmds.odc в папке Docu. Разумеется, там может храниться и дополнительная документация, описывающая подсистему в целом, а не отдельные модули. О том, как организована документация в Блэкбоксе, см. здесь. При программировании для своих личных нужд редко возникает необходимость создавать папку Docu.
В папке Rsrc (resources) обычно хранятся вспомогательные ресурсы — формы диалогов, тексты сообщений об ошибках и т.п. Например, сообщения компилятора об ошибках хранятся в виде текста в файле Errors.odc в папке Rsrc подсистемы Dev. Русификация этих сообщений сводилась к замене английских сообщений на русские в этом тексте. Заметим, что благодаря чрезвычайной легкости создания графических диалогов в Блэкбоксе нередко удобно создавать диалоги для вспомогательных задач. Поэтому создавать папку Rsrc приходится чаще, чем папку Docu.
Программист, проектируя новую подсистему, волен придумать в ней дополнительные папки для своих нужд.
В папке BlackBox могут содержаться две папки Code и Sym, не входящие ни в какую подсистему. В них хранятся кодовые и символьные файлы модулей, имена которых не следуют соглашениям Блэкбокса.
В некоторых важных случаях Блэкбокс должен уметь найти исходный текст модуля. Например, при аварийной остановке тестируемой программы Блэкбокс пытается открыть исходный программный текст модуля, в котором произошла ошибка, и показать оператор, вызвавший ее. Это будет возможным, если следовать соглашениям об именах модулей и файлов.
В Блэкбоксе принято соглашение, что имя модуля содержит в качестве префикса имя своей подсистемы. Блэкбокс определяет наличие префикса по следующему правилу. Если в идентификаторе модуля прописная (большая) буква следует за строчной (малой) буквой, цифрой или символом подчеркивания (который разрешен в идентификаторах), то все, что предшествует этой прописной букве считается именем подсистемы. Часть идентификатора, начинающаяся с этой прописной буквы, считается именем файла данного модуля (т.е. используется для имен кодовых и символьных файлов, а также для поиска документации и исходных текстов). Заметим еще, что в Блэкбоксе имена модулей по соглашению начинаются с прописной буквы.
Пример: Имя модуля CommObxStreamsClient разбивается на префикс Comm (имя подсистемы) и собственно имя модуля и соответствующих файлов — ObxStreamsClient. Тогда исходный текст хранится в Comm/Mod/ObxStreamsClient.odc, кодовый файл — в Comm/Code/ObxStreamsClient.ocf, а символьный файл — в Comm/Sym/ObxStreamsClient.ocf.
Наука — Школе |