straustrup2 (852740), страница 11
Текст из файла (страница 11)
1983.R.E.Griswold et.al.: The Snobol14 Programming Language. Prentice-Hall, Englewood Cliffs, NewJersy, 1970.R.E.Griswold and M.T.Griswold: The ICON Programming Language. Prentice-Hall, Englewood Cliffs,New Jersy. 1983.Brian W.Kernighan and Dennis M.Ritchie: The C Programming Language. Prentice-Hall, EnglewoodCliffs, New Jersy. 1978. Second edition 1988.Andrew Koenig and Bjarne Stroustrup: C++: As Close to C as possible - but no closer. The C++Report. Vol.1 No.7. July 1989.Andrew Koenig and Bjarne Stroustrup: Exception Handling for C++ (revised). Proc USENIX C++Conference, April 1990.
Also, Journal of Object Oriented Programming, Vol.3 No.2, July/August 1990.pp.16-33.Barbara Liskov et.al.: CLU Reference Manual. MIT/LCS/TR-225.George Orwell: 1984. Secker and Warburg, London. 1949.Martin Richards and Colin Whitby-Strevens: BCPL - The Language and Its Compiler. CambridgeUniversity Press. 1980.L.Rosler: The Evolution of C - Past and Future. AT&T Bell Laboratories Technical Journal. Vol.63No.8 Part 2. October 1984.
pp.1685-1700.Ravi Sethi: Uniform Syntax for Type Expressions and Declarations. Software Practice & Experience,Vol.11. 1981. pp.623-628.Bjarne Stroustrup: Adding Classes to C: An Exercise in Language Evolution. Software Practice &Experience, Vol.13. 1983. pp.139-61.Bjarne Stroustrup: The C++ Programming Language. Addison-Wesley. 1986.20Бьерн Страуструп.Язык программирования С++[18] Bjarne Stroustrup: Multiple Inheritance for C++. Proc. EUUG Spring Conference, May 1987. AlsoUSENIX Computer Systems, Vol.2 No 4, Fall 1989.[19] Bjarne Stroustrup and Jonathan Shopiro: A Set of C classes for Co-Routine Style Programming. Proc.USENIX C++ conference, Santa Fe. November 1987. pp.417-439.[20] Bjarne Stroustrup: Type-safe Linkage for C++. USENIX Computer Systems, Vol.1 No.4 Fall 1988.[21] Bjurne Stroustrup: Parameterized Type for C++. Proc.
USENIX C++ Conference, Denver, October1988. pp.1-18. Also, USENIX Computer Systems, Vol.2 No.1 Winter 1989.[22] Bjarne Stroustrup: Standardizing C++. The C++ Report. Vol.1 No.1. January 1989.[23] Bjarne Stroustrup: The Evolution of C++: 1985-1989. USENIX Computer Systems, Vol.2 No.3.Summer 1989.[24] P.M.Woodward and S.G.Bond: Algol 68-R Users Guide.
Her Majesty's Stationery Office, London.1974.[25] UNIX Time-Sharing System: Programmer's Manual. Research Version, Tenth Edition. AT&T BellLaboratories, Murray Hill, New Jersy, February 1985.[26] Aake Wilkstroem: Functional Programming Using ML. Prentice-Hall, Englewood Cliffs, New Jersy.1987.[27] X3 Secretariat: Standard - The C Language. X3J11/90-013.
Computer and Business EquipmentManufactures Association, 311 First Street, NW, Suite 500, Washington, DC 20001, USA.Ссылки на источники по проектированию и развитию больших систем программного обеспечения можнонайти в конце главы 11.21Бьерн Страуструп.Язык программирования С++ГЛАВА 1.
КРАТКИЙ ОБЗОР С++"Начнем с того, что вздернем всех этих законников, языковедов".("Король Генрих VI", действие II)В этой главе содержится краткий обзор основных концепций и конструкций языка С++. Он служит длябеглого знакомства с языком. Подробное описание возможностей языка и методов программированияна нем дается в следующих главах. Разговор ведется в основном вокруг абстракции данных и объектноориентированного программирования, но перечисляются и основные возможности процедурногопрограммирования.1.1 ВВЕДЕНИЕЯзык программирования С++ задумывался как язык, который будет:•лучше языка С;•поддерживать абстракцию данных;•поддерживать объектно-ориентированное программирование.В этой главе объясняется смысл этих фраз без подробного описания конструкций языка.$$1.2 содержит неформальное описание различий "процедурного", "модульного" и "объектноориентированного" программирования.
Приведены конструкции языка, которые существенны длякаждого из перечисленных стилей программирования. Свойственный С стиль программированияобсуждается в разделах "процедурное программирование и "модульное программирование". Язык С++ "лучший вариант С". Он лучше поддерживает такой стиль программирования, чем сам С, причем этоделается без потери какой-либо общности или эффективности по сравнению с С. В то же время язык Cявляется подмножеством С++. Абстракция данных и объектно-ориентированное программированиерассматриваются как "поддержка абстракции данных" и "поддержка объектно- ориентированногопрограммирования". Первая базируется на возможности определять новые типы и работать с ними, авторая – на возможности задавать иерархию типов.$$1.3 содержит описание основных конструкций для процедурного и модульного программирования.
Вчастности, определяются функции, указатели, циклы, ввод-вывод и понятие программы каксовокупности раздельно транслируемых модулей. Подробно эти возможности описаны в главах 2, 3 и 4.$$1.4 содержит описание средств, предназначенных для эффективной реализации абстракции данных.В частности, определяются классы, простейший механизм контроля доступа, конструкторы идеструкторы, перегрузка операций, преобразования пользовательских типов, обработка особыхситуаций и шаблоны типов. Подробно эти возможности описаны в главах 5, 7, 8 и 9.$$1.5 содержит описание средств поддержки объектно-ориентированного программирования.
Вчастности, определяются производные классы и виртуальные функции, обсуждаются некоторыевопросы реализации. Все это подробно изложено в главе 6.$$1.6 содержит описание определенных ограничений на пути совершенствования как языковпрограммирования общего назначения вообще, так и С++ в частности. Эти ограничения связаны сэффективностью, с противоречащими друг другу требованиями разных областей приложения,проблемами обучения и необходимостью трансляции и выполнения программ в старых системах.Если какой-то раздел окажется для вас непонятным, настоятельносоветуем прочитатьсоответствующие главы, а затем, ознакомившись с подробным описанием основных конструкций языка,вернуться к этой главе.
Она нужна для того, чтобы можно было составить общее представление оязыке. В ней недостаточно сведений, чтобы немедленно начать программировать.1.2 Парадигмы программированияОбъектно-ориентированное программирование - это метод программирования, способ написания22Бьерн Страуструп.Язык программирования С++"хороших" программ для множества задач.
Если этот термин имеет какой-то смысл, то он долженподразумевать: такой язык программирования, который предоставляет хорошие возможности дляобъектно-ориентированного стиля программирования.Здесь следует указать на важные различия. Говорят, что язык поддерживает некоторый стильпрограммирования, если в нем есть такие возможности, которые делают программирование в этомстиле удобным (достаточно простым, надежным и эффективным). Язык не поддерживает некоторыйстиль программирования, если требуются большие усилия или даже искусство, чтобы написатьпрограмму в этом стиле. Однако это не означает, что язык запрещает писать программы в этом стиле.Действительно, можно писать структурные программы на Фортране и объектно-ориентированныепрограммы на С, но это будет пустой тратой сил, поскольку данные языки не поддерживают указанныхстилей программирования.Поддержка языком определенной парадигмы (стиля) программирования явно проявляется в конкретныхязыковых конструкциях, рассчитанных на нее.
Но она может проявляться в более тонкой, скрытойформе, когда отклонение от парадигмы диагностируется на стадии трансляции или выполненияпрограммы. Самый очевидный пример - это контроль типов. Кроме того, языковая поддержкапарадигмы может дополняться проверкой на однозначность и динамическим контролем. Поддержкаможет предоставляться и помимо самого языка, например, стандартными библиотеками или средойпрограммирования.Нельзя сказать, что один язык лучше другого только потому, что в нем есть возможности, которые вдругом отсутствуют.
Часто бывает как раз наоборот. Здесь более важно не то, какими возможностямиобладает язык, а то, насколько имеющиеся в нем возможности поддерживают избранный стильпрограммирования для определенного круга задач. Поэтому можно сформулировать следующиетребования к языку:[1]Все конструкции языка должны естественно и элегантно определяться в нем.[2]Для решения определенной задачи должна быть возможность использовать сочетанияконструкций, чтобы избежать необходимости вводить для этой цели новую конструкцию.[3]Должно быть минимальное число неочевидных конструкций специального назначения.[4]Конструкция должна допускать такую реализацию, чтобы в не использующей ее программе невозникло дополнительных расходов.[5]Пользователю достаточно знать только то множество конструкций, которое непосредственноиспользуется в его программе.Первое требование апеллирует к логике и эстетическому вкусу.
Два следующих выражают принципминимальности. Два последних можно иначе сформулировать так: "то, чего вы не знаете, не сможетнанести вам вреда".С учетом ограничений, указанных в этих правилах, язык С++ проектировался для поддержки абстракцииданных и объектно-ориентированного программирования в добавление к традиционному стилю С.Впрочем, это не значит, что язык требует какого-то одного стиля программирования от всехпользователей.Теперь перейдем к конкретным стилям программирования и посмотрим каковы основные конструкцииязыка, их поддерживающие. Мы не собираемся давать полное описание этих конструкций.1.2.1 Процедурное программированиеПервоначальной (и, возможно, наиболее используемой) парадигмой программирования было:Определите, какие процедуры вам нужны; используйте лучшие из известных вам алгоритмов!Ударение делалось на обработку данных с помощью алгоритма, производящего нужные вычисления.Для поддержки этой парадигмы языки предоставляли механизм передачи параметров и получениярезультатов функций.