- •1.Введение
- •1.1.Декомпозиция и абстракция
- •1.2.Абстракция
- •1.2.1.Абстракция через параметризацию
- •1.2.2.Абстракция через спецификацию
- •1.2.3.Виды абстракций
- •3.Процедурная абстракция
- •3.2.Спецификации
- •3.3.Спецификации процедурных абстракций
- •3.4.Реализация процедур
- •3.5.Более обобщенные процедуры
- •3.6.Создание процедурных абстракций
- •3.7.Заключение
- •4.Абстракции данных
- •4.1.Спецификации для абстракций данных
- •4.2.1.Реализация на языке clu
- •4.2.2.Замечания по поводу операций up и down
- •4.3.Использование абстракций данных
- •4.4.Реализация полиномов
- •4.5.Пояснения для понимания реализаций
- •4.5.1.Функция абстракции
- •4.5.2.Инвариант представления
- •4.6.3.Сохранение инварианта представления
- •4.5.4.Изменяемые представления
- •4.6.Параметризованные абстракции данных
- •4.7.Списки
- •4.8.Упорядоченные списки
1.Введение
В данной книге предлагается методология составления программ. Наша цель —помочь программистам в составлении программ высокого качества, являющихся несложными, легко модифицируемыми и простыми в обращении.
Очень небольшая программа, содержащая всего несколько сотен строк, может быть представлена одной неделимой единицей. Однако по мере возрастания размера программы такая монолитная структура становится неудобной, поскольку ее текст уже труден для понимания. Поэтому программа должна быть разбита на ряд независимых небольших программ, называемых модулями, которые сообща выполняют требуемую функцию. Мы остановимся на этом процессе декомпозиции более подробно: какие типы модулей наиболее подходящи при таком процессе и какие способы увеличивают вероятность того, что объединение этих модулей даст возможность решить поставленную задачу.
Корректность процесса декомпозиции становится все более и более важной по мере того, как размер программы возрастает. Это обусловливается следующими причинами. Во-первых, в процесс составления программы вовлекается все большее число людей. Если над программой работает несколько человек, то естественно предположить их регулярные контакты. Такой контакт снижает вероятность различных разногласий, касающихся того, кто и что должен делать, и уменьшает серьезность последствий, возникающих в подобных ситуациях. Если над задачей работает много людей, то регулярные взаимодействия между ними становятся невозможными, поскольку они отнимают слишком много времени. По этой причине программа может быть разбита на части, причем каждая из них может создаваться отдельными участниками независимо от остальных, вследствие чего контакты между людьми становятся минимальными.
Полезное время жизни программы (ее«рабочая»стадия) начинается с того момента, когда она передается потребителю. Однако на этом работа над программой не заканчивается. В тексте программы могут быть требующие исправления ошибки, а для обеспечения удобства работы с программой сообразно с требованиями пользователя может возникнуть необходимость в ее дальнейшей модификации. Работа помодификацииисопровождению программы может потребовать больше времени, чем все время, потраченное на ее разработку.
При модификации и сопровождении программы редко оказывается разумным начинать работу с ее полной переделки. Вместо этого предпочтительней внести изменения в уже существующую структуру и, следовательно, весьма важно, чтобы структура допускала возможность подобной модификации. В частности, необходимо, чтобы части программы были независимы друг от друга с тем, чтобы изменение в одной части могло быть сделано без изменения других ее частей.
И наконец, время жизни большинства программ достаточно велико, поэтому работа с ними продолжается еще долгое время. Кроме этого, необходимо учитывать постоянные изменения в составе рабочей группы, что приводит к тому, что модификация программ обычно выполняется уже не разработчиками задачи. Все эти факторы предполагают структурирование программ таким образом, чтобы они были легко понимаемыми.
В методологии, описанной в данной книге, программы составляются путем декомпозиции задачи. Эта декомпозиция основана на опознавании абстракций.Декомпозицияиабстракция,являясь двумя ключевыми концепциями данной книги, и составят предмет нашего последующего обсуждения.