Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 16-17.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
89.09 Кб
Скачать

Алгоритмические абстракции. Принцип “разделяй и властвуй”

Подпрограмма реализует абстрактный алгоритм, записанный с помощью имен формальных параметров, которые являются «представителями» фактических параметров. Это означает, что фактические параметры могут иметь различные имена, в том числе и не совпадающие с именами формальных параметров, и различные значения, определяемые их типами, а текст подпрограммы остается неизменным. Этот вид абстракции называется абстракцией через параметризацию, т.е. подпрограмма позволяет абстрагироваться не только от конкретных значений фактических параметров, но и от их имен, если они являются переменными.

При составлении блок-схем программ мы были лишены возможности использовать в тексте одной программы локальные объекты другой, даже если первая из этих программ используется во второй как подпрограмма. Это связано с полной независимостью текстов разных программ друг от друга.

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

При работе с блок-схемами принцип абстракции через параметризацию не может быть нарушен, в ЯВУ для того, чтобы его соблюсти, нужно использовать в тексте подпрограммы только имена формальных параметров и локальных объектов.

В ЯВУ спецификация состоит из предусловия, заголовка подпрограммы со списком всех формальных параметров и постусловия. Спецификации записываются только для тех данных, которые указаны в заголовке подпрограммы. Если требуется обработать еще какие-либо данные, то следует расширить список формальных параметров подпрограммы, добавив туда эти данные.

Замечание

Как правило, спецификацию удается записать только неформальным языком в виде комментария под заголовком, поскольку не всегда возможно записать предусловие и постусловие в аналитическом виде.

Написание подпрограмм с полными спецификациями преследует две цели. Во-первых, подпрограмма становится самостоятельной единицей, которую можно считать новой командой виртуальной машины, реализуемой с помощью ЯВУ. При этом подпрограмма с полной спецификацией может рассматриваться как ''черный ящик``, т.е. можно абстрагироваться от тела подпрограммы и рассматривать ее как функциональный узел с одним действием. Такой способ алгоритмической абстракции называется абстракцией через спецификацию.

Во-вторых, тестировать, отлаживать и выполнять верификацию такой подпрограммы можно независимо от остальной программы, поскольку подпрограмма является самодостаточной. Такие тестирование и отладка называются локальными.

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