Н. Джехани - Язык Ада (1988) (1160771), страница 93
Текст из файла (страница 93)
Этот пример характерен для тех случаев, когда желателен полный контроль над опера. циями. Такие пакеты служат двум целям; они препятствуют пользователю в использовании внутренней структуры типа, а также реализуют понятие упрятывания (скрытия) типа данных, для которых определены только заданные в спецификации пакета операции. Ссылки: агрегат 4.3, вид 12.1.1, выражение по умолчанию для дискриминанта 3.7, генератор 4.8, задачный тип 9.1, 9.2, именуемая компонента 3.7, именуемый тип 3.7, личный тип 7.4, начальное значение 3.2.1, неявное описание 3.1, обозначает 3.8, объект 3.2, операция 3.3, опера. ция катенации 4.5, операция отношения 4.5, описание компоненты 3.7, описание личного типа 7.4, пакет 7, подкомпонента 3.3, подпрограмма 6, полное описание типа 3.3.1, полный тип 7.4.1, предопределенная операция 4.5, присваивание 5.2, производный тип 3.4, равенство 4.5.2, составной тип 3.3, спецификация дискриминанта 3.7.1, субконстанта 7.4.3, тип 3.3, тип компоне.
нты 3.3, формальный параметр 6.1, формальный параметр настроики 12.1, 12.3. Пакеты Ниже приведена схема такого пакета. Пользователю известна только спецификация пакета. ржавев ТАВЬЕ МАМАВЕЯ Ы муре 1ТЕМ 1 ° гавота ОЯОЕй МОМ: )МТЕОЕй; )ТЕМ СООЕ: 1МТЕОЕВ; ООАМТПУ: 1МТЕВЕВ; 1ТЕМ ТУРЕ: СНАНАСТЕЯ; впв ксопй МОП !ТЕМ; соив1ап! )ТЕМ )СВОЕЙ МОМ ) !ТЕМ СООЕ ) ООАМТПУ => О, )ТЕМ ТУРЕ => ' '); питоевом )МЗЕНТ )МЕ1И )ТЕМ; )и 1ТЕМ); ритсвтвпе йЕТВ1ЕЧЕ)Р1ЙЗТ 1ТЕМ; ои! !ТЕМ); тявье РОм: еасереоп; — это исключение возбуждается в процедуре ак); — !мзейт, если таблица заполнена Детали реализации таких пакетов могут быть достаточно сложными; в данном случае используются двусвязные списки внутренних элементов.
Локальная вспомогательная процедура ЕХСНАМОЕ используется для перемещения внутренних элементов из списка занятых в спнсок свободных. Начальные связи таблицы устанавливаются в разделе инициализации. Нет необходимости показывать полыювателям тело пакета. !исаева Ьоау ТАВ)Е МАМАОЕЯ М 812Е: совиапт:= 2000: вапура !МОЕХ 1 ° 1МТЕВЕН таире 0 .. 8!ЕЕ; туре 1МТЕВМА1 )ТЕМ )а имоп! СОИТЕМТ: 1ТЕМ; ЗОСС: 1МОЕХ; РНЕО; )МОЕХ; впд гвсоп); ТАВ1.Е: апау 11МОЕХ) Ы 1МТЕНМА) 1ТЕМ; ЩВЗТ ВОЗУ )ТЕМ: )МОЕХ:= 0; ЩВЗТ РНЕЕ !ТЕМ: )ИОЕХ;= 1; гппсаои РЙЕЕ ЫЗТ ЕМРТУ кипи 8001.ЕАМ 1 ° ... ее): Втпсвоп ВОЗУ ОЗТ ЕМРТУ такт ВООЬЕАМ 1 ° ... епв: ртосетвпе ЕХСЙАМОЕ !РВОМ: 1и )МОЕХ; ТО: 1и )МОЕХ) 1 ° ...
епа: ргосеавге 1МЗЕЯТ !МЕУЧ !ТЕМ: !и )ТЕМ) и веем й РНЕЕ ОЗТ ЕМРТУ Втсп гане ТАВЬЕ РОО.; впа В: — остальная часть кода подпрограммы 1Мвейт вид !ИЗЕВТ: рикеапге ЯЕТЙ!ЕЧЕ !Г1ВЗТ )ТЕМ: отп )ТЕМ) 1 ° ... етил Ьер)п — инициализация связей таблицы впв ТАВЬЕ МАИАВЕЙ; 76. ПРИМЕР ПАКЕТА ОБРАБОТКИ ТЕКСТОВ Этот пример иллюстрирует простой пакет обработки текстов. Пользователи имеют доступ только к видимому разделу; реализация от них скрыта в личном разделе и теле пакета (тело не показано). Главе 7 рвсвгве ТЕХТ НАМОЬЕН )а мАх1мцм: соисвпт:= 80ме чАьце; — это значение определено реализацией мйшре )МОЕХ )с )МТЕОЕй !спев 0 .. МАХ)МОМ; гара ТЕХТ(МАХ!МОМ ЬЕМВТН: 1МОЕХ) и Вейсом !ива!е; !мпавоп ЬЕМОТН П: ТЕХТ) гейип (МОЕХ; ЬпсСЬп ЧАЬОЕ (Т: ТЕХТ) гейип ВТЙ)МО; Ьпсеоп ЕМРТУ (Т: ТЕХТ) гвйип 8001.ЕАМ; ьпсгьп тО Техт ($: ЗТН)МО; МАх: )МОех) геймп ТЕхт; — максимальная длина мАх Ьисвап ТО ТЕХТ (С: СНАЯАСТЕВ: МАХ: 1МОЕХ) егме ТЕХТ; «икеап ТО техт (з: зтн!Н6) паве техт; — — максимальная длина з ОЗНОтн Ьпсвоп ТО ТЕХТ (С: СНАНАСТЕЯ1 гегмгп ТЕХТ; йиквоп "В" (ЬЕРТ: ТЕХТ; Я)6НТ: ТЕХТ! !мпсеоп 8" (ЬЕРТ: ТЕХТ; й)6НТ; ЗТй)М61 Ьпсвап "8" (ЬЕЕТ: ЗТВ)М6; Й)ОНТ: ТЕХТ) йикгЬп 8 (ЬЕРТ; ТЕХТ; Н(ОНТ: СНАВАСТЕЯ) Ьпавоп 8" (ЬЕРТ: СНАЙАСТЕЙ; Й16НТ: ТЕХТ) гейип ТЕХГ; гвйип ТЕХТ; гайип ТЕХТ; еве ТЕХТ; гмме ТЕХТ; (ЬЕРТ: ТЕХТ; В!ОНТ: ТЕХТ) гейип ВООЬЕАМ; П.ЕРТ: ТЕХТ: Н(ОНТ: ТЕХТ) егмгп ВООЬЕАМ; (ЬЕРТ: ТЕХТ; й(6НТ; ТЕХТ1 ейип 8001.ЕАМ; (сЕРТ: ТЕХТ: %6НТ: ТЕХТ) Гайми ВООЬЕАМ; (ЬЕРТ: ТЕХТ; Н)6НТ: ТЕХТ) евпг 800(.ЕАМ: ЬпсгЬп " Ьпсвоп "Г" !мпагЬп "Г,=" Ьпсвап ") йгпсвап *)= ргосвйпе ЗЕТ (ОВЗЕСТ: Ь ви ТЕХТ; ЧАШЕ: )и ТЕХТ>; ргссейив ЗЕТ (08,)ЕСТ г Ь смг ТЕХТ; ЧА1.ОЕ; 1и ЗТЙ1М6); рсоаевкм ЗЕТ (ОВЗЕСТ: Ь огп ТЕХТ; ЧАЬОЕ; Ь СНАЯАСТЕВ); ргассоиге АРРЕМО (ТА)Ь: Ь ТЕХТ; ТО; )и ом! ТЕХТ): ргосвйие АРРЕМО ПАЛ.: (и ЗТН)МО; ТО: )п ои! ТЕХТ); ргосеиме АрремО (тАЬ: 1п снАяАстей; тО: !п ом! техт); рмкавмге АМЕМО (084ЕСТ: Ь оиг ТЕХТ: ВЧ: !и ТЕХТ: РОЗ)Т10М: Ь !МОЕК); ргоаейие АмемО (ОВзест: ь оги техт; Ву: ь Втя)НО; Р0$1т10м: ь !НОех); рпкейие АМЕМО (ОВЗЕСТ: 1п ои! ТЕХТ; ВУ: Ь СНАНАСТЕН; РОЗ)ТК)М: Ь )МОЕХ); — заменяет часть объекта с заданной позиции на данныи — текст, строку или символ ьпсвап 1.0сАте (РВА6мемт: техт; тч тн)м; техт) ге!миг )мОех; (мпапм !.ОСАТЕ (РЯАОМЕМТ: ЗТВ1МО; ЧЧ!ТН1М: ТЕХТ) гейип 1МОЕХ; Ьпсеоп 1.0САТЕ (РНАОМЕМТ: СНАНАСТЕй; ЧЧ)ТН)М: ТЕХТТ ейип 1МОЕХ; — возвращают значение О, если фрагмент не размещается ргмаге 1тре ТЕХТ!МАХ)МОМ ЬЕМОТН: )МОЕХ) Ь всего РОВ: !МОЕХ:= 0; ЧА(.ОЕ: ЗТЯ(МО(1 ..
МАХ)МОМ ЬЕМОТН); впв еаогв: еие ТЕХТ НАМОЬЕН: С точки зрения пользователя, ТЕХТ является строкой переменной длины. Каждый текста. вый объект имеет максимальную длину, которая должна задаваться при описании етого объ. акта, и текущую длину, которая равна длине в диапазоне от нуля до максимального. Максимальная возможная длина текстового объекта является константой, определяемой рвали. зацией.
Сначала в пакете определяются необходимые типы, затем функции, возвращающие нексг тсрые характеристики объектов типа, затем функции преобразования текстов и предопределенных типов СНАНАСТЕН и ЗТН(МО и, наконец, некоторые стандартные операции над пере. менными строками. Большинство операций над строками, символами, а также над типом ТЕХТ совмещены для минимизации числа явных преобразований, которые должен написать пользователь. Пакеты Пример использования пакета обработки текста: Программа открывает файл вывода, имя которого дается строкой МАМЕ. Эта строка име. ет вид [УСТРОЙСТВО:] [ИМЯ ТИПА [.РАСШИРЕНИЩ Для устройства, имени файла и расширения существуют стандартные значения по умолчанию.
Названное пользователем имя передается через параметр функции ЕХРАМО Е(ЕЕ МАМЕ, ее результатом является расширенная версия с необходимыми добавлениями по умолчанию. апмесп ЕХРАКО Н1.Е МАМЕ (МАМЕ: 5ТЯ(М6) мапл 5ТЯ1М6 Ь пес ТЕХТ НАМОЬЕЯ; ОЕРАОЬТ ОЕМСЕ: посмеет 8ТЯ(МО ы 8ЧГ; ОЕРАОЬТ РИ.Е МАМЕ: сспшеп( 8ТЯ1М6:= "ЯЕ5ОЬТ5"; ОЕРАОЬТ ЕХТЕМЕЮК: соое(еп( 8ТЯ1МО:= ".ОАТ": МАХ(МОМ НЕЕ МАМЕ ЬЕМОТН: соле(еп( )МОЕХ:= 80МЕ АРРЯОРЯ(АТЕ ЧАЬОЕ; Р(ЬЕ МАМЕ .
'ТЕХТ(МАХ(МОМ РИ.Е МАМЕ ЬЕМОТН); 8ЕТ(Н1.Е КАМЕ, МАМЕ); И ЕМРТЧ1РИ.Е МАМЕ) (аеп ЕЕТ(Р(ЬЕ МАМЕ, ОЕРАОЬТ Н1.Е МАМЕ); епе И; И ЬОСАТЕГ, Е(ЬЕ МАМЕ! = О Имп 5ЕТ(РЛ.Е МАМЕ, ОЕРАО1.Т ОЕЧ(СЕ В Е(ЬЕ МАМЕ1; епе И: И ЬОСАТЕГ, НЬЕ МАМЕ) О (Ьеп АРРЕМО(ОЕРАОЬТ ЕХТЕМЕЮМ, ТО Р> Р(ЬЕ МАМЕ): епа И; мыгп ЧАЬОЕ(НЕЕ МАМЕ); епо ЕХРАМО НЕЕ МАМЕ; 13' Глава 8 прдвилд видимости В этой главе описаны правила, определяющие область действия описания, и правила, определяющие видимость идентификаторов в различных точках текста программы.
Формулировка правил видимости использует понятие зоны описания. Ссылки: видимость 8.3, зона описания 8.1, идентификатор 2.3, область 8.2, описание 3.1. 8.1. ЗОНА ОПИСАНИЯ Зона описания является частью текста программы. Единичная зона описания — это: ° Описание подпрограммы, описание пакета, описание задачи или описание настройки с соответствующим телом (если оно есть). Если это тело — след тела, то зона описания включает также соответствующий субмодуль.
Если программный модуль содержит субмодули, то они также включаются в зону описания. ° Описание входа с соответствующими операторами принятия. ° Описание именуемого типа с соответствующими описанием личного типа или неполным описанием типа (если они есть) и спецификатором представления записи (если он есть). ° Описание переименования, содержащее раздел формальных параметров, ипи описание параметров настройки, включающее либо раздел формальных параметров, либо раздел дискриминантов.