Разработчику большой программы редко приходится писать что-либо заново, "с чистого листа" — чаще он развивает то, что написано и отлажено ранее. Прививая программе новые полезные качества, разработчик конечно же заботится и о том, чтобы не утратить уже достигнутого. Дело это весьма деликатное, поскольку развитие обычно подразумевает редактирование имеющихся исходных текстов, а редактирование всегда чревато внесением ошибок, влекущих потерю работоспособности. Можно было бы избежать непосредственного редактирования, частично дублируя имеющиеся тексты, однако дублирование, как известно, губительно для последующего развития. К счастью, существуют программные конструкции, позволяющие развивать программу безболезненно, лишь дополняя ее новыми модулями, но вовсе не затрагивая и не дублируя отлаженных ранее текстов.
Разумеется, применение безболезненно развиваемых конструкций не способно полностью исключить редактирование имеющихся текстов: время от времени требуются революционные преобразования программы, которые по своей природе выплескиваются за рамки любых априорных ограничений. Известно однако, что революционные преобразования относительно редки, основной же объем изменений выполняется эволюционно. А эволюционные изменения обычно удается уложить в безболезненное русло, что выводит процесс развития на новый уровень надежности. Кроме того, безболезненно развиваемые конструкции позволяют проявить важные структурные свойства программы, существенно повышая ее маневренность и наглядность.
В основе безболезненно развиваемых конструкций лежат два взаимосвязанных постулата. (1) Любая точка роста (hot spot) программы представима в форме расширяемого набора однородных модулей. (2) Любое эволюционное изменение программы представимо в форме совокупности модулей, предназначенных для пополнения одной или нескольких точек роста. Иначе говоря, ключом к построению безболезненно развиваемой программы служит девиз "Ищи однородность — найдешь расширяемость".
|