КнигоПровод.Ru29.03.2024

/ИТ-книги

Языки программирования. Концепции и принципы — Кауфман B. Ш.
Языки программирования. Концепции и принципы
Кауфман B. Ш.
год издания — 1993, кол-во страниц — 432, ISBN — 5-256-00643-6, тираж — 2000, язык — русский, тип обложки — твёрд. 7Б тканев., масса книги — 480 гр., издательство — Радио и связь
цена: 499.00 рубПоложить эту книгу в корзину
Сохранность книги — хорошая

Р е ц е н з е н т:
О. Н. Перминов

Формат 60x88 1/16. Бумага типографская №2. Печать офсетная
ключевые слова — язык, программир, фортран, пл/1, алгол, симул, смолток, рефал, модула-2, оберон, оккам, реляционн, параллельн, объектно-ориентир, наслед, трансл, сложност, транспьютер, семант, компиляц, семафор, дейкстр, нейман, маркова-турчин, бэкус, хоар, гомоморф

Рассмотрены основные концепции и принципы, воплощённые в современных и перспективных языках программирования (Фортран, Паскаль, ПЛ/1, Алгол-68, Симула-67, Смолток, Рефал, Ада, Модула-2, Оберон, Оккам-2, Турбо Паскаль 5.5 и др.), представлены разные стили программирования (операторный, ситуационный, функциональный, реляционный, параллельный, объектно-ориентированный), освещены тенденции и перспективы развития языков и стилей программирования.

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

Новые подходы применены при изложении известных фактов (пошаговая модификация нормальных алгоритмов Маркова сначала до Рефала, а затем до реляционных языков, систематическое сопоставление концепции параллелизма в Аде и Оккаме-2, концепций создания Ады, Модулы-2 и Оберона, развитие концепции наследуемости от модульности до объектной ориентации и др.).

Для научных работников, будет полезной программистам, а также преподавателям и студентам, серьёзно интересующимся языками программирования.

Ил. 5 Библиогр. 64 назв.


Эта книга возникла из курса лекций «Языки программирования», читаемого автором в МГУ. Стимулом для написания книги послужило отсутствие доступной литературы, в которой были бы систематически изложены, во-первых, ключевые принципы, концепции и понятия, составляющие основу предмета и поэтому претендующие на относительную стабильность, и, во-вторых, перспективные идеи и тенденции, помогающие ориентироваться в огромном и быстро меняющемся мире современных языков программирования (ЯП).

Автор столкнулся с немалыми проблемами несмотря на то, что становление современных ЯП происходило, можно сказать, на его глазах. Пришлось пережить и восторги от изобретения первых «языков высокого уровня», быть среди тех, кто увлекался их «усовершенствованием» и созданием первых трансляторов, опираясь только на здравый смысл и собственную смекалку, пришлось пережить и надежды на создание «универсального ЯП» объединёнными усилиями международного программистского братства, и разочарования от бездарной траты сил и средств на бесперспективные начинания.

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

Заметив это обстоятельство, автор уже сознательно стал иногда рассчитывать не только на студенческую аудиторию, но и на более искушённого читателя, позволяя себе намёки и аналогии, подразумевающие личный опыт программирования и даже экспертной деятельности в области ЯП. Более того, стало очень трудно отделить то, что известно, признано, устоялось, от того, что удалось только что понять, систематизировать, придумать. В результате жанр книги стал менее определённым, «поплыл» от первоначально задуманного учебного пособия в сторону монографии.

С точки зрения ключевых концепций и принципов, определяющих современное состояние и перспективы в области ЯП, конкретные ЯП интересны не сами по себе, а прежде всего как источники примеров при обсуждении излагаемых положений. Поэтому систематически применяется метод моделирования ЯП — изучаются не ЯП в целом, а только их модели. Конечно, автор старался дать необходимый минимум сведений о ЯП, позволяющий понимать написанные на нём примеры без привлечения дополнительной литературы. В качестве основного метода знакомства с ЯП в книге принят метод «погружения», столь популярный при ускоренном обучении иностранным языкам — сведения о ЯП читателю предлагается извлекать непосредственно из примеров написанных на этом ЯП программ (естественно, с подробными комментариями). Опыт показывает, что такой путь обеспечивает достижение основной цели с приемлемыми затратами времени и сил. Поэтому в книге нет подробных описаний конкретных ЯП — желающие могут воспользоваться официальными сообщениями, фирменной документацией или учебниками по ЯП.

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

Книга состоит из двух частей. Первая посвящена основным абстракциям, используемым в современных ЯП. В качестве основного языка примеров здесь фигурирует ЯП Ада. Он удобен в этой роли потому, что в той или иной форме содержит ответы практически на все технологические проблемы. Другими словами, Ада служит примером «максимального» современного ЯП. «Минимальные» ЯП представлены языками Никлауса Вирта — это Модула-2 и Оберон (образца 1988 г.).

