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




Глава 2. Язык Ада - взгляд "сверху вниз"


    Язык Ада - взгляд "сверху вниз"
    Язык Ада - взгляд "сверху вниз" Знакомство с языком программирования Ада можно осуществлять несколькими различными путями.Первая часть рассматривает большинство синтаксических конструкций языка пр...
    Абстракция данных
    Абстракция данных Абстракция данных является мощным инструментом современного программирования.Этот концептуальный подход позволяет объединить тип данных с множеством операций, которые допустимо в...
    Объектно-ориентированное программирование
    Объектно-ориентированное программирование Объектно-ориентированное программирование в отличие от метода, основанного на управлении, характеризуется тем, что программа большей частью описывает созд...
    Сущность абстрактного типа данных
    Сущность абстрактного типа данных Суть абстракции данных заключается в определении типа данных как множества значений и множества операций для манипулирования этими значениями.Таким образом, какой...
    Структура абстрактного типа данных
    Структура абстрактного типа данных В настоящее время, абстрактный тип данных является одной из общих концепций программирования, вне зависимости от используемого языка программирования.Как правило...
    Средства Ады для работы с абстрактными типами данных
    Средства Ады для работы с абстрактными типами данных Ада предоставляет набор средств, которые обеспечивают поддержку разработки и использования абстрактных типов данных.Такими средствами являются:...
    Пакеты как средство абстракции данных
    Пакеты как средство абстракции данных Пакет в языке Ада представляет собой конструкцию, которая может использоваться для определения абстрактных данных.Большинство экспертов рассматривают эту возм...
    Сравнение пакетов и классов
    Сравнение пакетов и классов Необходимо обратить внимание на то, что использование пакетов Ады, как инструмента абстракции данных, подобно классам в других объектно-ориентированных языках программи...
    Абстракция стека
    Абстракция стека В качестве простого примера, который демонстрирует использование пакета для реализации абстрактного типа данных, рассмотрим стек.Следует заметить, что клинтам этого пакета абсолют...
    Абстракция очереди
    Абстракция очереди Очень важно определить различие между тем какие сервисы предусматривает тип, и как этот тип их реализует.Например, абстракция списка, которая имеет соответствующие подпрограммы...
    Еще один пример стека
    Еще один пример стека Предположим, что мы хотим создать пакет стека, но при этом, мы не хотим переписывать все подпрограммы. Мы уже имеем реализацию связанного списка, которая может служить осново...
    Создание абстракций из настраиваемых абстракций
    Создание абстракций из настраиваемых абстракций Достаточно часто встречаются случаи, когда настраиваемый пакет, который предоставляет подходящую структуру данных, может быть использован для постро...
    Настраиваемый модуль как параметр настройки
    Настраиваемый модуль как параметр настройки Настраиваемый модуль может быть конкретизирован с помощью использования настраиваемого модуля в качестве формального параметра настройки.В таком случае...
    Тэговый тип как параметр настройки
    Тэговый тип как параметр настройки Поскольку стандарт Ada95 различает два вида типов: тэговые и не тэговые, - то бывают случаи когда при работе с настраиваемыми модулями их необходимо различать.По...
    Производный тип как параметр настройки
    Производный тип как параметр настройки Использование производного типа как формального параметра настройки подобно использованию в качестве формального параметра настройки настраиваемого модуля.В...
    Построение абстракции путем композиции
    Построение абстракции путем композиции Абстракция данных может быть построена с помощью композиции, когда новый абстрактный тип данных составляется из нескольких уже существующих абстрактных типов...
    Абстрагирование общей функциональности
    Абстрагирование общей функциональности Показанные ранее реализации стека, предусматривали общее множество подпрограмм, таких как Push, Pop, и т.д.В Аде, мы можем установить общность используя общи...
    Многоуровневые абстракции
    Многоуровневые абстракции При построении новой абстракции из другой абстракции, новая абстракция может нуждаться в доступе к приватным описаниям уже существующей абстракции.Например, повсеместные...
    Комбинирование абстракций, множественное наследование
    Комбинирование абстракций, множественное наследование Множественное наследование подразумевает построение новой абстракции путем наследования свойств двух и более абстракций.Хотя в основе замысла...
    Смешанное наследование
    Смешанное наследование Смешанное наследование является формой множественного наследования при котором одна или две комбинированных абстракции выступают в роли шаблонов ( subpattern ).Любой подобны...
    Родственное наследование
    Родственное наследование В дополнение к показанному выше способу, можно использовать несколько специализированный способ родственного наследования ( sibling inheritance ), с применением ссылочных...
    Пример программирования посредством расширения
    Пример программирования посредством расширения Программирование путем расширения подразумевает, что при необходимости добавления в программную систему каких-либо новых свойств она может быть выпол...
    Контекст и видимость
    Контекст и видимость Ошибочное понимание разницы между контекстом ( scope ) и видимостью ( visibility ) может вызвать трудности у многих программистов, которые знакомятся с языком программирования...
    Управление видимостью
    Управление видимостью При построении большой модульной системы, существует необходимость в определении того, что должно быть видимым и того, что не должно быть видимым за пределами какого-либо мод...
    Подсистемы
    Подсистемы Большие системы обычно состоят из сотен и даже тысяч самостоятельных компонентов.Обычно не требуется, чтобы каждый отдельный компонент активно взаимодействовал со всеми остальными частя...
    Элаборация
    Элаборация Процесс элаборации является процессом предварительной подготовки, который осуществляется непосредственно перед началом выполнения головной программы, тела инструкции блока или подпрогра...
    Код элаборации
    Код элаборации Стандарт Ada95 предусматривает общие правила выполнения кода в процессе элаборации (иначе, кода элаборации).Обработка кода элаборации осуществляется в трех контекстах: Инициализация...
    Проверка порядка элаборации
    Проверка порядка элаборации В некоторых языках программирования, которые подразумевают наличие аналогичных проблем элаборации (например Java и C++), программист вынужден заботиться о порядке элабо...
    Управление порядком элаборации
    Управление порядком элаборации Выше мы обсудили правила согласно которых возбуждается исключение Program_Error , когда выбран неправильный порядок элаборации.Это предотвращает ошибочное выполнение...
    "Сюрпризы" численных типов
    "Сюрпризы" численных типов Достаточно часто распространены случаи, когда программист, который только начинает знакомиться с языком программирования Ада, попадается в ловушку численных типов.Рассмо...
    Принудительная инициализация
    Принудительная инициализация В объектно-ориентированных языках программирования, которые используют классы (например язык C++), можно принудительно навязать автоматическую инициализацию для всех о...
    Взаимно рекурсивные типы
    Взаимно рекурсивные типы Бывают случаи, когда необходимо иметь два (или более) типа, которые являются взаимно рекурсивными.Такие типы содержат указатели, ссылаются друг на друга.В качестве примера...
    Рекомендации по построению абстракций
    Рекомендации по построению абстракций Как уже говорилось, пакет Ады является инструментом абстракции данных.В этом случае пакет содержит какой-либо главный тип, и такая конструкция очень подобна к...
    Тэговые типы - не для всех абстракций!
    Тэговые типы - не для всех абстракций! Первое правило - очень простое: не следует использовать тэговые типы для очень простых абстракций, таких как расстояние, угол, температура, и так далее: во-п...
    Контролируемые или не контролируемые?
    Контролируемые или не контролируемые? Когда главный тип абстракции является производным от Ada.Finalization.Controlled, то вызовы Initialize, Adjust и Finalize автоматически выполняются компилятор...
    Никогда не используйте неинициализированные объекты
    Никогда не используйте неинициализированные объекты Для избежения непредсказуемого поведения при использовании неинициализированных объектов, описание главного типа абстракции должно устанавливать...
    Создание и удаление объектов
    Создание и удаление объектов Если абстракция описывает функцию Create, которая возвращает экземпляр объекта главного типа абстракции, то все потомки этой абстракции будут наследовать такую операци...
    Именование тэговых типов
    Именование тэговых типов При построении абстракций с применением тэговых типов, необходимо использовать согласованные наименования как для тэговых типов, так и для ассоциируемых с ними пакетов.Сле...
    Именование методов
    Именование методов Для именования методов абстракций предлагаются следующие правила: Имена методов в комбинации с их аргументами должны читаться подобно фразам английского языка. функции, возвраща...
    Опасность наследования
    Опасность наследования Когда главный тип абстракции - производный, он наследует все примитивные методы своих предков.Иногда некоторые из унаследованных методов не будут работать или будут не прави...
    Советы Паскаль-программистам
    Советы Паскаль-программистам Ада является языком программирования, который во многих аспектах подобен языку Паскаль.Однако, Ада не является "супермножеством" средств языка Паскаль.Таким образом, с...
    Описания и их последовательность
    Описания и их последовательность Стандарт языка Паскаль требует использование правильного порядка следования описаний (константы, типы, переменные, подпрограммы), что ослабляется некоторыми реализ...
    Структуры управления
    Структуры управления Все структуры управления последовательностью выполнения (иначе, управляющие структуры) Ады имеют соответствующие закрывающие инструкции, такие как " if ... end if ", " loop .....
    Типы и структуры данных
    Типы и структуры данных Двумерные массивы не являются массивами массивов.Следовательно, A(J)(K) не является тем же самым, что и A(J,K).Разработчики, в действительности, относят последний из двумер...
    Совместимость типов и подтипов
    Совместимость типов и подтипов Важно помнить и понимать, что Ада использует именную, а не структурную эквивалентность типов.Например, пусть даны следующие описания: A, B: array (0) of Float; C : a...
    Параметры подпрограмм
    Параметры подпрограмм Режимы передачи параметров " in ", " out " и " in out ". для подпрограмм Ады, являются грубыми эквивалентами режимов передачи параметров по значению и по ссылке ( var ) для п...
    Пакеты Ады и их соответствие модулям Паскаля
    Пакеты Ады и их соответствие модулям Паскаля Реально, модули Паскаля ( unit ) не являются частью стандарта ISO Pascal .Однако, их использование предусматривается многими современными расширениями...
    Использование "is" и символа точки с запятой ';'
    Использование " is " и символа точки с запятой ';' Бесконечное горе ждет тех пользователей Ады, которые путают назначение символа точки с запятой ';' с назначением " is ".При использовании некотор...








Начало    



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