Например, со всеми регулярными типами связана операция получе­ния указателя на компоненту массива (индексация), со всеми ком­бинированными типами связана операция получения указателя на компоненту записи (выборка), со всеми так называемыми ДИСК­РЕТНЫМИ типами - получение по заданному значению последую­щего или предыдущего значения. Если явно не оговорено обратное, то к объ­ектам любого типа можно применять сравнение на равенство и нера­венство, извлечение и присваивание значения.

Предопределенные типы, классы значений и операции служат ис­ходным материалом для нескольких категорий конструкторов типа - у каждой категории типов свой конструктор.

Объявление типа (а, следовательно, и конструктор типа) служит для того, чтобы полностью и окончательно определить класс допу­стимых значений и (в общем случае лишь частично) определить базо­вые операции.

Полный и окончательный набор базовых операций некоторого ти­па фиксируется его определяющим пакетом (так называется пакет, спецификация которого содержит объявление этого типа). В специ­фикации определяющего пакета вместе с объявлением нового типа могут присутствовать и объявления новых операций, связанных с ним.

Например, конструктор производного типа, создавая тип "узел", определяет для него класс (в данном случае - диапазон) значений и связывает с типом "узел" обычные операции над целыми числами (наследуемые у родительского типа INTEGER). Остальные базовые операции для объектов типа "узел" (вставить, удалить, связать и др.) определены в конце спецификации пакета управление_сетью, который и служит для этого типа определяющим пакетом. Подчерк­нем, что для типов, объявляемых в теле пакета, он, естественно, оп­ределяющим не считается (почему?).

НЕ нашли? Не то? Что вы ищете?

Еще пример. Конструктор КОМБИНИРОВАННОГО типа, созда­вая тип "связи", определяет для него, во-первых, класс значений (записи с двумя полями - первое с СЕЛЕКТОРОМ "число" типа число_связей, второе с селектором "узлы" типа "перечень-связей"). Во-вторых, этот конструктор определяет обычные для всех комбини­рованных типов операции доступа как ко всему значению объекта (по имени объекта), так и к его компонентам (по составным именам с использованием селекторов). Еще одна (и последняя) базовая опе­рация для этого типа определена в пакете управление_сетью - это операция все_связи. Доступ к полному значению объекта типа "свя­зи" использован в реализации функции все_связи (в операторе воз­врата), а доступ к одному полю по селектору - в реализации опера­ций вставить, удалить, чистить, переписать.

Конструктор ПРИВАТНОГО типа, создавая тип "сети", опреде­ляет в качестве базовых операций только присваивание и сравнение на равенство и неравенство. Определяющий пакет управление_сетями добавляет базовые операции вставить, удалить и др.

Обратите внимание, одни и те же операции могут быть базовыми для различных типов! За счет чего?

Класс значений для типа "сети" определен полным объявлением в приватной части, однако пользователю этот класс остается "неиз­вестным" (непосредственно недоступным).

Запас предопределенных типов, значений и операций - это базис ЯП, а конструкторы типа - характерный пример средств развития. Процесс развития ЯП (с помощью любых конструкторов) начинает­ся с применения конструкторов к базису. На очередном шаге разви­тия конструкторы применяются к любым уже определенным сущно­стям (в том числе и к базисным).

...

Содержание

ЧАСТЬ 1. СОВРЕМЕННОЕ СОСТОЯНИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ. 6

1. Концептуальная схема языка программирования. 6

1.1. Что такое язык программирования. 6

1.2. Метауровень. 6

1.3. Модель передачи сообщения. 7

1.4. Классификация недоразумений. 7

1.5. Отступление об абстракции-конкретизации. Понятие модели. 8

1.6. Синтактика, семантика, прагматика. 9

1.7. Зачем могут понадобиться знания о ЯП.. 10

1.8. Принцип моделирования ЯП.. 11

1.9. Пять основных позиций рассмотрения ЯП.. 12

1.10. Что такое производство программных услуг. 12