Вторая часть рассказывает о перспективных тенденциях в ЯП. В ней рассмотрены ситуационное, функциональное, доказательное, реляционное, параллельное и объектно-ориентированное программирование. Среди языков-примеров — Рефал, функциональный язык Бэкуса, Оккам-2 для программирования транспьютеров, объектно-ориентированный Турбо Паскаль и др.

В книге немало вопросов и упражнений (снабжённых обычно подсказками), призванных помочь читателю управлять своим вниманием и контролировать уровень усвоения материала. Результаты упражнений при дальнейшем изложении не используются.

Так как замысел книги возник восемь лет назад и почти половина материала написана ещё в 1983—1985 гг., закономерно опасение, не устарела ли книга ещё до своего выхода в свет. Конечно, судить об этом читателю, однако автор старался отбирать фундаментальные и, по его мнению, перспективные концепции и принципы, которые по самой своей природе должны быть стабильнее быстро меняющейся конъюнктуры.

Косвенным подтверждением такой стабильности послужил весьма обрадовавший автора факт, что современный всплеск (своеобразный «бум») интереса к объектно-ориентированному программированию — это в сущности всплеск интереса к средствам программирования, обеспечивающим рациональное развитие программных услуг при надёжной защите авторского права. Но именно средства развития и защиты в ЯП и были выбраны в качестве самого интересного аспекта ЯП ещё в начале работы над книгой. Такое знаменательное совпадение придаёт уверенности в правильности выбора и позволяет считать объектно-ориентированное программирование не просто очередной модой, а естественной «закрывающей скобкой» как очередного этапа в осознании системы ценностей в программировании, так и нашего рассмотрения концепций и принципов ЯП.

Ещё одним подтверждением тезиса о фундаментальности рассматриваемых в книге концепций и принципов может служить тот факт, что как в разработанных в конце 1990 г. требованиях на создание обновлённого международного стандарта языка программирования Ада (учитывающих самые современные пожелания интернационального сообщества пользователей языка Ада и самые современные методы их удовлетворения), так и в аванпроекте обновлённого языка, датированном февралем 1991 г., нашли отражение, кроме объектно-ориентированного программирования, и такие рассмотренные в книге проблемы, как развитие концепции управления асинхронными процессами, развитие концепции типа, развитие концепции исключений и др. …

Предисловие

ОГЛАВЛЕНИЕ

Предисловие3
 
ЧАСТЬ 1. СОВРЕМЕННОЕ СОСТОЯНИЕ ЯЗЫКОВ
ПРОГРАММИРОВАНИЯ7
 
1. Концептуальная схема языка программирования7
 
1.1. Что такое язык программирования7
1.2. Метауровень7
1.3. Модель передачи сообщения8
1.4. Классификация недоразумений8
1.5. Отступление об абстракции-конкретизации. Понятие модели10
1.6. Синтактика, семантика, прагматика11
1.7. Зачем могут понадобиться знания о ЯП13
1.8. Принцип моделирования ЯП14
1.9. Пять основных позиций рассмотрения ЯП15
1.10. Что такое производство программных услуг16
1.11. Производство программных услуг — основная цель программирования18
1.12. Сложность как основная проблема программирования19
1.13. Источники сложности19
1.14. Два средства борьбы со сложностью.Основной критерий качества ЯП22
1.15. Язык программирования как знаковая система23
1.16. Разновидности программирования24
1.17. Понятие о базовом языке25
1.18. Концептуальная схема рассмотрения ЯП26
 
2. Пример современного базового ЯП (модель А)28
 
2.1. Общее представление о ЯП Ада28
2.2. Пример простой программы на Аде30
2.3. Обзор языка Ада32
2.4. Пошаговая детализация средствами Ады37
2.5. Замечания о конструктах42
2.6. Как пользоваться пакетом «управление_сетью»44
2.7. Принцип раздельного определения, реализации и использования
услуг (принцип РОРИУС)52
2.8. Принцип защиты абстракций53
 
3. Важнейшие абстракции: данные, операции, связывание53
 
3.1. Принцип единства и относительности трёх абстракций53
3.2. Связывание55
3.3. От связывания к пакету56
3.4. Связывание и специализация58
3.5. Принцип цельности63
 
4. Данные и типы67
 
