Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 161

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 155 156 157 158 159 160 < 161 > 162 163 164 165 166 167 .. 316 >> Следующая

unit <имя модуля>;
interface
<описания видимых объектов>
implementation
<описания скрытых объектов>
begin
инициализация: описание действий, которые необходимо выполнить перед использованием основных средств модуля>
end.
В версии 7.0 эта схема, исходя из практических потребностей программирования, расширена: появился дополнительный раздел модуля finalization:
unit <ия одуля>; interface
<описания видимх объектов>
implementation
<описания скртх объектов>
begin
<инициализация: описание действий, которые необходимо выполнить перед использованием основных средств модуля>
8.6.МОДУЛЬНОСТЬ TURBO PASCAL
455
finalization
<завершение: описание действий, которые
необходио вполнить после использования модуля>
end.
мя модуля — это идентификатор, упоминание которого в специальном разделе используей программ , назваемом uses, делает доступным видимые объект модуля.
писания видимых объектов — это обчне описания констант, типов, переменных и др., которые предоставляются пользователю. Их называют предоставляемый контекст . О собо следует сказать об описании подпрограмм в данном разделе. оскольку от пользователя долн быть скрыты тела подпрограмм, здесь перечисля тся лиь их заголовки (в обычном синтаксисе языка Pascal).
Помимо видимой части локального контекста модуля, он содержит невидиму — описания скрытых объектов. В разделе implementation заголовки процедур и функций мо но задавать либо сокраенно: слу ебным словом procedure или function и именем подпрограмм (с учетом того, что полнй заголовок объявлен вше), либо в полной (обычной для Pascal^) форме, совпадающей с заголовком подпрограммы из раздела interface.
Раздел инициализации описывает действия, которе необходимо выполнить перед употреблением средств модуля в программе пользователя. ни автоматически взва тся в программе перед выполнением всех ее операторов. Раздел finalization в языке появился в ответ на потребность автоматического выполнения действий после работы модуля (например, отказ от зарезервированной памяти). Если эти разделы не предусматривать, то на пользовательский уровень придется вносить средства, которые для его логики явля тся инородными.
а примере раздела инициализации мы имеем возмо ность сопоставить варианты библиотеки с автоматически вызываемой инициализацией и без нее, когда соответствующие действия пользователь должен указывать явно. В варианте без инициализации пользователь дол ен взвать процедуру InitQueue, задау начальные установки для работы с модулем. В альтернативном варианте этот вызов мо но скрыть путем выполнения его в разделе инициализации и исключения InitQueue из интерфейса.
Таким образом, средства работы с очередью оформляются в виде следу-
его модуля:
456
8.
Программа 8.6.2 unit IntQueue;
interface
const MaxSize = 100;
NotEl = 0; type States = ( Full, Empty, Normal ); procedure PutElQueue (X : Integer); function GetElQueue : Integer; function StateQueue : States;
implementation var
Container : array [ 1..MaxSize ] of Integer; IB, IE : Integer;
BFull, BEmpty : Boolean;
procedure InitQueue;
procedure IncI ( var I : Integer );
procedure PutElQueue (X : Integer);
function GetElQueue : Integer;
function StateQueue : States;
begin
InitQueue; end.
Пример реализации очереди демонстрирует стиль модуляризации в TURBO Pascal'е, которой не слишком далеко ушел от стиля, достижимого в стандартном языке: появилась возможность не знать, как реализована используемая очередь. Тем не менее, модуль IntQueue с потребительской точки зрения не очень удобен: во-первх, он не позволяет работать с несколькими очередями, а во-вторых, элементами очереди могут бть только целе числа.
{реализация процедур} {и функций} { InitQueue, } {IncI,}
{ PutElQueue, }
{ GetElQueue и }
{ StateQueue }
{ в точности повторяет}
{ их тексты на}
{стандартном Pascal^}
8.6. TURBOPASCAL
457
ервй недостаток мо ет быть преодолен за счет специального программирования инициализации очереди, вынесения процедуры InitQueue в интерфейсную часть модуля и дополнения его процедурой DoneQueue, уничто-аей очередь по окончании работ с не . ледует позаботиться об идентификации очередей, что в стиле стандарта языка Pascal естественнее всего реализуется через дополнительнй параметр кадой из подпрограмм. В реализации процедур InitQueue и DoneQueue целесообразно предусмотреть, соответственно, порождение и ликвидацию массива Container и других пред-ставляих структур даннх для кадого экземпляра очереди.
Второй недостаток при использовании средств модуляризации, представленных выше, и других возможностей стандартного Pascal^ преодолеть не удается. В языках с так называемыми абстрактными типами данных (CLU, Alphard и др.), а также в языке Ada, можно было бы воспользоваться параметрами-типами, заменив тип компонент массива Container и других структур, принимаих значения хранимых в очереди элементов, именем формального параметра, вместо которого при вызове модуля подставля тся имена конкретных типов. В TURBO Pascal^ вместо этого предусмотрены механизмы наследования и полиморфизма, которые являются одним из ключевых моментов объектно-ориентированного программирования.
Предыдущая << 1 .. 155 156 157 158 159 160 < 161 > 162 163 164 165 166 167 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100