Назад Оглавление Вперед
На головную страницу М.М.Горбунов-Посадов
 
РАСШИРЯЕМЫЕ ПРОГРАММЫ
 

 Г л а в а  4
МНОГОВАРИАНТНОСТЬ
 
4.11. Межмодульная навигация
 

 

4.11. Межмодульная навигация

      Программный фонд крупных размеров, каковым, в частности, является обычно программный фонд вычислительного эксперимента, требует развитых технических средств обслуживания. Некоторые из этих средств (такие, например, как служба объектных модулей — см. разд. 4.10.6) уже в какой-то мере изучены нами, другие (организация передачи готовых продуктов во внешние организации, защита от несанкционированного доступа к отдельным материалам и т. п.) выходят за тематические рамки настоящей книги. Но пока относительно мало внимания уделялось организации поиска и просмотра объектов программного фонда, хотя эта проблема достаточно тесно соприкасается с интересующими нас конфигурационными построениями. Теперь мы попытаемся восполнить данный пробел.
      Ранее (см. разд. 4.8, 4.9) были довольно подробно рассмотрены средства доступа к отдельным страницам среды подготовки расчета и предложен аппарат для поддержки связей между средой подготовки расчета и сопряженными исходными текстами программ. Однако обращение к исходным текстам из среды подготовки расчета — относительно редкое явление, разработчику чаще требуется напрямую выйти на то или иное место программы. В этом случае доступ к модулям программного фонда опирается на два взаимодополняющих механизма: на использование каталогов модулей и на непосредственную навигацию между модулями.

      4.11.1. Каталоги модулей. Аппарат каталогов модулей имеется в подавляющем большинстве операционных сред. Он обычно позволяет высекать подмножество модулей по заданному значению (диапазону значений) указанного атрибута, упорядочивать модули в каталоге по возрастанию или убыванию значений указанного атрибута и производить многие другие операции, традиционно предоставляемые системами управления базами данных.
      Фигурирующие в каталоге атрибуты модулей имеют различное происхождение. Среди них можно выделить две группы.
      Атрибуты первой группы формируются в определенном смысле без участия разработчика: даты создания, последнего редактирования и последнего использования, автор, размер и др. Отдельные атрибуты автоматически извлекаются из текста модуля при включении его в программный фонд: имена вариантных гнезд из предложений #VARIANT, внешние связи из соответствующих конструкций языка программирования и т. п.
      Атрибуты второй группы непосредственно вводятся разработчиком. Одни атрибуты («имя», «тип») каждый раз запрашиваются у него при создании модуля, другие — задаются по его инициативе. Часть из них («язык программирования», «отлажен» и др.) может использоваться системными средствами, а часть интересна только самому разработчику.
      При организации каталога важно поставить дело так, чтобы все атрибуты независимо от их происхождения могли бы на равных правах включаться в любые запросы и в любые форматы вывода.
      Выбрав в каталоге требующийся модуль, разработчик переходит к просмотру или редактированию его текста. Впоследствии, закончив действия над текстом, он вправе вновь вернуться в режим работы с каталогом. Однако такой возврат может оказаться излишним, поскольку разработчику порой нужно всего лишь перейти к соседнему модулю, а для этого вовсе не обязательно подниматься на уровень каталога — существенно более короткий путь предлагает механизм непосредственной межмодульной навигации.

      4.11.2. Непосредственная навигация. Удобство и масштабы применения механизма непосредственной межмодульной навигации определяются прежде всего тем, насколько широко трактуется здесь понятие «соседний модуль» или, точнее, сколько поддерживается различных полезных толкований этого понятия. Одна из очевидных интерпретаций «соседнего модуля» — модуль, который просматривался или редактировался перед текущим. В самом деле, возвращаться к предыдущему модулю приходится достаточно часто, и поэтому имеет смысл поддержать такой возврат, посвятив ему, скажем, специальную функциональную клавишу.
      Другой простой пример непосредственной навигации — последовательный просмотр текстов выделенной группы модулей. Тут (наряду с клавишей возврата к предыдущему) потребуется клавиша перехода к следующему модулю. Пусть, например, в каталоге выделено некоторое подмножество модулей программного фонда, скажем, все модули, написанные на языке Си. Тогда для того чтобы быстро последовательно просмотреть тексты всех выделенных модулей, удобнее не возвращаться многократно к уровню каталога, а, не покидая уровня исходного текста, воспользоваться для межмодульных переходов названными функциональными клавишами. Средства последовательного просмотра полезно дополнить также возможностью сквозного контекстного поиска в выделенной группе модулей.
      Подобные незатейливые способы непосредственной межмодульной навигации безусловно полезны, но играют чисто вспомогательную роль: они лишь незначительно упрощают некоторые часто встречающиеся манипуляции над модулями и каталогами. С точки же зрения крупных многовариантных программ существенно больший интерес представляет непосредственная навигация, опирающаяся на разнообразные зафиксированные в программном фонде межмодульные связи. Подобно тому как во многих предметных областях организация работы на основе гипертекста оказывается предпочтительнее использования систем управления базами данных, в программном фонде непосредственная навигация, основанная на межмодульных связях, во многих случаях оказывается проще, нагляднее и эффективнее, чем обращение к каталогам модулей.
      Межмодульные связи, отраженные в программном фонде, весьма разнообразны, и практически любая из них может послужить для непосредственной навигации. Мы не будем пытаться охватить все возможные виды связей, а ограничимся тем, что наметим пути навигационной реализации всего лишь для двух из них: для внешних ссылок и для аппарата вариантных гнезд.

      4.11.3. Внешние ссылки. Какой программист не мечтал подвести курсор к идентификатору вызываемой внешней процедуры и, нажав соответствующую функциональную клавишу, перейти в модуль, содержащий описание этой процедуры! И обратно, оттолкнувшись от описания процедуры, быстро пробежаться по всем имеющимся в программном фонде модулям, содержащим обращения к данной процедуре!
      К сожалению, подобные роскошества непосредственной межмодульной навигации доступны пока не в каждой операционной среде. Если же, однако, такая навигация реализована, то опирается она на результаты синтаксического и семантического анализа исходного текста, а это означает, что среда располагает весьма подробной информацией о структуре и об отдельных объектах программы. Поэтому здесь нетрудно превратить рассыпанные по тексту идентификаторы каждого мало-мальски интересного объекта в гиперссылки. Активировав подобную гиперссылку, с помощью соответствующих функциональных клавиш можно будет пройтись по разнообразным родственным связям объекта.

      4.11.4. Обслуживание многовариантности. Для многовариантных программ особое значение приобретает непосредственная навигация, обслуживающая аппарат вариантных гнезд и сменных модулей. Число различных требующихся для этой навигации межмодульных связей невелико, и, по-видимому, все они должны быть поддержаны гипертекстовыми механизмами.
      Так, прежде всего следует образовать гиперссылку на месте вариантного гнезда: либо сделать гиперссылкой всю конструкцию #VARIANT, либо превратить в нее только содержащийся там идентификатор вариантного гнезда. Раскрыв такую гиперссылку, можно получить список всех сменных модулей, предназначенных для подстановки в вариантное гнездо, и начать их последовательный просмотр. Полезна и обратная операция, позволяющая из текста сменного модуля подняться наверх, к его вариантному гнезду, а точнее, к модулю, содержащему это гнездо.
      Для многосвязного вариантного гнезда надо предусмотреть операцию, позволяющую последовательно обойти все составляющие его односвязные гнезда. Аналогично, для многосвязного сменного модуля обеспечивается последовательный обход его односвязных компонентов.

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

Далее

Рейтинг@Mail.ru