4.1. Классификация данных67
4.2. Типы данных69
4.3. Регламентированный доступ и типы данных81
4.4. Характеристики, связанные с типом. Класс значений, базовый
набор операций88
4.5. Воплощение концепции уникальности типа. Определение
и использование типа в Аде (начало)89
4.6. Конкретные категории типов91
4.7. Типы как объекты высшего порядка. Атрибутные функции112
4.8. Родовые (настраиваемые) сегменты115
4.9. Числовые типы (модель числовых расчётов)117
4.10. Управление операциями121
4.11. Управление представлением122
4.12. Классификация данных и система типов Ады125
4.13. Предварительный итог по модели А127
 
5. Раздельная компиляция128
 
5.1. Понятие модуля128
5.2. Виды трансляций128
5.3. Раздельная трансляция129
5.4. Связывание трансляционных модулей129
5.5. Принцип защиты авторского права131
 
6. Асинхронные процессы132
 
6.1. Основные проблемы132
6.2. Семафоры Дейкстры136
6.3. Сигналы138
6.4. Концепция внешней дисциплины140
6.5. Концепция внутренней дисциплины: мониторы141
6.6. Рандеву145
6.7. Проблемы рандеву146
6.8. Асимметричное рандеву147
6.9. Управление асимметричным рандеву (семантика вспомогательных
конструктов)148
6.10. Реализация семафоров, сигналов и мониторов посредством
асимметричного рандеву150
6.11. Управление асинхронными процессами в Аде153
 
7. Нотация156
 
7.1. Проблема знака в ЯП156
7.2. Определяющая потребность157
7.3. Основная абстракция157
7.4. Проблема конкретизации эталонного текста158
7.5. Стандартизация алфавита158
7.6. Основное подмножество алфавита159
7.7. Алфавит языка Ада160
7.8. Лексемы161
7.9. Лексемы в Аде162
 
8. Исключения163
 
8.1. Основная абстракция163
8.2. Определяющие требования164
8.3. Аппарат исключений в ЯП166
8.4. Дополнительные особенности обработки исключений174
 
9. Библиотека179
 
9.1. Структура библиотеки179
9.2. Компилируемый (трансляционный) модуль180
9.3. Порядок компиляции и перекомпиляции181
9.4. Резюме: логическая и физическая структуры программы181
 
10. Именование и видимость (на примере Ады)182
 
10.1. Имя как специфический знак182
10.2. Имя и идентификатор183
10.3. Проблема видимости183
10.4. Аспекты именования183
10.5. Основная потребность и определяющие требования184
10.6. Конструкты и требования, связанные с именованием185
10.7. Схема идентификации187
10.8. Недостатки именования в Аде191
 
11. Обмен с внешней средой193
 
11.1. Специфика обмена193
11.2. Назначение и структура аппарата обмена197
11.3. Файловая модель обмена в Аде198
11.4. Программирование специальных устройств207
 
12. Два альтернативных принципа создания ЯП209
 
12.1. Принцип сундука209
12.2. Закон распространения сложности ЯП210
12.3. Принцип чемоданчика210
12.4. Обзор языка Модула-2211
12.5. Пример М-программы213
12.6. Языковая ниша220
12.7. Принцип чемоданчика в проектных решениях ЯП Модула-2221
12.8. Принцип чайника230
12.9. ЯП Оберон231
 
ЧАСТЬ 2. ПЕРСПЕКТИВЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ239
 
1. Перспективные модели языка239
 
1.1. Введение239
1.2. Операционное программирование — модель фон Неймана (модель Н)240
1.3. Ситуационное программирование — модель Маркова-Турчина
(модель МТ)243
 
2. Функциональное программирование (модель Б)257
 
2.1. Функциональное программирование в модели МТ257
2.2. Функциональное программирование в стиле Бэкуса (модель Б)266
 
3. Доказательное программирование (модель Д)281
 
3.1. Зачем оно нужно281
3.2. Доказательное программирование методом Бэкуса282
3.3. Доказательное программирование методом Хоара286
 
4. Реляционное программирование (модель Р)304
 
4.1. Предпосылки304
4.2. Ключевая идея305
4.3. Пример306
4.4. Предопределённые отношения312
4.5. Связь с моделями МТ и Б313
 
5. Параллельное программирование в Оккаме-2 (модель О)317
 
5.1. Принципы параллелизма в Оккаме317
5.2. Первые примеры применения каналов318
5.3. Сортировка конвейером фильтров320
5.4. Параллельное преобразование координат (умножение вектора
на матрицу)320
5.5. Монитор Хансена-Хоара на Оккаме-2325
5.6. Сортировка деревом исполнителей327
5.7. Завершение работы коллектива процессов330
5.8. Сопоставление концепций параллелизма в Оккаме и в Аде332
5.9. Перечень неформальных теорем о параллелизме в Аде и Оккаме341
5.10. Единая модель временных расчётов342
5.11. Моделирование каналов средствами Ады343
5.12. Отступление о заданных и подпрограммных (процедурных) типах345
 
