
Алгоритмические абстракции. Принцип “разделяй и властвуй”
Подпрограмма реализует абстрактный алгоритм, записанный с помощью имен формальных параметров, которые являются «представителями» фактических параметров. Это означает, что фактические параметры могут иметь различные имена, в том числе и не совпадающие с именами формальных параметров, и различные значения, определяемые их типами, а текст подпрограммы остается неизменным. Этот вид абстракции называется абстракцией через параметризацию, т.е. подпрограмма позволяет абстрагироваться не только от конкретных значений фактических параметров, но и от их имен, если они являются переменными.
При составлении блок-схем программ мы были лишены возможности использовать в тексте одной программы локальные объекты другой, даже если первая из этих программ используется во второй как подпрограмма. Это связано с полной независимостью текстов разных программ друг от друга.
Если рассматривать разбиение программы на ЯВУ на подпрограммы, то появляется возможность использования глобальных имен, особенно если весь текст программы вместе с подпрограммами содержится в одном модуле. Однако, при использовании имен глобальных объектов в подпрограмме нарушается абстракция через параметризацию, поскольку подпрограмма становится зависимой от конкретного глобального имени и уже не может быть вынесена в другой модуль и использована отдельно от текста исходной программы.
При работе с блок-схемами принцип абстракции через параметризацию не может быть нарушен, в ЯВУ для того, чтобы его соблюсти, нужно использовать в тексте подпрограммы только имена формальных параметров и локальных объектов.
В ЯВУ спецификация состоит из предусловия, заголовка подпрограммы со списком всех формальных параметров и постусловия. Спецификации записываются только для тех данных, которые указаны в заголовке подпрограммы. Если требуется обработать еще какие-либо данные, то следует расширить список формальных параметров подпрограммы, добавив туда эти данные.
Замечание
Как правило, спецификацию удается записать только неформальным языком в виде комментария под заголовком, поскольку не всегда возможно записать предусловие и постусловие в аналитическом виде.
Написание подпрограмм с полными спецификациями преследует две цели. Во-первых, подпрограмма становится самостоятельной единицей, которую можно считать новой командой виртуальной машины, реализуемой с помощью ЯВУ. При этом подпрограмма с полной спецификацией может рассматриваться как ''черный ящик``, т.е. можно абстрагироваться от тела подпрограммы и рассматривать ее как функциональный узел с одним действием. Такой способ алгоритмической абстракции называется абстракцией через спецификацию.
Во-вторых, тестировать, отлаживать и выполнять верификацию такой подпрограммы можно независимо от остальной программы, поскольку подпрограмма является самодостаточной. Такие тестирование и отладка называются локальными.
Все вышеперечисленные преимущества иногда называют принципом «разделяй и властвуй» на уровне небольших задач. К обсуждению этого принципа мы еще вернемся в конце этого пункта. Основная его идея заключается в разбиении алгоритмов и структур данных на независимые части так, чтобы каждая из частей могла быть реализована, верифицирована и отлажена независимо от остальных. Части должны быть достаточно небольшого размера, чтобы упростить реализацию и отладку. Это существенно повышает производительность труда программиста.