458
ГЛАВА 8. ПОДПРОГРАММЫ
Если два модуля разрабатываются совместно, то каждый из них может
имет в своем операторе
uses
ссылку на другой. Это не считается ошибкой,
лишь если открытая структура зависимостей модулей остается сетью (гра-
фом без циклов). Поэтому целесообразно обе перекрестные ссылки упрятать
в раздел
implementation
.
Если обратиться к задаче спецификации предоставляемых модулем средств,
то придется констатировать, что возможности
TURBO Pascal
’я версии 5.0 в
этом отношении очень ограничены. Нет никакой поддержки независимого от
реализации описания и, как следствие, документация оказывается отделена
от программы. Впрочем, этим же недостатком страдают и все последующие
языки линии
TURBO Pascal
и
Object Pascal
. Единственное, что они могут
предложить — это рецепт использовать мнемоничные имена. А этого явно
недостаточно. Из нашего примера видно, что если б мы реализовывали не
очередь, а стек, то интерфейсная часть модуля отличалась бы только имена-
ми. Чтобы можно было бы увидеть, что именно реализовано в модуле, про-
граммист должен позаботиться о соответствующем описании дополнитель-
но. Здесь и ему, и пользователю его модуля придется обратиться к призра-
кам-переменным, призракам-процедурам или к иным призракам составляе-
мой программы.
8.6.3. Пример использования модуля
В качестве иллюстрации использования построенного абстрактного типа
данных приводится задача, требующая реализации линии задержки — спе-
циального приема программирования, основанного на накоплении порций
информации из потока для последующей их совместной обработки.
Требуется смоделировать поведение кота-рыболова,который знает, сколь-
ко грамм рыбы
MaxW
он может съесть за один день, при этом не позволяя
себе оставлять частично съеденную рыбину.
Пусть у кота есть последовательность садков для хранения рыбы. Стра-
тегия кота состоит в следующем. Если очередная поступившая рыба может
быть съедена в тот же день (суммарный вес уже накопленных в текущем сад-
ке и очередной не превосходит
MaxW
), то она помещается в текущий садок,
и тем самым величина веса рыб текущего садка
CurW
увеличивается. При
этом, если суммарный вес рыбы становится равным
MaxW
, то садок счита-
ется заполненным и далее рыбы размещаются в следующем садке. Когда сум-
марный вес рыб превышает норму, возможно, что в садке есть рыба, замена
которой на очередную позволит уложиться в норматив
MaxW
. В этом случае