158
ГЛАВА 3. ПРОГРАММИРОВАНИЕ С ПТИЧЬЕГО ПОЛЕТА
а потом, ведь еще и подгонять придется». Вывод: во-первых, здесь начисто
отсутствует стремление к переиспользованию, а во-вторых, переиспользова-
нию могут препятствовать затруднения поиска того, что требуется включить
в составляемую программу и проблемы совместимости версий.
Вторая ситуация — другая крайность. Программисту на
Java
потребо-
валось построить синтаксический анализ. На вопрос о том, как он это де-
лает, получен ответ: «Зачем это знать? У меня есть пакет
JavaCC
, который
все делает, как надо!». Вместе с тем дальнейшие расспросы показали, что
этот программист не представляет себе даже того, какого типа метод анализа
поддерживает
JavaCC
, и, следовательно, ничего не может сказать о том, как
задание грамматики для данного пакета связано с эффективностью анализа.
Узнав возможные варианты, программист призадумался, но ничего менять
не стал. Почему? Ответ простой: «Так ведь все уже работает!». Короче го-
воря, качество использования готовых компонентов системы зависит от
знания о них. Ситуация опять-таки та же самая, что в математике, особенно
в прикладной. Квалифицированное использование теоретических результа-
тов требует знания соответствующей теории, а порою и идей доказательств
результатов (поскольку в реальной ситуации предположения теории никогда
не выполняются точно). Глубина требуемого знания различна: иногда доста-
точно общего представления, как, например, при использовании математи-
ческих функций, иногда нужны сведения о принципах реализации, но всегда
можно указать необходимый уровень знакомства с переиспользуемым.
Сравнение ситуаций показывает, что одних пожеланий и директивных
указаний, что надо что-то переиспользовать, мало. Нужны знания о том, что
можно воспользоваться переносимыми компонентами и как именно ими вос-
пользоваться, получение которых часто требует существенных трудозатрат.
Нужно, чтобы само переиспользуемое программное обеспечение было при-
способлено для этого, в частности, чтобы оно в гораздо большей степени,чем
сейчас, следовало накопленной в математике хорошей практике, не игнори-
руя ее как чистую теорию. Расшифровка предыдущего предложения позво-
лит вдумчивому читателю самому вывести все условия, необходимые для
обеспечения переиспользования в конкретной обстановке.
Конечно, переиспользованию способствует применение развитых и вы-
разительных языков. В частности, экранирование в них реализационных де-
талей позволяет легче переносить программы из одной операционной об-
становки в другую (перенос и переиспользование — различные задачи, но
в некоторых аспектах они пересекаются). Способствует переиспользованию
повышение уровня понятий языка, хотя бы до второго-третьего типа (объект-