Например, со всеми регулярными типами связана операция получения указателя на компоненту массива (индексация), со всеми комбинированными типами связана операция получения указателя на компоненту записи (выборка), со всеми так называемыми ДИСКРЕТНЫМИ типами - получение по заданному значению последующего или предыдущего значения. Если явно не оговорено обратное, то к объектам любого типа можно применять сравнение на равенство и неравенство, извлечение и присваивание значения.
Предопределенные типы, классы значений и операции служат исходным материалом для нескольких категорий конструкторов типа - у каждой категории типов свой конструктор.
Объявление типа (а, следовательно, и конструктор типа) служит для того, чтобы полностью и окончательно определить класс допустимых значений и (в общем случае лишь частично) определить базовые операции.
Полный и окончательный набор базовых операций некоторого типа фиксируется его определяющим пакетом (так называется пакет, спецификация которого содержит объявление этого типа). В спецификации определяющего пакета вместе с объявлением нового типа могут присутствовать и объявления новых операций, связанных с ним.
Например, конструктор производного типа, создавая тип "узел", определяет для него класс (в данном случае - диапазон) значений и связывает с типом "узел" обычные операции над целыми числами (наследуемые у родительского типа INTEGER). Остальные базовые операции для объектов типа "узел" (вставить, удалить, связать и др.) определены в конце спецификации пакета управление_сетью, который и служит для этого типа определяющим пакетом. Подчеркнем, что для типов, объявляемых в теле пакета, он, естественно, определяющим не считается (почему?).
Еще пример. Конструктор КОМБИНИРОВАННОГО типа, создавая тип "связи", определяет для него, во-первых, класс значений (записи с двумя полями - первое с СЕЛЕКТОРОМ "число" типа число_связей, второе с селектором "узлы" типа "перечень-связей"). Во-вторых, этот конструктор определяет обычные для всех комбинированных типов операции доступа как ко всему значению объекта (по имени объекта), так и к его компонентам (по составным именам с использованием селекторов). Еще одна (и последняя) базовая операция для этого типа определена в пакете управление_сетью - это операция все_связи. Доступ к полному значению объекта типа "связи" использован в реализации функции все_связи (в операторе возврата), а доступ к одному полю по селектору - в реализации операций вставить, удалить, чистить, переписать.
Конструктор ПРИВАТНОГО типа, создавая тип "сети", определяет в качестве базовых операций только присваивание и сравнение на равенство и неравенство. Определяющий пакет управление_сетями добавляет базовые операции вставить, удалить и др.
Обратите внимание, одни и те же операции могут быть базовыми для различных типов! За счет чего?
Класс значений для типа "сети" определен полным объявлением в приватной части, однако пользователю этот класс остается "неизвестным" (непосредственно недоступным).
Запас предопределенных типов, значений и операций - это базис ЯП, а конструкторы типа - характерный пример средств развития. Процесс развития ЯП (с помощью любых конструкторов) начинается с применения конструкторов к базису. На очередном шаге развития конструкторы применяются к любым уже определенным сущностям (в том числе и к базисным).
...
Содержание
ЧАСТЬ 1. СОВРЕМЕННОЕ СОСТОЯНИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ. 6
1. Концептуальная схема языка программирования. 6
1.1. Что такое язык программирования. 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.14. Два основных средства борьбы со сложностью. Основной критерий качества ЯП.. 17
1.15. Язык программирования как знаковая система. 18
1.16. Разновидности программирования. 19
1.17. Понятие о базовом языке. 20
1.18. Концептуальная схема рассмотрения ЯП.. 20
2. Пример современного базового ЯП (модель А). 22
2.1. Общее представление о ЯП Ада. 22
2.2. Пример простой программы на Аде. 23
2.4. Пошаговая детализация средствами Ады.. 29
2.5. Замечания о конструктах. 33
2.6. Как пользоваться пакетом управление_сетью.. 34
2.7. Принцип раздельного определения, реализации и использования услуг (принцип РОРИУС) 41
2.8. Принцип защиты абстракций. 41
3. Важнейшие абстракции: данные, операции, связывание. 42
3.1. Принцип единства и относительности трех абстракций. 42
3.3. От связывания к пакету. 44
3.4. Связывание и специализация. 45
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.3. Раздельная трансляция. 102
5.4. Связывание трансляционных модулей. 102
5.5. Принцип защиты авторского права. 103
6.4. Концепция внешней дисциплины.. 111
6.5. Концепция внутренней дисциплины: мониторы.. 111
6.8. Асимметричное рандеву. 117
6.9. Управление асимметричным рандеву (семантика вспомогательных конструктов). 117
6.10. Реализация семафоров, сигналов и мониторов посредством асимметричного рандеву. 119
6.11. Управление асинхронными процессами в Аде. 122
7.1. Проблема знака в ЯП.. 124
7.2. Определяющая потребность. 124
7.4. Проблема конкретизации эталонного текста. 125
7.5. Стандартизация алфавита. 126
7.6. Основное подмножество алфавита. 127
8.2. Определяющие требования. 130
8.3. Аппарат исключений в ЯП.. 132
8.4. Дополнительные особенности обработки исключений. 138
9.1. Структура библиотеки. 142
9.2. Компилируемый (трансляционный) модуль. 143
9.3. Порядок компиляции и перекомпиляции (создания и модификации программной библиотеки) 143
9.4. Резюме: логическая и физическая структуры программы.. 144
10. Именование и видимость (на примере Ады). 145
10.1. Имя как специфический знак. 145
10.2. Имя и идентификатор. 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 |


