Г л а в а 2
МОДУЛЯРИЗАЦИЯ
Модуляризация, т. е. расчленение программного материала на модули непременный компонент любой сколько-нибудь серьезной программной разработки. Общепризнано, что с ростом размеров программы качество выполнения модуляризации играет все более и более важную роль в конечном успехе проекта.
Существует множество побудительных мотивов модуляризации, и каждый из них способен оказать заметное влияние на выбор того или иного конкретного варианта расчленения на модули. Наиболее важным из этих мотивов является облегчение последующего развития, или, иначе, обеспечение расширяемости программы. Модуляризация закладывает фундамент, на котором строятся все последующие манипуляции над программным материалом.
Модуляризация затрагивает чрезвычайно широкий спектр проблем программирования. В настоящей главе мы не пытаемся охватить его целиком или хотя бы систематически осветить некоторую его часть. Цель главы несколько иная: оттенить те стороны модуляризации, которые в наибольшей степени влияют на расширяемость строящейся программы.
2.1. Модуль
Прежде чем дать определение понятия «модуль», требуется немного разобраться в том, что же является исходным материалом модуляризации.
К такому материалу, безусловно, следует отнести тексты программ на алгоритмических языках. Более того, рассмотрение проблем модуляризации можно было бы даже ограничить только текстами программ, поскольку именно здесь разыгрываются основные события и проявляются практически все наиболее интересные особенности вычленения модулей.
Однако точнее все же будет распространить модуляризацию на все первичные, т. е. непосредственно вводимые разработчиком материалы программного фонда. Помимо исходных текстов программ к первичным материалам относятся также:
тексты исходных данных,
тексты указаний об атрибутах выделенных частей программных материалов (автор, решаемая задача, используемый численный метод, ...),
тексты процедур, применяемых к программным материалам (например, указание «транслировать и результат трансляции поместить в указанную библиотеку объектных модулей», или «собрать программу указанной конкретной конфигурации», или «если были внесены изменения, оттранслировать и собрать, а затем выполнить с указанными исходными данными», ...),
и т. д.
Первичным материалом является и сопроводительная документация. Для сопроводительной документации не менее актуальны разбиение на отдельные модули и формирование из них тех или иных конфигураций выходных документов.
Если программа развивается (а большинство реально используемых программ так или иначе развиваются), то возникает проблема постоянного поддержания соответствия между изменяющейся программой и документацией к ней. Наиболее убедительные решения этой проблемы основываются на взаимном проникновении текстов алгоритмов и документации. Например, можно определенным образом извлечь из программы и включить в документацию тексты выдаваемых диагностических сообщений, и обратно, тексты сопроводительных документов использовать в качестве комментариев неформальных спецификаций отдельных алгоритмов. В результате граница между программой и документацией стирается.
Подобные рассуждения можно, вообще говоря, провести и по отношению к остальным видам первичных материалов. Мы не будем здесь этого делать, полагая очевидным, что все первичные материалы тесно связаны между собой. Отсюда вытекает, что задача модуляризации должна ставиться не изолированно для программ, документации и т. п., а охватывать одновременно всю совокупность первичных материалов.
Теперь, очертив границы исходного материала модуляризации, можно перейти к понятию модуля. Для наших целей подойдет следующее весьма свободное его определение.
О п р е д е л е н и е. Модуль выделенная по тем или иным мотивам часть первичного материала программного фонда.
Наибольший интерес с точки зрения расширяемости программы представляют мотивы выделения модулей и различные формы модулей. Именно о них в основном будет идти речь в данной главе.
Однако в уточнении нуждается и неявно проведенная в нашем определении граница между составляющими программный фонд первичными и вторичными материалами. Вторичные материалы, или, точнее, вторичные объекты порождаются из первичных посредством типовых процедур обработки и, согласно нашему определению, в модуляризации непосредственно не участвуют. Тем не менее, поскольку вторичный характер некоторых объектов не всегда очевиден, а связи между первичными и вторичными объектами оказываются весьма многогранными, вторичным объектам программного фонда посвящается самостоятельный раздел.
|