Предисловие


Часть 1. Введение в языки программирования


Глава 1. Что такое языки программирования
1.1. Некорректный вопрос
1.2. Процедурные языки
1.3. Языки, ориентированные на данные
1.4. Объектно-ориентированные языки
1.5. Непроцедурные языки
1.6. Стандартизация
1.7. Архитектура компьютера
1.8. Вычислимость
1.9. Упражнения

Глава 2. Элементы языков программирования
2.1. Синтаксис
2.2. Семантика
2.3. Данные
2.4. Оператор присваивания
2.5. Контроль соответствия типов
2.6. Управляющие операторы
2.7. Подпрограммы
2.8. Модули
2.9. Упражнения

Глава 3. Среды программирования
3.1. Редактор
3.2. Компилятор
3.3. Библиотекарь
3.4. Компоновщик
3.5. Загрузчик
3.6. Отладчик
3.7. Профилировщик
3.8. Средства тестирования
3.9. Средства конфигурирования
3.10. Интерпретаторы
3.11. Упражнения


Часть 2. Основные понятия


Глава 4. Элементарные типы данных
4.1. Целочисленные типы
4.2. Типы перечисления
4.3. Символьный тип
4.4. Булев тип
4.5. Подтипы
4.6. Производные типы
4.7. Выражения
4.8. Операторы присваивания
4.9. Упражнения

Глава 5. Составные типы данных
5.1. Записи
5.2. Массивы
5.3. Массивы и контроль соответствия
типов
5.4. Подтипы массивов в языке Ada
5.5. Строковый тип
5.6. Многомерные массивы
5.7. Реализация массивов
5.8. Спецификация представления
5.9. Упражнения

Глава 6. Управляющие структуры
6.1. Операторы switch и case
6.2. Условные операторы
6.3. Операторы цикла
6.4. Цикл for
6.5."Часовые"
6.6. Инварианты
6.7. Операторы goto
6.8. Упражнения

Глава 7. Подпрограммы
7.1. Подпрограммы: процедуры и функции
7.2. Параметры
7.3. Передача параметров подпрограмме
7.4. Блочная структура
7.5. Рекурсия
7.6. Стековая архитектура
7.7. Еще о стековой архитектуре
7.8. Реализация на процессоре Intel 8086
7.9. Упражнения


Часть 3. Более сложные понятия


Глава 8. Указатели
8.1. Указательные типы
8.2. Структуры данных
8.3. Распределение памяти
8.4. Алгоритмы распределения
динамической памяти
8.5. Упражнения

Глава 9. Вещественные числа
9.1. Представление вещественных чисел
9.2. Языковая поддержка вещественных
чисел
9.3. Три смертных греха
9.4. Вещественные типы в языке Ada
9.5. Упражнения

Глава 10. Полиморфизм
10.1. Преобразование типов
10.2. Перегрузка
10.3. Родовые (настраиваемые) сегменты
10.4. Вариантные записи
10.5. Динамическая диспетчеризация
10.6. Упражнения

Глава 11. Исключительные ситуации
11.1. Требования обработки
исключительных ситуаций
11.2. Исключения в языке PL/I
11.3. Исключения в Ada
11.4. Исключения в C++
11.5. Обработка ошибок в языке Eiffel
11.6. Упражнения

Глава 12. Параллелизм
12.1. Что такое параллелизм?
12.2. Общая память
12.3. Проблема взаимных исключений
12.4. Мониторы и защищенные переменные
12.5. Передача сообщений
12.6. Язык параллельного
программирования occam
12.7. Рандеву в языке Ada
12.8. Linda
12.9. Упражнения


Часть 4. Программирование больших систем


Глава 13. Декомпозиция программ
13.1. Раздельная компиляция
13.2. Почему необходимы модули?
13.3. Пакеты в языке Ada
13.4. Абстрактные типы данных в языке
Ada
13.5. Как писать модули на языке C++
13.6. Упражнения

Глава 14. Объектно-ориентированное
программирование
14.1. Объектно-ориентированное
проектирование
14.2. Объектно-ориентированное
программирование на языке C++
14.3. Наследование
14.4. Динамический полиморфизм в языке
C++
14.5. Объектно-ориентированное
программирование на языке Ada 95
14.6. Упражнения

Глава 15. Еще об объектно-ориентированном
программировании
15.1. Структурированные классы
15.2. Доступ к приватным компонентам
15.3. Данные класса
15.4. Язык программирования Eiffel
15.5. Проектные соображения
15.6. Методы динамического полиморфизма
15.7. Упражнения


Часть 5. Непроцедурные языки программирования


Глава 16. функциональное программирование
16.1. Почему именно функциональное
программирование?
16.2. Функции
16.3. Составные типы
16.4. Функции более высокого порядка
16.5. Ленивые и жадные вычисления
16.6. Исключения
16.7. Среда
16.8. Упражнения

Глава 17. Логическое программирование
17.1. Чистое логическое программирование
17.2. Унификация
17.3. Язык Prolog
17.4. Более сложные понятия логического
программирования
17.5. Упражнения

Глава 18. Java
18.1. Модель Java
18.2. Язык Java
18.3. Семантика ссылки
18.4. Полиморфные структуры данных
18.5. Инкапсуляция
18.6. Параллелизм
18.7. Библиотеки Java
18.8. Упражнения
Приложение А. Где получить компиляторы?
Приложение Б. Библиографический список
Предметный указатель