6. Наследуемость (к идеалу развития и защиты в ЯП)354
 
6.1. Определяющая потребность354
6.2. Идеал развиваемости355
6.3. Критичность развиваемости355
6.4. Аспекты развиваемости356
6.5. Идеал наследуемости (основные требования)358
6.6. Проблема дополнительных атрибутов358
6.7. Развитая наследуемость361
6.8. Аспект даннных361
6.9. Аспект операций364
6.10. Концепция наследования в ЯП (краткий обзор)370
6.11. Преимущества развитой наследуемости372
6.12. Наследуемость и гомоморфизм (фрагмент математической позиции)374
 
7. Объектно-ориентированное программирование378
 
7.1. Определяющая потребность378
7.2. Ключевые идеи объектно-ориентированного программирования379
7.3. Пример: обогащение сетей на Турбо Паскале 5.5380
7.4. Виртуальные операции386
7.5. Критерий Дейкстры395
7.6. Объекты и классы в ЯП Симула-67396
7.7. Перспективы, открываемые объектной ориентацией средств
программирования398
7.8. Свойства объектной ориентации401
7.9. Критерий фундаментальности языковых концепций402
 
8. Заключительные замечания403
 
8.1. Реализаторская позиция403
8.2. Классификация языков программирования411
8.3. Тенденции развития ЯП415
8.4. Заключение422
 
Список литературы424

Книги на ту же тему

  1. Новое в зарубежной лингвистике. Вып. XXIII. Когнитивные аспекты языка, Петров В. В., Герасимов В. И., сост., 1988
  2. Сравнительное изучение языков программирования, Хигман Б., 1974
  3. Теоретико-множественные модели языков, Маркус С., 1970
  4. Математическая логика в программировании: Сборник статей 1980—1988 гг., Захарьящев М. В., Янов Ю. И., ред., 1991
  5. Языки программирования. Практический сравнительный анализ, Бен-Ари М., 2000
  6. Программирование и алгоритмические языки, Криницкий Н. А., Миронов Г. А., Фролов Г. Д., 1975
  7. Универсальные языки программирования. Семантический подход, Калинин А. Г., Мацкевич И. В., 1991
  8. Современные языки и технологии параллельного программирования: Учебник, Гергель В. П., 2012
  9. Программирование на языке Ада, Вегнер П., 1983
  10. Практика программирования на Фортране: Упражнения с комментариями, Дрейфус М., Ганглоф К., 1978
  11. Сравнительный курс языка PL/1 (на основе алгола-60), Безбородов Ю. М., 1980
  12. Фортран и искусство программирования персональных ЭВМ, Уорд Т., Бромхед Э., 1993
  13. Индивидуальная отладка программ, Безбородов Ю. М., 1982
  14. Язык программирования Эль-76. Принципы построения языка и руководство к пользованию. — 2-е изд. испр. и доп., Пентковский В. М., 1989
  15. Программирование на современных алгоритмических языках: Учебное пособие для втузов.— 3-е изд., перераб. и доп., Пярнпуу А. А., 1990
  16. Язык Ассемблера для IBM PC и программирования, Абель П., 1992
  17. Java в примерах. Справочник, 2-е издание, Флэнаган Д., 2003
  18. Введение в Java-технологию, Сафонов В. О., 2002
  19. Философия Java, Эккель Б., 2001
  20. Java 2, Ноутон П., Шилдт Г., 2000
  21. Язык программирования Си для персонального компьютера, Бочков C. O., Субботин Д. М., 1990
  22. Объектно-ориентированное программирование в C++. — 4-е изд., Лафоре Р., 2003
  23. Мультипарадигменное проектирование для C++, Коплиен Д., 2005
  24. Учимся программировать на языке C++, Джамса К., 2001
  25. Perl: изучаем глубже. — 2-е изд., Шварц Р. Л., Фой Б., Феникс Т., 2007
  26. Изучаем Perl, Шварц Р. Л., Кристиансен Т., 1999
  27. Perl: Библиотека программиста, Кристиансен Т., Торкингтон Н., 2000
  28. Программирование на Perl, Уолл Л., Кристиансен Т., Орвант Д., 2001
  29. PHP. Сборник рецептов, Скляр Д., Трахтенберг А., 2005
  30. Профессиональное PHP программирование, 2-е издание, 2003
  31. PHP. Справочник, Хадсон П., 2006
  32. PHP 4. Разработка Web-приложений (+ CD-ROM), Ратшиллер Т., Геркен Т., 2001
  33. PHP 5. Профессиональное программирование, Гутманс Э., Баккен С., Ретанс Д., 2006
  34. Профессиональное программирование на PHP, Шлосснейгл Д., 2006

© 1913—2013 КнигоПровод.Ruhttp://knigoprovod.ru