М.М. ГОРБУНОВ-ПОСАДОВ - Системное обеспечение пакетов прикладных программ (1184225), страница 17
Текст из файла (страница 17)
Помимо архивного имени каждому модулюприсваивается еще и тип, определяющий его назначение (например, PRINT программная единица, допускающая автономную трансляцию, VARIANT вариант расчета и т.д.). Операции DELETE, EDIT, PRINT, CATALOG будутописаны в последующих разделах.Определенной слаюостью пакетной версии Сафры является отсутствиесобственного диалогового редактора для хранящихся в архиве текстов. Еслитребуется отредактировать текст архивного модуля, можно либовоспользоватьсявстроенной в Сафру операцией пакетного редактирования (EDIT), либосвязаться с одним из двух наиболее распространенных на БЭСМ-6диалоговых редакторов - с Димоном (DIMON) или с Крабом (CRAB).Заминку перед началом сеанса диалогового редактирования, связанную снеобходимостью переписи обрабатываемого текста из архива в файлдиалогового редактора, можно было бы устранить, если бы архив Сафры былпостроен на базе средств файловых систем этих редакторов.
Однако такоерешение, как отмечалось в п.3.2, повлекло бы за собой слишком большиепотери эффективности при выполнении других операций Сафры.Собственный диалоговый редактор, который мог бы полностью решитьданную проблему, не был включен в Сафру-БЭСМ-6 из-за большойтрудоемкости его реализации. Отметим, что в диалоговой Сафре-ЕС удалосьподключиться к штатному редактору СВМ практически без каких-либо потерьэффективности.Если следовать технологии конструирования программ вычислительногоэксперимента, описанной в п.3.1, то для задания конкретной расчетнойпрограммы каждому из вариантных гнезд ее каркаса следует соотнестинекоторый реализующий его модуль архива (вставку или подпрограмму). Таккак гнезда каркаса программы идентифицируются функциональными именами(в соответствии с соглашениями проекта OLYMPUS), а модули - архивнымиименами, для задания конкретной программы достаточно записать соответствующее число пар <функциональное имя> = <архивное имя>.
В текстезадания такие пары записываются в пункте EXECUTE, обеспечивающимсборку и выполнение расчетного варианта, в виде МАТСН-предложенийMATCH <функциональное имя> = <архивное имя>Часто повторяющиеся группы МАТСН-предложений могут бытьоформлены и записаны в архив в виде специальных модулей типа вариант(VARIANT). В этом случае, для того чтобы включить в пункт EXECUTEтакую группу, достаточно указать только имя модуля-варианта.Наряду с модулями, непосредственно используемыми при формированиирасчетных программ, в архиве пакета хранятся также текстысопроводительных документов.
С помощью операции BOOK такие текстымогут быть распечатаны на АЦПУ с редактированием в удобном дляпоследующего использования двухстраничном формате. Кроме того, правилаоформления текстов согласованы с системой АСПИД, позво-ляющей автоматизировать подготовку документов к публикации.3.4. АрхивКак уже упоминалось, архив системы Сафра служит для храненияпрограммного фонда и сопроводительных документов. Текстовыеобъекты, записанные в архив, называются текстовыми модулями.
Скаждым модулем связываются ключ, под которым он хранится в архиве,- архивное имя, а также тип, определяющий назначение модуля, даты егосоздания, последнего изменения, использования, шифр пользователя,создавшего модуль, число строк в тексте модуля, объем памяти,занимаемый текстом, и другая информация. Допускаются следующиетипы модулей.MACRO - текстовая вставка.
В виде модулей типа MACROоформляются фрагменты программ, заданий, тексты сопроводительныхдокументов.PRUNIT - программная единица. Текст программы наалгоритмическом языке, допускающий автономную трансляцию.VARIANT - вариант расчета. Группа соответствий (МАТСНпредложений) между функциональными именами гнезд каркасапрограммы и архивными именами модулей.В последующие версии Сафры предполагается включить модультипа GROUP - группа архивных модулей. Применяются два способаформирования группы: перечислительный и ассоциативный. Приперечислительном формировании архивные имена входящих в группумодулей явно перечисляются в тексте соответствующего модуля типаGROUP. При ассоциативном формировании явное перечислениеархивных имен отсутствует, а в группу включаются модули, в которыхуказан атрибут принадлежности к группе. Группы позволяютрассматривать архив «под разными углами зрения», высекаяподмножества модулей различной тематической направленности.
С ихпомощью существенно компактнее записываются групповые операциираспечатки, уничтожения, переписи во внешний архив, в файлыдиалогового редактора и т.д. Группы используются также приреализации защиты от несанкционированного доступа.Помимо текстовых модулей в архиве хранятся также объектныемодули. Получение и использование объектных модулей полностьюавтоматизировано и скрыто от пользователя Сафры, работающего толькона уровне исходных текстов программ.Реализуется данная возможность следующим образом. Формированиетекста расчетной задачи, рассмотренное в предыдущем разделе,выполняется посредством подстановки на место гнезд каркаса (задаваемыхоператорами INSERT) текстов необходимых архивных модулей.Единственное отклонение от этого правила возникает, когда подставляемыймодуль имеет тип PRUNIT, т.е.
представляет собой программную единицу,допускающую автономную трансляцию. В этом случае в процессе сборкивыясняется, не выполнялась ли когда-либо трансляция данной программнойединицы (с учетом конкретного набора текстов, подставляемых на местовложенных операторов INSERT).Если трансляция уже выполнялась, подстановка текста модуля типаPRUNIT не производится, а из архива Сафры извлекается и включается всборку полученный в свое время (при трансляции) соответствующийобъектный модуль.
Если же программная единица ранее нетранслировалась, то в формируемую задачу включается ее текст длятрансляции, причем полученный в результате объектный модуль не толькоиспользуется в данной сборке, но и запоминается в архиве дляпоследующих применений.3.5. Дисциплина работыВ п.3.1 была рассмотрена технология конструирования программвычислительного эксперимента, поддерживаемая системой Сафра.Определим теперь дисциплину работы, позволяющую в полной мереиспользовать преимущества данной технологии.Напомним прежде всего основные технологические моментыприменяемого в Сафре каркасного подхода к конструированию программ.Непосредственному программированию в вычислительном экспериментепредшествует этап функциональной модуляризации; результатом которогоявляется разбиение исследуемой проблемы на ряд функциональных частей.Такое разбиение определяет каркас программы, гнезда которогосоответствуют выделенным функциональным частям.
Каждому гнездукаркаса присваивается имя (функциональное имя), а также фиксируютсяспособ его программного оформления (автономно транслируемаяпрограммная единица или фрагмент текста на алгоритмическом языке сзаданным набором переменных и т.д.) и способ организации еговзаимодействия с другими гнездами.Затем переходят к непосредственному программированию, в ходекоторого для каждого из гнезд может быть написа-но, вообще говоря, несколько программных реализаций. При проведенииконкретного расчета каждому гнезду сопоставляется какая-либореализация соответствующей функциональной части, в результате чегоформируется расчетный вариант программы.Примодуляризациипомимообщеизвестныхсоображений(функциональная самостоятельность, минимизация связей и т.п.) в случаевычислительного эксперимента на первый план выдвигается выделениечастей, подверженных изменениям под влиянием изменяющихся в ходеэксперимента факторов.
На каждом витке вычислительного экспериментапересматриваются некоторые решения: могут измениться фрагментматематической модели, используемый метод расчета, организациятаблицы, требования к точности решения и т.д. Если при функциональноймодуляризации все эти изменяющиеся факторы были учтены и имсоответствуют отдельные гнезда каркаса, то перестройка программы требует минимальных усилий.Наиболее предпочтительным является соотношение «один фактор одно гнездо каркаса».
К сожалению, иногда не удается добитьсяодносвязности всех частей алгоритма, подверженных влиянию некоторогофактора. Например, точность выполняемых расчетов может зависеть отреализации нескольких далеко отстоящих друг от друга фрагментов текстапрограммы, объединение которых в одном модуле резко усложнило бымежмодульные связи. Здесь возникает соотношение «один фактор несколько гнезд каркаса», а каждому значению изменяющегося факторабудет соответствовать не один, а несколько реализующих модулей, заполняющих эти гнезда.Сафра в известной мере поддерживает многосвязные реализациифакторов, позволяя объединять все относящиеся к одному значениюфактора соответствия вида <функциональное имя> = <архивное имя> в одинмодуль типа вариант.
При формировании расчетных программ следуетссылаться на этот вариант, а не выписывать явно все соответствия. Такойподход поможет избежать ошибок, связанных с появлением в программемодулей, относящихся к различным значениям одного и того жеизменяющегося фактора.Недопустимым представляется соотношение «несколько факторов одно гнездо каркаса». Тут кроется источник дублирования программныхтекстов и значительного усложнения процессов развития программногофонда и сборки расчетных вариантов программ.