1.11. Производство программных услуг - основная цель программирования. 14

1.12. Сложность как основная проблема программирования. 15

1.13. Источники сложности. 15

1.14. Два основных средства борьбы со сложностью. Основной критерий качества ЯП.. 17

1.15. Язык программирования как знаковая система. 18

1.16. Разновидности программирования. 19

1.17. Понятие о базовом языке. 20

1.18. Концептуальная схема рассмотрения ЯП.. 20

2. Пример современного базового ЯП (модель А). 22

2.1. Общее представление о ЯП Ада. 22

2.2. Пример простой программы на Аде. 23

2.3. Обзор языка Ада. 25

2.4. Пошаговая детализация средствами Ады.. 29

2.5. Замечания о конструктах. 33

2.6. Как пользоваться пакетом управление_сетью.. 34

2.7. Принцип раздельного определения, реализации и использования услуг (принцип РОРИУС) 41

2.8. Принцип защиты абстракций. 41

3. Важнейшие абстракции: данные, операции, связывание. 42

3.1. Принцип единства и относительности трех абстракций. 42

3.2. Связывание. 43

3.3. От связывания к пакету. 44

3.4. Связывание и специализация. 45

3.5. Принцип цельности. 49

4. Данные и типы.. 52

4.1. Классификация данных. 52

4.2. Типы данных. 54

4.3. Регламентированный доступ и типы данных. 62

4.4. Характеристики, связанные с типом. Класс значений, базовый набор операций. 69

4.5. Воплощение концепции уникальности типа. Определение и использование типа в Аде (начало) 70

4.6. Конкретные категории типов. 71

4.7. Типы как объекты высшего порядка. Атрибутные функции. 89

4.8. Родовые (настраиваемые) сегменты.. 90

4.9. Числовые типы (модель числовых расчетов). 92

4.10. Управление операциями. 95

4.11. Управление представлением.. 96

4.12. Классификация данных и система типов Ады.. 99

4.13. Предварительный итог по модели А.. 100

5. Раздельная компиляция. 101

5.1. Понятие модуля. 101

5.2. Виды трансляций. 101

5.3. Раздельная трансляция. 102

5.4. Связывание трансляционных модулей. 102

5.5. Принцип защиты авторского права. 103

6. Асинхронные процессы.. 104

6.1. Основные проблемы.. 104

6.2. Семафоры Дейкстры.. 107

6.3. Сигналы.. 109

6.4. Концепция внешней дисциплины.. 111

6.5. Концепция внутренней дисциплины: мониторы.. 111

6.6. Рандеву. 114

6.7. Проблемы рандеву. 116

6.8. Асимметричное рандеву. 117

6.9. Управление асимметричным рандеву (семантика вспомогательных конструктов). 117

6.10. Реализация семафоров, сигналов и мониторов посредством асимметричного рандеву. 119

6.11. Управление асинхронными процессами в Аде. 122

7. Нотация. 124

7.1. Проблема знака в ЯП.. 124

7.2. Определяющая потребность. 124

7.3. Основная абстракция. 125

7.4. Проблема конкретизации эталонного текста. 125

7.5. Стандартизация алфавита. 126

7.6. Основное подмножество алфавита. 127

7.7. Алфавит языка Ада. 127

7.8. Лексемы.. 127

7.9. Лексемы в Аде. 128

8. Исключения. 129

8.1. Основная абстракция. 129

8.2. Определяющие требования. 130

8.3. Аппарат исключений в ЯП.. 132

8.4. Дополнительные особенности обработки исключений. 138

9. Библиотека. 142

9.1. Структура библиотеки. 142

9.2. Компилируемый (трансляционный) модуль. 143

9.3. Порядок компиляции и перекомпиляции (создания и модификации программной библиотеки) 143

9.4. Резюме: логическая и физическая структуры программы.. 144

10. Именование и видимость (на примере Ады). 145

10.1. Имя как специфический знак. 145

10.2. Имя и идентификатор. 145

10.3. Проблема видимости. 145

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24