|
Языки программирования. Концепции и принципы |
Кауфман 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. Обзор языка Модула-2 | 211 | 12.5. Пример М-программы | 213 | 12.6. Языковая ниша | 220 | 12.7. Принцип чемоданчика в проектных решениях ЯП Модула-2 | 221 | 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. Монитор Хансена-Хоара на Оккаме-2 | 325 | 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.5 | 380 | 7.4. Виртуальные операции | 386 | 7.5. Критерий Дейкстры | 395 | 7.6. Объекты и классы в ЯП Симула-67 | 396 | 7.7. Перспективы, открываемые объектной ориентацией средств | программирования | 398 | 7.8. Свойства объектной ориентации | 401 | 7.9. Критерий фундаментальности языковых концепций | 402 | | 8. Заключительные замечания | 403 | | 8.1. Реализаторская позиция | 403 | 8.2. Классификация языков программирования | 411 | 8.3. Тенденции развития ЯП | 415 | 8.4. Заключение | 422 | | Список литературы | 424 |
|
Книги на ту же тему- Новое в зарубежной лингвистике. Вып. XXIII. Когнитивные аспекты языка, Петров В. В., Герасимов В. И., сост., 1988
- Сравнительное изучение языков программирования, Хигман Б., 1974
- Теоретико-множественные модели языков, Маркус С., 1970
- Математическая логика в программировании: Сборник статей 1980—1988 гг., Захарьящев М. В., Янов Ю. И., ред., 1991
- Языки программирования. Практический сравнительный анализ, Бен-Ари М., 2000
- Программирование и алгоритмические языки, Криницкий Н. А., Миронов Г. А., Фролов Г. Д., 1975
- Универсальные языки программирования. Семантический подход, Калинин А. Г., Мацкевич И. В., 1991
- Современные языки и технологии параллельного программирования: Учебник, Гергель В. П., 2012
- Программирование на языке Ада, Вегнер П., 1983
- Практика программирования на Фортране: Упражнения с комментариями, Дрейфус М., Ганглоф К., 1978
- Сравнительный курс языка PL/1 (на основе алгола-60), Безбородов Ю. М., 1980
- Фортран и искусство программирования персональных ЭВМ, Уорд Т., Бромхед Э., 1993
- Индивидуальная отладка программ, Безбородов Ю. М., 1982
- Язык программирования Эль-76. Принципы построения языка и руководство к пользованию. — 2-е изд. испр. и доп., Пентковский В. М., 1989
- Программирование на современных алгоритмических языках: Учебное пособие для втузов.— 3-е изд., перераб. и доп., Пярнпуу А. А., 1990
- Язык Ассемблера для IBM PC и программирования, Абель П., 1992
- Java в примерах. Справочник, 2-е издание, Флэнаган Д., 2003
- Введение в Java-технологию, Сафонов В. О., 2002
- Философия Java, Эккель Б., 2001
- Java 2, Ноутон П., Шилдт Г., 2000
- Язык программирования Си для персонального компьютера, Бочков C. O., Субботин Д. М., 1990
- Объектно-ориентированное программирование в C++. — 4-е изд., Лафоре Р., 2003
- Мультипарадигменное проектирование для C++, Коплиен Д., 2005
- Учимся программировать на языке C++, Джамса К., 2001
- Perl: изучаем глубже. — 2-е изд., Шварц Р. Л., Фой Б., Феникс Т., 2007
- Изучаем Perl, Шварц Р. Л., Кристиансен Т., 1999
- Perl: Библиотека программиста, Кристиансен Т., Торкингтон Н., 2000
- Программирование на Perl, Уолл Л., Кристиансен Т., Орвант Д., 2001
- PHP. Сборник рецептов, Скляр Д., Трахтенберг А., 2005
- Профессиональное PHP программирование, 2-е издание, 2003
- PHP. Справочник, Хадсон П., 2006
- PHP 4. Разработка Web-приложений (+ CD-ROM), Ратшиллер Т., Геркен Т., 2001
- PHP 5. Профессиональное программирование, Гутманс Э., Баккен С., Ретанс Д., 2006
- Профессиональное программирование на PHP, Шлосснейгл Д., 2006
|
|
|