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

Заключение
 

 

ЗАКЛЮЧЕНИЕ

      Автор этих строк долгое время коллекционировал разнообразные способы организации программного материала, с которыми приходилось иметь дело ему самому и его коллегам. По мере разрастания коллекции формировалась и крепла убежденность в том, что все наиболее интересные и продуктивные структуры программ можно достаточно четко систематизировать, оперевшись на сравнительно небольшой круг понятий.
      В число понятий, потребовавшихся при анализе структур, вошли и широко известные, и сравнительно редко упоминаемые. Наиболее полезными среди них оказались расширяемость (безболезненность развития), предотвращение дублирования и однородность. С их помощью удалось построить классификацию расширяемых программных конструкций.
      В собранной коллекции представлены программы из самых различных предметных областей. Однако, иллюстрируя те или иные конструкции на страницах этой книги, автор старался, как правило, ограничиваться примерами из собственной практики.
      Многих читателей, вероятно, давно мучает вопрос: какие из упоминавшихся конструкций были когда-либо оснащены средствами системной поддержки? Ответ на него несколько разочарует того, кто воспринимал книгу как завуалированную рекламу очередного программного продукта, но может послужить источником вдохновения для читателей, ищущих новые сферы приложения своих программистских талантов.
      Всестороннюю и многократную проверку реализацией прошла только основная масса построений, описанных в первых четырех главах книги. Вне разбиравшихся там подходов сегодня немыслимо эффективное программирование задач вычислительного эксперимента. Да и в других предметных областях они убедительно завоевали право на существование. Определенным продвижением в направлении обслуживания многовариантности является аппарат виртуальных методов, развиваемый в объектно-ориентированных языках.
      Что же касается регулярного (гл. 5) или рассредоточенного (гл. 6) однородных наборов, то автору неизвестны какие-либо попытки создания средств их поддержки в достаточно общей постановке. О полезности этих конструкций лишь косвенно свидетельствуют многочисленные специализированные реализации, решавшие существенно более узкие задачи из данного класса.
      Отсутствие реализованного крупномасштабного проекта средств поддержки расширяемых программ, охватывающего все упомянутые конструкции или хотя бы большинство из них, отразилось на принятом в книге стиле изложения. Основная масса понятий вводилась неформально. Лишь изредка появлялись относительно строгие определения (в частности, описания синтаксиса), но и они преследовали, как правило, чисто иллюстративные цели и были весьма далеки от совершенства.
      Возможно, больше внимания следовало уделить взаимной близости рассмотренных конструкций и всевозможным переходным формам. Дело в том, что, несмотря на внешнюю несхожесть, большинство конструкций на практике легко сочетаются или переходят одна в другую.
      Например, пусть выдача диагностических сообщений в некоторой программе оформлена с помощью рассредоточенного набора. И пусть выяснилось, что программу предстоит передать за рубеж, где ее желательно эксплуатировать на другом (иностранном) языке. Тогда формируется вариантное гнездо, с помощью которого осуществляется переключение с одного языка на другой. Далее, пусть среди пользователей программы встретился интернациональный коллектив, желающий получать диагностику на нескольких языках. В этом случае понадобится наборное гнездо, содержимое которого задается перечислением необходимых коллективу языков. Наконец, пусть программа функционирует только в организации-разработчике, но там время от времени появляются пользователи, требующие еще одного языка. Тогда нужно будет оформить наборное гнездо с ассоциативной выборкой, благодаря которой удается организовать безболезненное подключение новых языков.
      Остался открытым вопрос о полноте предложенного набора безболезненно расширяемых конструкций. Достаточно обширную коллекцию автора этот набор покрывает: структура любой программы из коллекции представима в виде комбинации тех или иных конструкций из числа разбиравшихся в книге. Однако это, разумеется, вовсе не означает, что в других программах никогда не потребуется нечто принципиально новое.
      На протяжении всего текста книги назойливым рефреном шли сетования о том, что разработчики операционных сред массового применения уделяют обслуживанию расширяемости недостаточно внимания. Хотелось, чтобы призыв этот был услышан, чтобы проблематика расширяемых программ заняла наконец подобающее ей место.
      И главное. «Написать хорошую программу» и «написать расширяемую программу» — всего лишь два разных обозначения одного и того же славного дела. И пусть в деле этом никогда не покидает нас удача!

Далее

Рейтинг@Mail.ru