Бьерн Страуструп. Язык программирования С++



бет3/124
Дата16.07.2016
өлшемі3.27 Mb.
#204081
түріКнига
1   2   3   4   5   6   7   8   9   ...   124

* КРАТКИЙ ОБЗОР С++


"Начнем с того, что вздернем

всех этих законников, языковедов".

("Король Генрих 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 Парадигмы программирования


Объектно-ориентированное программирование - это метод

программирования, способ написания "хороших" программ для множества задач.

Если этот термин имеет какой-то смысл, то он должен подразумевать: такой

язык программирования, который предоставляет хорошие возможности для

объектно-ориентированного стиля программирования.


Здесь следует указать на важные различия. Говорят, что язык

поддерживает некоторый стиль программирования, если в нем есть такие

возможности, которые делают программирование в этом стиле удобным

(достаточно простым, надежным и эффективным). Язык не поддерживает

некоторый стиль программирования, если требуются большие усилия или даже

искусство, чтобы написать программу в этом стиле. Однако это не означает,

что язык запрещает писать программы в этом стиле. Действительно, можно

писать структурные программы на Фортране и объектно-ориентированные

программы на С, но это будет пустой тратой сил, поскольку данные языки не

поддерживают указанных стилей программирования.


Поддержка языком определенной парадигмы (стиля) программирования явно

проявляется в конкретных языковых конструкциях, рассчитанных на нее. Но

она может проявляться в более тонкой, скрытой форме, когда отклонение от

парадигмы диагностируется на стадии трансляции или выполнения программы.

Самый очевидный пример - это контроль типов. Кроме того, языковая

поддержка парадигмы может дополняться проверкой на однозначность и

динамическим контролем. Поддержка может предоставляться и помимо самого

языка, например, стандартными библиотеками или средой программирования.


Нельзя сказать, что один язык лучше другого только потому, что в нем

есть возможности, которые в другом отсутствуют. Часто бывает как раз

наоборот. Здесь более важно не то, какими возможностями обладает язык, а

то, насколько имеющиеся в нем возможности поддерживают избранный стиль

программирования для определенного круга задач. Поэтому можно

сформулировать следующие требования к языку:


[1] Все конструкции языка должны естественно и элегантно определяться

в нем.
[2] Для решения определенной задачи должна быть возможность

использовать сочетания конструкций, чтобы избежать необходимости вводить

для этой цели новую конструкцию.


[3] Должно быть минимальное число неочевидных конструкций специального

назначения.


[4] Конструкция должна допускать такую реализацию, чтобы в

неиспользующей ее программе не возникло дополнительных расходов.


[5] Пользователю достаточно знать только то множество конструкций,

которое непосредственно используется в его программе.


Первое требование апеллирует к логике и эстетическому вкусу. Два

следующих выражают принцип минимальности. Два последних можно иначе

сформулировать так: "то, чего вы не знаете, не сможет нанести вам вреда".
С учетом ограничений, указанных в этих правилах, язык С++

проектировался для поддержки абстракции данных и объектно-ориентированного

программирования в добавление к традиционному стилю С. Впрочем, это не

значит, что язык требует какого-то одного стиля программирования от всех

пользователей.
Теперь перейдем к конкретным стилям программирования и посмотрим

каковы основные конструкции языка, их поддерживающие. Мы не собираемся

давать полное описание этих конструкций.




Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   124




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет