2.7. Универсальность

Универсальностью будем называть независимость программы от конкретного набора данных. Если программа зависит от данных, она не универсальна; ниже приведен простой пример такой программы.

ФОРТРАН:

READJ(5,12) (А(1), 1=1, 25)

SUM = 0.0

DO 20 1 = 1, 25

SUM = SUM + A(I) 20 CONTINUE

Эта программа читает вектор А с 25 элементами и суммирует последние. И если необходимо просуммировать элементы вектора с другим числом элементов, то в данной программе следует найти все строки, содержащие число 25, и заменить их на новое значение. Такой подход чреват ошибками, так как требуется найти все места, где 25 используется как число элементов вектора А. Намного лучше такая программа:

N = 25

READ (5, 12) (A(I), 1= 1, N) SUM = 0.0 DO 20 I = 1, N

SUM " SUM + A(I) 20 CONTINUE

Изменив число N, мы можем обработать вектор любого размера от 1 до N (пока N не станет слишком большим).

Хорошая универсальная программа должна обрабатывать вырожденные случаи (например, число элементов вектора равно 0 или 1) и печатать сообщение об ошибке, если N превышает допустимое значение. Тогда программа является не только универсальной, но и защищенной от ошибок.

Используйте в качестве параметров переменные, а не константы.

Программа может стать универсальной, если в качестве параметров вместо констант использовать переменные. Если же применять константы, то при изменении параметров надо измейять в исходной программе каждый оператор, содержащий прежнюю константу. Эта процедура отнимает много времени у программиста и часто вызывает ошибки. Использование констант вместо переменных не влияет на эффективность программы; таким обра* 3ом, нет особых причин для использования констант. В практических условиях при изменении ситуации всегда проще изменить параметр программы, а не искать по всей программе фрагменты, на которые влияет происшедшее изменение.

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

Укажем некоторые очевидные случаи, когда переменные могут быть использованы вместо констант:

1. Размер таблиц, массивов, списков.

2. Налоги, скидки, физические константы и проценты.

3. Обозначения устройств ввода-вывода.

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

Кроме того, параметры могут быть полезны во время отладки. Например, если размер таблицы или число рабочих областей задавать как параметр, то этот параметр можно уменьшить во время отладки, чтобы легко получить переполнение таблицы или рабочей области. Таким образом вы отладите программу обработки ошибки для этих ошибочных условий.

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

Создавайте универсальные программы.

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

2.6. Выбор языка программирования || Оглавление || 2.8. Библиотеки


Услуги