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

 

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

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

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

IE
Container
8.6.МОДУЛЬНОСТЬ TURBO PASCAL
451
С учетом приведенного обсуждения реализация набора операционных подпрограмм работы с очередью в их общем контексте на стандартном языке Pascal описывается следующим образом. Кроме упомянутых выше подпрограмм в наборе представлена еще две процедуры. Первая из них — InitQueue — задает начальные значения переменных, а вторая — Incl — предназначена для изменения значения индексов с учетом сбрасывания (изменяемый индекс передается в качестве параметра).
Программа 8.6.1 Очередь на чистом языке Pascal const
MaxSize = 100; {public!!!}
NotEl = 0; {public!!!}
type
States = ( Full, Empty, Normal); { public !!!}
var
Container: array [ 1..MaxSize ] of Integer; { private} IB, IE : Integer; { private}
BFull, BEmpty : Boolean; { private}
procedure InitQueue; { public}
begin
IB := 1; IE := 1;
BFull := False; BEmpty := True; end;
procedure IncI (var I : Integer); { private}
begin
if I = MaxSize then I := 1 else I := I + 1
end;
procedure PutElQueue (X : Integer); { public}
begin
if not BFull then
452
ГЛАВА 8. ПОДПРОГРАММЫ
begin
Container [ IB ] := X; IncI (IB ); BEmpty := False; BFull := IB = IE
end
else Write ('Ошибка: переполнение')
end;
function GetElQueue : Integer; { public}
begin
if not BEmpty then begin
GetElQueue := Container [ IE ]; IncI ( IE ); BEmpty := IB = IE; BFull := False
end else begin
Write ('Ошибка: чтение из пустой очереди'); GetElQueue := NotEl
end
end;
function StateQueue : States; { public }
begin
if BEmpty
then StateQueue := Empty else if BFull
then StateQueue := Full else StateQueue := Normal
end;
Как можно воспользоваться представленными только что средствами? Для стандартного Pascal^ нет другой возможности, кроме размещения приведенного текста среди описаний используей программ . онечно, систе-
8.6.МОДУЛЬНОСТЬ TURBO PASCAL
453
мы программирования обычно позволя т строить пользовательские библиотеки, и если это так, то в использующую программу достаточно встроить заголовки процедур, а вместо тел их указать служебное слово external. Но и тогда пользователь стандартного Pascal'я не сможет применять у себя в программе непроцедурные описания (в приведенном тексте они помечены символами !!!). Все это — следствие первоначальной концепции модульности, исходящей из определения библиотек как разрозненных наборов подпрограмм.
Использование данного набора подпрограмм полностью автономно: оно не требует знания того, какими структурами данных представлена очередь, какие алгоритмы задействованы в ее реализации и т. д. Тем не менее, если представленный вышетекст встраивается в программу явно, то стандарт -ный Pascal не запрещает обращаться в программе к данным и подпрограммам, не предназначенным для общего использования. В приведенном тексте строки, где описываются такие объекты, отмечены комментарием { private }, а строки, в которых вводятся объекта: общего пользования — комментарием { public }.
Стандартный Pascal не в состоянии запретить обращение к реализации, а значит, не поддеривается скрытие ее особенностей на уровне использования библиотеки. Этот недостаток оборачивается некоторым плюсом: для описания того, что делает библиотека, мо но не прибегать к призракам. о считать этот плюс достоинством нет никаких оснований. Во-первых, для сложно устроенных библиотек программный уровень изложения решительно не удовлетворит пользователя, тем более, если он не хочет вникать в особенности реализации. Во-вторых, определение программного средства его реализацией соверенно неудовлетворительно как с точки зрения использования и сопрово дения, так и в плане будуего развития (об этом м у е говорили, когда обсуждали возможность определения языка программирования транслятором — см. § 2.1). Так что пользовательская документация все равно необходима.
8.6.2. Модули в TURBO-системах программирования
Недостатки стандартного Pascal'я и других языков, являющихся прямыми потомками Algol 60, в части модульности вполне очевидны: жесткая блочная структура препятствует явному выделени частей программы, предна-значеннх и не предназначеннх для пользователя. В более поздних язках вводятся специальные средства модуляризации. Ниже они рассматриваются
454
ГЛАВА 8. ПОДПРОГРАММЫ
для диалектов Pascal^ в системах программирования TURBO. Вполне сложившимися эти средства можно считать для TURBO-Pascal^ версий 5.0 и вше. С 5.5 версии язык включает в себя средства поддержки объектно-ориентированного программирования, которое в настояее время является наиболее распространенным инструментом профессионального конструирования программ. В последуих версиях эти средства дополнен многими полезными в прагматическом плане возможностями.
Ближайшая цель — показать, как можно разрозненную коллекцию операционных подпрограмм и их обего контекста превратить в модуль с четким разделением уровней использования и реализации. бсу дение ведется применительно к языку TURBO-Pascal версии 6.0. Указываются дополнительные возможности, предоставляемые в версии 7.0.
Общая структура конструкции модуля в этих языках представляется сле-дуей схемой:
Предыдущая << 1 .. 154 155 156 157 158 159 < 160 > 161 162 163 164 165 166 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100