Каркас архитектуры: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 93:
 
С другой стороны, требованию безболезненности для работоспособности ассоциативная схема не удовлетворяет. Причина в том, что если в подключаемом модуле имеются ошибки, то его появление (из-за неявного указания) в ранее отлаженной версии программы может привести к потере работоспособности.
</nowiki>
 
'''Рассредоточенный набор'''
<nowiki>
Применение рассредоточенного набора, имеет достаточно большую область. Так как для данной работы полное рассмотрение возможного применения рассредоточенного набора не предоставляет интересса, мы ограничимся рассмотрением следующего примера.
 
Пусть программа должна осуществлять тщательный анализ входных данных, результатом которого является, в частности, значительное число выдаваемых диагностических сообщений. Вопрос заключается в том, где следует разместить тексты сообщений: записать их непосредственно в тех точках программы, в которых обнаруживаются диагностируемые ситуации, или же свести в единую таблицу. Каждая из альтернатив имеет свои сильные и слабые стороны.
 
Непосредственное размещение обладает целым рядом достоинств. Текст сообщения, является, как правило, наилучшим пояснением к фрагменту алгоритма, анализирующему диагностируемую ситуацию. При кодировании алгоритма значительно удобнее сразу разместить сообщение в создаваемой программе, чем записать его в таблицу, формируемую на отдельном листке бумаги или на какаом-либо его экранном аналоге, а в алгоритм включить ссылку на вновь записанную строку таблицы. Табличное решение требует постоянного внимания к целостности программы: добавляя или исключая некоторый фрагмент алгоритма, необходимо строго следить за тем, чтобы тексты выдаваемых там диагностических сообщений были добавлены в таблицу или, соответственно, исключены из нее. При непосредственном размещении оцелостности заботится не надо.
 
В то же время аргументы в пользу таблицы также достаточно весомы. Сводная таблица выдаваемых сообщений служит полезным дополнением к любой инструкции по эксплуатации программы. При изучении алгоритма таблица дает возможность увидеть текст программы в новом интересном ракурсе. Табличное представление позволяет избежать поиска разбросанных по программе текстов при необходимости создания экспортируемой за рубеж версии программы, выдающей сообщения на другом (иностранном) языке. Наконец, полный список сообщений долженбыть всегда под рукой у разработчика, заботящегося о стилистическом единстве существующих и вновь появляющихся текстов.
 
Располагая механизмом рассредоточенного набора, решить проблему размещения сообщений удается довольно легко. Тексты сообщений записываются непосредственно в программе, но оформляются в виде объявлений элементов набора. Искомая таблица сообщений в этом случае строится на основе наборного гнезда, в котором собираются все элементы рассредоточенного набора, т.е. все сообщения, объявленные в составляющих программу модулях. На месте же объявлений при сборке программы препроцессор сформирует обращения к построенной таблице. Нетрудно видеть, что данное решение успешно справляется со всеми перечисленными выше трудностями размещения сообщений.
 
Механизм рассредоточенного набора позволяет собрать воедино разбросанные по тексту программы однородные элементы. В тексте программы элемент рассредоточенного однородного набора объявляется посредством конструкции вида
 
{ #INSTALL_IN [LOCAL] имя_набора [SUBSET]
{имя_компонента : значение }}
[ #APPLY
применение]
#END_OF_INSTALL
 
В одной конструкции разрешается объявлять сразу несколько элементов различных рассредоточенных наборов (об этом говорят внешние фигурные скобки, окаймляющие первые две строки).
 
В строке #INSTALL_IN указывается имя_набора, в котором включается объявляемый элемент. Служебное слово LOCAL говорит о том, что область действия набора – текущий модуль трансляции; если LOCAL отсутствует, то область действия – вся программа. Служебное слово SUBSET указывает на то, что рассредоточенный набор высекает подмножество существующего в программном фонде регулярного однородного набора; в этом случае в объявлении присутствует только один компонент с именем NAME, значение которого задает имя включаемого в подмножество элемента регулярного набора. Вложенные фигурные скобки, окаймляющие вторую строку, означают, что записанная в них конструкция должна быть воспроизведена в одном или в нескольких экземплярах. Тем самым имеется возможность объявления составного элемента: каждый экземпляр конструкции вводит один из компонентов. Имя_компонента задается в левой части конструкции, а справа записывается значение объявляемого компонента.
 
Далее следует необязательная часть #APPLY. Там располагается то, что должно остаться в исходном тексте после обработки конструкции #INSTALL_IN препроцессором. Часть #APPLY представляет собой обычный текст, среди которого могут размещаться значения компонентов объявленного элемента рассредоточенного набора, задаваемые конструкцией вида #имя_набора.имя_компонента. Кроме того, в текст можно включать порядковый номер; он задается в виде #имя_набора.NUMBER.
</nowiki></poem>
}}