"Адское" программирование Ada-95 -Компилятор GNAT




Глава1. Сюрпризы переводной терминологии


    "Сюрпризы" переводной терминологии
    "Сюрпризы" переводной терминологии Прежде чем приступить к непосредственному знакомству с Адой, есть необходимость заметить, что в англоязычной литературе, посвященной вычислительной технике в цел...
    Первая программа
    Первая программа Для того, чтобы дать "почувствовать", что представляет из себя программа написанная на языке Ада рассмотрим простую программу. Традиционно, первая программа - это программа котора...
    Библиотека и компилируемые модули
    Библиотека и компилируемые модули В общем случае, программа на языке Ада представляет собой один или несколько программных модулей, которые могут компилироваться как совместно, так и раздельно.Кро...
    Лексические соглашения
    Лексические соглашения Лексические соглашения описывают допустимые символы и последовательности символов, которые используются при обозначении идентификаторов, определяющих имена переменных и конс...
    Комментарии
    Комментарии Начнем с комментариев. Для облегчения понимания алгоритма работы программы, в текст программы могут, и должны помещаться комментарии. Комментарий начинается с двух символов дефиса "--"...
    Идентификаторы
    Идентификаторы Теоретически, согласно требований стандарта, идентификаторы могут быть любой длины, однако, длина может быть ограничена реализацией конкретного компилятора. Общие правила таковы: Ид...
    Литералы
    Литералы Литералы служат для явного указания значения некоторого типа, сохраняемого в программе. Различают числовые, символьные и строковые литералы. Числовые литералы , как не трудно догадаться,...
    Зарезервированные слова
    Зарезервированные слова Некоторые слова, такие как with , procedure , is , begin , end и т.д., являются частью самого языка программирования. Такие слова называют зарезервированными (или ключевыми...
    Методы Ады: подпрограммы, операции и знаки операций
    Методы Ады: подпрограммы, операции и знаки операций Методами Ады являются подпрограммы (процедуры и функции), а также операции и знаки операций (возможно более корректно будет звучать: с помощью п...
    Инструкции, выражения и элаборация
    Инструкции, выражения и элаборация Очевидно, что исполнение инструкций осуществляется во время выполнения программы с целью выполнить какие-либо действия.Также, во время выполнения программы осуще...
    Директивы компилятора
    Директивы компилятора Бывают случаи, когда в исходном тексте необходимо указывать какую-либо дополнительную информацию, которая предназначена сугубо для компилятора.Например, такая информация може...
    Скалярные типы данных языка Ада.
    Скалярные типы данных языка Ада. К скалярным типам относятся типы данных которые определяют соответствующие упорядоченные множества значений. Эта глава описывает скалярные типы данных Ады, а также...
    Введение в систему типов языка Ада
    Введение в систему типов языка Ада Данные - это то, что обрабатывает программа. Практически, любой современный язык программирования определяет свои соглашения и механизмы для разделения данных на...
    Предопределенный тип Integer
    Предопределенный тип Integer Предопределенный целочисленный тип Integer описан в пакете Standard (пакет Standard не нужно указывать в инструкциях спецификации контекста with и use ). Точный диапаз...
    Тип Universal_Integer
    Тип Universal_Integer Для предотвращения необходимости явного преобразования типов при описании целочисленных констант, Ада предлагает понятие универсального целого типа - Universal_Integer. Все ц...
    Описание целочисленных констант
    Описание целочисленных констант При хорошем стиле программирования, принято присваивать целочисленным значениям символьные имена. Это способствует улучшению читабельности программы и, при необходи...
    Тип Root_Integer
    Тип Root_Integer Модель целочисленной арифметики Ады базируется на понятии неявного типа Root_Integer. Этот тип используется как базовый тип для всех целочисленных типов Ады. Другими словами - все...
    Примеры целочисленных описаний
    Примеры целочисленных описаний Ниже приводятся примеры различных целочисленных описаний Ады. -- описания целочисленных статических переменныхCount : Integer; X, Y, Z : Integer; Amount : Integer :=...
    Предопределенные знаки операций для целочисленных типов
    Предопределенные знаки операций для целочисленных типов Следующие знаки операций предопределены для каждого целочисленного типа: +, - унарные плюс и минус +, -, *, / сложить, вычесть, умножить и р...
    Модульные типы
    Модульные типы Все целочисленные типы, которые мы рассматривали ранее, известны как целые числа со знаком. Для таких типов соблюдается правило - если в случае вычисления результат выходит за диапа...
    Дополнительные целочисленные типы системы компилятора GNAT
    Дополнительные целочисленные типы системы компилятора GNAT Стандарт языка Ада допускает определять в реализации Ада-системы собственные дополнительные целочисленные типы. Таким образом, в пакете S...
    Вещественные типы
    Вещественные типы Ада предусматривает два способа представления вещественных чисел: представление вещественных величин с плавающей точкой и представление вещественных величин с фиксированной точко...
    Вещественные типы с плавающей точкой, тип Float
    Вещественные типы с плавающей точкой, тип Float Вещественные типы с плавающей точкой имеют неограниченный диапазон значений и точность, определяемую количеством десятичных цифр после запятой. Пред...
    Вещественные типы с фиксированной точкой, тип Duration
    Вещественные типы с фиксированной точкой, тип Duration Представление чисел с фиксированной точкой имеет более ограниченный диапазон значений и указанную абсолютную погрешность, которая задается ка...
    Вещественные типы с десятичной фиксированной точкой
    Вещественные типы с десятичной фиксированной точкой Следует учитывать, что поскольку от реализации компилятора Ады не требуется обязательное обеспечение поддержки вещественных величин с десятичной...
    Типы Universal_Float и Root_Real
    Типы Universal_Float и Root_Real Подобно тому как все целочисленные литералы принадлежат универсальному классу Universal_Integer, все вещественные численные литералы принадлежат универсальному кла...
    Пакеты для численной обработки
    Пакеты для численной обработки Полное обсуждение поддержки численной обработки в Аде - весьма обширная тема. Поэтому здесь, чтобы указать "куда бежать дальше", мы только приведем список пакетов дл...
    Преобразование численных типов
    Преобразование численных типов Поскольку тип Float и тип Integer - различные типы, то Ада не допускает смешивания величин этих типов в одном выражении. Однако, встречаются случаи, когда нам необхо...
    Перечислимые типы
    Перечислимые типы До настоящего момента были рассмотрены типы данных которые представляли численные значения (целые и вещественные числа). Однако, при решении многих практических задач, важное зна...
    Описание перечислимого типа
    Описание перечислимого типа Перечислимый тип описывается путем предоставления списка всех возможных значений данного типа в виде идентификаторов (другими словами, перечислением всех возможных знач...
    Предопределенный логический тип Boolean
    Предопределенный логический тип Boolean В Аде, предопределенный логический тип Boolean описывается как перечислимый тип в пакете Standard : type Boolean is (False, True); Таким образом, переменные...
    Символьные типы Ады (Character, Wide_Character)
    Символьные типы Ады (Character, Wide_Character) Ада имеет два предопределенных перечислимый типа, Character и Wide_Character, для поддержки обработки символьных значений. Согласно стандарта, любой...
    Типы и подтипы
    Типы и подтипы Как уже говорилось, концепция типа является в Аде основопологающим фактором создания надежного программного обеспечения. Предположим, что у нас есть два целочисленных типа, которые...
    Производные типы
    Производные типы Мы уже рассмотрели, что подтипы остаются совместимыми со своими базовыми типами. Однако, нам может понадобиться создать абсолютно новый тип, который не будет ассоциироваться ни с...
    Атрибуты
    Атрибуты Ада предусматривает специальный класс предопределенных операций, которые позволяют в удобной форме определять и использовать различные характеристики типов и экземпляров объектов. Они наз...
    Управляющие структуры
    Управляющие структуры Управляющие структуры любого языка программирования предназначены для описания алгоритмов программ, или, другими словами, для описания последовательности тех действий которые...
    Пустая инструкция
    Пустая инструкция В отличие от многих других языков программирования, в Аде явно присутствует инструкция, которая не вызывает каких-либо действий. Такая инструкция называется пустой, и она имеет с...
    Инструкция присваивания
    Инструкция присваивания Инструкция присваивания используется в Аде для установки и изменения значений переменных. Она использует операцию присваивания, и в общем случае имеет следующий вид: result...
    Блоки
    Блоки Блок содержит последовательность инструкций, перед которой может располагаться раздел описаний (все описания локальны для блока и не доступны вне блока). За последовательностью инструкций мо...
    Условные инструкции if
    Условные инструкции if Для организации условного выполнения последовательностей алгоритмических действий (то есть, построения разветвляющихся алгоритмов), в Аде могут использоваться условные инстр...
    Инструкция выбора сase
    Инструкция выбора сase Еще одним средством позволяющим строить разветвляющиеся алгоритмы является инструкция выбора сase . Инструкция выбора сase должна предусматривать определенное действие для к...
    Организация циклических вычислений
    Организация циклических вычислений При решении реальных задач часто возникает необходимость в организации циклических вычислений. Все конструкции организации циклических вычислений в Аде имеют фор...
    Простые циклы (loop)
    Простые циклы ( loop ) Примером простейшего цикла может служить бесконечный цикл. Обычно он используется совместно с инструкцией exit , рассматриваемой позже. loop -- инструкции тела цикла end loo...
    Цикл while
    Цикл while Во многих случаях, прежде чем выполнять действия которые описываются инструкциями тела цикла, необходимо проверить какое-либо условие. Для таких случаев Ада предусматривает конструкцию...
    Цикл for
    Цикл for Еще одним распространенным случаем является ситуация когда необходимо выполнить некоторые действия заданное количество раз, то есть организовать счетный цикл. Для этого Ада предусматривае...
    Инструкции exit и exit when
    Инструкции exit и exit when Инструкции exit и exit when могут быть использованы для преждевременного выхода из цикла. При этом, выполнение программы будет продолжено в точке непосредственно следую...
    Именованые циклы
    Именованые циклы Инструкции преждевременного выхода из цикла exit и exit when , обычно, осуществляют выход из того цикла, который непосредственно содержит данную инструкцию. Однако, мы можем имено...
    Инструкция перехода goto
    Инструкция перехода goto Инструкция перехода goto предусмотрена для использования в языке Ада, в исключительных ситуациях, и имеет следующий вид: goto Label;Label Использование инструкции goto оче...
    Массивы (array)
    Массивы ( array ) Понятие массива подразумевает один из механизмов структурирования данных и является одним из способов построения составных типов данных. В сущности, массив - это набор данных иде...
    Описание простого массива
    Описание простого массива В общем случае, при объявлении массива, сначала производится описание соответствующего типа. Затем, экземпляр массива может быть создан используя описание этого типа. typ...
    Анонимные массивы
    Анонимные массивы Массив может быть объявлен непосредственно, без использования предопределенного типа: No_Of_Desks : array (.No_Of_Divisions) of Integer; В этом случае массив будет называться ано...
    Организация доступа к отдельным элементам массива
    Организация доступа к отдельным элементам массива Организацию доступа к отдельным элементам массива проще всего продемонстрировать на простых примерах. Так для обращения к значению элемента массив...
    Агрегаты для массивов
    Агрегаты для массивов В общем случае, агрегат массива - это совокупность значений для каждого элемента массива. Использование агрегатов позволяет выполнять одновременное присваивание значений всем...
    Отрезки (array slices)
    Отрезки ( array slices ) Для одномерных массивов Ада предусматривает удобную возможность указания нескольких последовательных компонент массива. Такая последовательность компонент массива называет...
    Массивы-константы
    Массивы-константы Ада допускает использование массивов-констант. В таких случаях, при описании массива-константы, необходимо инициализировать значения всех его элементов. Такая инициализация, как...
    Атрибуты массивов
    Атрибуты массивов С массивами ассоциируются следующие атрибуты: имя_массива ' First -- нижняя граница массива имя_массива ' Last -- верхняя граница массива имя_массива ' Length -- количество элеме...
    Многомерные массивы
    Многомерные массивы Ада позволяет использовать многомерные массивы. В качестве простого примера многомерного массива рассмотрим двухмерный массив целых чисел Square: Square_Size : constant := 5; s...
    Типы неограниченных массивов (unconstrained array), предопределенный тип String
    Типы неограниченных массивов ( unconstrained array ), предопределенный тип String До настоящего момента мы рассматривали только такие массивы у которых диапазон значений индекса был заведомо извес...
    Присваивание
    Присваивание Целому массиву может присваиваться значение другого массива. Оба массива должны быть одного и того же типа. Если оба массива одного и того же неограниченного типа, то они должны содер...
    Проверки на равенство и на неравенство
    Проверки на равенство и на неравенство Проверки на равенство и на неравенство доступны почти для всех типов Ады. Два массива считаются равными если каждый элемент первого массива равен соответству...
    Конкатенация
    Конкатенация Символ может быть использован как знак операции конкатенации двух массивов. declare type Vector is array (Positive range ) of Integer; A : Vector (0); B : Vector () := (1, 2, 3, 4, 5)...
    Сравнение массивов
    Сравнение массивов Для сравнения одномерных массивов могут быть использованы следующие знаки операций " ", " = ", " " и " = ". Они наиболее полезны при сравнении массивов символов (строк). "hello"...
    Логические операции
    Логические операции Если знаки логических операций " and ", " or ", " xor ", " not " допускается использовать для индивидуальных компонентов массива, то использование знаков логических операций дл...
    Динамические массивы
    Динамические массивы Ада позволяет не указывать размеры массива при написании программы. В этом случае размеры массива не фиксируются во время компиляции программы, а определяются во время ее выпо...
    Записи (record)
    Записи ( record ) Понятие записи, также как и понятие массива, является механизмом структурирования данных. Однако, в отличие от массива, запись позволяет сгруппировать в одном объекте набор объек...
    Описание простой записи
    Описание простой записи Как уже было сказано, запись - это структура данных состоящая из набора различных компонентов. В Аде, для описания такой структуры данных, необходимо описать тип записи. В...
    Значения полей записи по-умолчанию
    Значения полей записи по-умолчанию При описании записи, полям записи могут быть назначены значения по-умолчанию. Эти значения будут использоваться всякий раз при создании экземпляра записи данного...
    Доступ к полям записи
    Доступ к полям записи В Аде организация доступа к индивидуальным полям записи осуществляется с помощью точечной нотации, за именем переменной-записи, которое сопровождается точкой, следует имя пол...
    Агрегаты для записей
    Агрегаты для записей Так же как и в случае массива, все множество значений элементов записи может присваиваться с помощью агрегата. При этом агрегат должен предоставлять значения для всех компонен...
    Записи-константы
    Записи-константы Записи-константы могут быть созданы также как и обычные переменные. В этом случае значения всех полей записи должны быть инициализированы с помощью агрегата или значений определен...
    Лимитированные записи
    Лимитированные записи Тип записи может быть описан как лимитированная запись.В качестве примера, рассмотрим следующие описания: type Person is limited record Name : String(.Max_Chs); -- строка име...
    Вложенные структуры
    Вложенные структуры В качестве компонентов записи можно использовать составные типы. Например, полем записи может быть массив или какая-либо другая запись. Таким образом, Ада предоставляет возможн...
    Поля типа массив
    Поля типа массив В случаях когда какой-либо компонент записи необходимо описать как массив необходимо учесть, что такой компонент не может быть указан как анонимный массив. Это означает, что тип м...
    Поля записей типа String
    Поля записей типа String Частным случаем использования массивов в качестве компонентов записей являются строки String. Тип String, по сути, является предопределенным неограниченным массивом символ...
    Вложенные записи
    Вложенные записи Бывают случаи, когда компонент записи сам является записью, или, говоря иначе, требуется использование вложенных записей. Например: type Point is record X : Integer; Y : Integer;...
    Дискриминанты
    Дискриминанты Особенность всех ранее рассмотренных записей в том, что они всегда имеют строго определенные структуры. Действительно, число полей таких записей и их размеры строго зафиксированы на...
    Вариантные записи
    Вариантные записи Использование дискриминантов позволяет конструировать вариантные записи (или, называемые иначе, записи с вариантами). В этом случае, значение дискриминанта определяет наличие или...
    Ограниченные записи (constrained records)
    Ограниченные записи ( constrained records ) Записи My_Car, My_Bicycle и His_Car, которые мы рассматривали выше, называют ограниченными. Для таких записей значение дискриминанта определяется при оп...
    Неограниченные записи (unconstrained records)
    Неограниченные записи ( unconstrained records ) Ада позволяет описывать экземпляры записей без указания начального значения для дискриминанта, тогда запись будет называться неограниченной ( uncons...
    Другие использования дискриминантов
    Другие использования дискриминантов Также как и при использовании в качестве селектора выбора варианта в записи, дискриминант может быть использован для спецификации длины массива, который являетс...
    Подпрограммы
    Подпрограммы В Аде, также как и во всех современных языках программирования, подпрограммы позволяют программисту группировать инструкции в самостоятельные, логически законченные алгоритмические ед...
    Общие сведения о подпрограммах
    Общие сведения о подпрограммах Также как и в Паскале, подпрограммами Ады являются процедуры и функции. Подпрограммы могут иметь параметры различных типов или не иметь ни одного параметра. При опис...
    Процедуры
    Процедуры Процедуры Ады подобны процедурам Паскаля и используются для реализации самых разнообразных алгоритмов. Общий вид описания процедуры выглядит следующим образом: procedure имя_процедуры [...
    Функции
    Функции Функции во многом подобны процедурам, за исключением того, что они возвращают значение в вызвавшую их подпрограмму. Также можно сказать, что функция - это подпрограмма которая осуществляет...
    Локальные переменные
    Локальные переменные Как уже говорилось, подпрограммы (и процедуры, и функции) могут содержать локальные переменные. Такие переменные доступны только внутри подпрограммы и не видимы извне этой под...
    Локальные подпрограммы
    Локальные подпрограммы Также как и Паскаль, и в отличие от Си, Ада позволяет встраивать одни подпрограммы в другие подпрограммы, конструируя один общий компилируемый модуль.Другими словами, подпро...
    Раздельная компиляция
    Раздельная компиляция В предыдущем примере, если будет произведено какое-нибудь изменение кода, то обе процедуры должны быть переданы компилятору (поскольку обе находятся в одном файле с исходным...
    Подпрограммы как библиотечные модули
    Подпрограммы как библиотечные модули Любая подпрограмма Ады, при необходимости, может быть оформлена как абсолютно самостоятельный независимый библиотечный подпрограммный модуль. Рассмотрим как эт...
    Режимы передачи параметров
    Режимы передачи параметров Стандарт Ada83 предусматривал три режима передачи параметров для подпрограмм: " in " " in out " " out " Стандарт Ada95 добавил еще один режим передачи параметров: access...
    Режим "in"
    Режим " in " Параметры передаваемые в этом режиме подобны параметрам передаваемым по значению в языке Паскаль, и обычным параметрам языка Си, с тем исключением, что им не могут присваиваться знача...
    Режим "in out"
    Режим " in out " Этот режим непосредственно соответствует параметрам передаваемым по ссылке (подобно var -параметрам языка Паскаль). Таким образом, при входе в подпрограмму, формальный параметр ин...
    Режим "out"
    Режим " out " В этом режиме, при входе в подпрограмму, формальный параметр не инициализируется ( !!! ) значением фактического параметра.Согласно стандарта Ada95, внутри подпрограммы, формальный па...
    Режим access
    Режим access Поскольку значения ссылочного типа (указатели) часто используются в качестве параметров передаваемых подпрограммам, Ада предусматривает режим передачи параметров access , который спец...
    Позиционное сопоставление
    Позиционное сопоставление Позиционное сопоставление формальных и фактических параметров при вызове подпрограммы достаточно традиционно, и используется во многих языках программирования.При таком с...
    Именованное сопоставление
    Именованное сопоставление Для улучшения читабельности вызовов подпрограмм (а Ада разрабатывалась с учетом хорошей читабельности) Ада позволяет использовать именованное сопоставление формальных и ф...
    Смешивание позиционного и именованного сопоставления
    Смешивание позиционного и именованного сопоставления Ада позволяет смешивать позиционное и именованное сопоставление параметров.В этом случае должно соблюдаться следующее условие: позиционно-ассоц...
    Указание значения параметра по-умолчанию
    Указание значения параметра по-умолчанию Для любых " in "-параметров (" in " или " in out "), в спецификации подпрограммы можно указать значение параметра по-умолчанию.Синтаксис установки значения...
    Совмещение (overloading)
    Совмещение ( overloading ) Поиск новых имен для подпрограмм, которые выполняют одинаковые действия, но с переменными разных типов, всегда является большой проблемой при разработке программного обе...
    Совмещение подпрограмм (subprogram overloading)
    Совмещение подпрограмм ( subprogram overloading ) Предоставляя механизм совмещения имен подпрограмм, Ада выдвигает единственное требование: подпрограммы должны быть распознаваемы (или различимы).Д...
    Совмещение знаков операций (operator overloading)
    Совмещение знаков операций ( operator overloading ) В языках подобных Паскалю знак операции "+" - совмещен.Действительно, он может использоваться для сложения целых и вещественных чисел, и даже ст...
    Спецификатор "use type"
    Спецификатор " use type " В случае когда какой-либо пакет содержит описания знаков операций, может быть использована несколько модифицированная форма спецификатора использования use , которая позв...
    Пакеты
    Пакеты Хотя корни Ады лежат в языке Паскаль, концепция пакетов была заимствована из других языков программирования и подверглась значительному влиянию последних наработок в области разработки прог...
    Идеология концепции пакетов
    Идеология концепции пакетов Прежде чем непосредственно рассматривать примеры языковых конструкций необходимо разобраться в чем заключается и что предлагает концепция пакетов. Пакет - это средство,...
    Спецификация пакета
    Спецификация пакета Как уже говорилось, спецификация пакета Ады определяет интерфейс доступа к вычислительным ресурсам (сервисам) пакета.Она может содержать описания типов, переменных, констант, с...
    Тело пакета
    Тело пакета Тело пакета содержит все детали реализации сервисов, указаных в спецификации пакета.Схематическим примером тела пакета, для показанной выше спецификации, может служить: package body Od...
    Средства сокрытия деталей реализации внутреннего представления данных
    Средства сокрытия деталей реализации внутреннего представления данных Как уже указывалось, спецификация пакета определяет интерфейс, а его тело скрывает реализацию сервисов предоставляемых пакетом...
    Приватные типы (private types)
    Приватные типы ( private types ) Рассмотрим пример пакета который управляет счетами в бухгалтерской книге.При этом, нам необходимо осуществлять полный контроль над всеми манипуляциями которые выпо...
    Лимитированные приватные типы (limited private types)
    Лимитированные приватные типы ( limited private types ) Хотя приватные типы позволяют разработчику получить значительный контроль над действиями пользователя, ограничив способности пользователя в...
    Отложенные константы (deferred constants)
    Отложенные константы ( deferred constants ) В некоторых спецификациях пакетов возникает необходимость описать константу приватного типа. Это можно выполнить таким же образом как и описание приватн...
    Дочерние модули (child units) (Ada95)
    Дочерние модули ( child units ) (Ada95) Не редко, во время интенсивной разработки большой системы, возникают случаи когда один из пакетов разрастается необычайно быстро, а его спецификация подверг...
    Расширение существующего пакета
    Расширение существующего пакета Рассмотрим случай когда возникает необходимость расширения пакета который уже содержит некоторое множество описаний.Например, в пакете Stacks может понадобиться доп...
    Иерархия модулей как подсистема
    Иерархия модулей как подсистема Каждый программный модуль (процедура, функция пакет) должен иметь уникальное имя.Бывают случаи, когда происходит быстрое заполнение пространства имен.Например, при...
    Приватные дочерние модули (private child units)
    Приватные дочерние модули ( private child units ) Дочерние модули могут быть приватными.Такая концепция позволяет создавать дочерние модули, которые будут видимы только внутри иерархии родительско...
    Переименования
    Переименования Ада предоставляет программисту возможность осуществлять переименования.Следует заметить, что переименование иногда вызывает споры в организациях программирующих на Аде.Некоторым люд...
    Уменьшение длин имен
    Уменьшение длин имен Переименование может быть полезно в случае наличия длинных имен пакетов: with Ada.Text_IO; with Ada.Integer_Text_IO; procedure Gun_Aydin is package TIO renames Ada.Text_IO; pa...
    Переименование знаков операций
    Переименование знаков операций В некоторых случаях, знак операции для типа описанного в пакете, который указан в спецификаторе контекста with , не является непосредственно видимым.В действительнос...
    Переименование исключений
    Переименование исключений В некоторых случаях полезно осуществить локальное переименование исключения: with Ada.IO_Exceptions; package My_IO is Data_Error: exception renames Ada.IO_Exceptions.Data...
    Переименование компонентов
    Переименование компонентов Наиболее часто забываемым свойством переименования Ады является возможность предоставления собственного имени определенному компоненту составного типа: with Ada.Text_IO;...
    Переименование отрезка массива
    Переименование отрезка массива Предположим, что у нас есть следующая строка: Name : String(0); Причем, отрезок (0) - это фамилия ( last name ), отрезок (39) - имя ( first name ), символ в позиции...
    Переименование поля записи
    Переименование поля записи Предположим, что у нас имеются следующие описания: subtype Number_Symbol is Character range '0' .. '9'; subtype Address_Character is Character range Ada.Characters.Latin...
    Переименование библиотечного модуля
    Переименование библиотечного модуля Предположим, что в нашей библиотеке есть пакет который часто используется, и предположим, что этот пакет имеет довольно длинное имя.Пользуясь переименованием, м...
    Настраиваемые модули в языке Ада (generics)
    Настраиваемые модули в языке Ада ( generics ) Долгие годы одной из самых больших надежд программистов была надежда в многократном повторном использовании однажды написанного кода (похоже, ...и ост...
    Общие сведения о настраиваемых модулях
    Общие сведения о настраиваемых модулях В языке Ада, любой программный модуль (подпрограмма или пакет) может быть настраиваемым модулем.Такой настраиваемый модуль используется для создания экземпля...
    Настраиваемые подпрограммы
    Настраиваемые подпрограммы Рассмотрим простой пример описания настраиваемой подпрограммы.Однажды скомпилированная, она в последствии может быть помещена в инструкцию спецификатора совместности кон...
    Настраиваемые пакеты
    Настраиваемые пакеты Пакеты также могут быть настраиваемыми.Следующая спецификация настраиваемого пакета достаточно традиционна: generic type Element is private ; -- примечательно, что это парамет...
    Дочерние настраиваемые модули
    Дочерние настраиваемые модули Настраиваемые пакеты, подобно обычным пакетам Ады, могут иметь дочерние модули.При этом, следует заметить, что такие дочерние модули также должны быть настраиваемыми...
    Параметры настройки для настраиваемых модулей
    Параметры настройки для настраиваемых модулей Существует три типа параметров для настраиваемых модулей: параметры-типы параметры-значения параметры-подпрограммы Необходимо заметить, что до настоящ...
    Параметры-типы
    Параметры-типы Не смотря на привлекательные свойства настраиваемых модулей, при определении характера задач, решаемых с помощью настраиваемого модуля, необходимо иметь возможность накладывать неко...
    Параметры-значения
    Параметры-значения Параметры-значения позволяют указывать значения для переменных внутри настраиваемого модуля: generic type Element is private ; Size: Positive := 200; package Stacks is procedure...
    Параметры-подпрограммы
    Параметры-подпрограммы В качестве параметра настройки для настраиваемого модуля может быть передана подпрограмма.Необходимость в параметрах-подпрограммах чаще всего возникает когда какой-либо форм...
    Преимущества и недостатки настраиваемых модулей
    Преимущества и недостатки настраиваемых модулей В заключение обсуждения настраиваемых модулей Ады необходимо отметить преимущества и недостатки использования данной концепции. Основным преимуществ...
    Исключения
    Исключения Как это не печально, но процесс разработки и эксплуатации любого программного обеспечения всегда сочетается с процессом поиска и исправления ошибок.Все ошибки, возникающие в программах...
    Предопределенные исключения
    Предопределенные исключения Существует пять исключений которые стандартно предопределены в языке программирования Ада: Constraint_Error - Ошибка ограничения Numeric_Error - Ошибка числа Program_Er...
    Исключение Constraint_Error
    Исключение Constraint_Error Исключение Constraint_Error возбуждается в следующих случаях: при попытке нарушения ограничения диапазона, ограничения индекса или ограничения дискриминанта при попытке...
    Исключение Numeric_Error
    Исключение Numeric_Error Исключение Numeric_Error возбуждается в случае когда предопределенная численная операция не может предоставить математически корректный результатЭто может произойти при ар...
    Исключение Program_Error
    Исключение Program_Error Исключение Program_Error возбуждается в следующих случаях: при попытке вызова подпрограммы, активизации задачи или конкретизации настройки, если тело соответствующего моду...
    Исключение Storage_Error
    Исключение Storage_Error Исключение Storage_Error возбуждается в следующих случаях: при попытке размещения динамического объекта обнаруживается, что нет достаточного пространства в динамической па...
    Исключение Tasking_Error
    Исключение Tasking_Error Исключение Tasking_Error возбуждается в случаях межзадачного взаимодействия.Оно может быть возбуждено при возникновении какого-либо исключения внутри задачи которая в теку...
    Исключения определяемые пользователем
    Исключения определяемые пользователем Механизм исключений Ады был бы не столь полным если бы он позволял использовать только стандартно предопределенные исключения.Поэтому, в дополнение к стандарт...
    Описание исключения пользователя
    Описание исключения пользователя Описания пользовательских исключений должны размещаться в декларативной части кода, то есть там где обычно размещаются описания (например, в спецификации пакета).Ф...
    Возбуждение исключений
    Возбуждение исключений Указание возбуждения исключения достаточно простое.Для этого используется инструкция raise . Например: raise Numeric_Error; Сгенерированное таким образом исключение не будет...
    Обработка исключений
    Обработка исключений В настоящий момент мы уже знаем стандартно предопределенные исключения Ады, знаем как описывать исключения и знаем как их возбуждать (и свои, и предопределенные).Однако, весь...
    Обработчики исключений
    Обработчики исключений Обработчик исключения может размещаться в конце тела подпрограммы, пакета или настраиваемого модуля, в конце тела задачи или входа, а также в конце инструкции блока или инст...
    Распространение исключений
    Распространение исключений Для того, чтобы точно знать в каком месте должен быть расположен соответствующий обработчик исключения, необходимо понимать как при возникновении исключения, во время ра...
    Проблемы с областью видимости при обработке исключений определяемых пользователем
    Проблемы с областью видимости при обработке исключений определяемых пользователем Во всех предыдущих примерах, посвященных обработке исключений, были использованы стандартно определенные исключени...
    Пакет Ada.Exceptions
    Пакет Ada.Exceptions Стандартный пакет Ada.Exceptions предоставляет некоторые дополнительные средства, которые могут быть использованы при обработке исключений. Описанный в нем объект: Event : Exc...
    Принципы подавления исключений
    Принципы подавления исключений Как правило, существует два источника которые выполняют возбуждение исключений при обнаружении некоторых ошибочных условий.Один из них - это механизмы аппаратной про...
    Выполнение подавления исключений
    Выполнение подавления исключений Мы можем подавить проверку исключений для индивидуального объекта: pragma Suppress (Idex_Check, on = table); Подавление проверки исключений также может относиться...
    Организация ввода/вывода
    Организация ввода/вывода В отличие от своего прародителя Паскаля, Ада не содержит жестко встроенных средств ввода/вывода.Вместо этого, для обеспечения поддержки ввода/вывода, Ада предусматривает п...
    Текстовый ввод/вывод
    Текстовый ввод/вывод Заметим, что хотя средства поддержки текстового ввода/вывода Ады не рассматривались до настоящего момента, некоторые ранее рассмотренные примеры уже применяли эти средства, ос...








Начало    



Книжный магазин