Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
История и введение.doc
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
121.86 Кб
Скачать

C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Ключевым понятием C++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В C++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

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

Исторические замечания

Безусловно, C++ восходит главным образом к C, поэтому сделанного в C акцента на средствах низкого уровня достаточно, чтобы справляться с самыми насущными задачами системного программирования. C, в свою очередь, многим обязано своему предшественнику BCPL; на самом деле, комментарии // (заново) введены в C++ из BCPL. Еще одним источником вдохновения послужил язык Simula, из него была позаимствована концепция класса (вместе с производными классами и функциями членами). Это было сделано, чтобы способствовать модульности через использование виртуальных функций. Возможности C++ по перегрузке операций и свобода в расположении описаний везде, где может встречаться оператор, похожи на Алгол68. Название C++ - изобретение 1983. Более ранние версии языка были известны как "C с Классами". Первоначально язык был придуман потому, что автор хотел написать модели, управляемые прерываниями. "C с Классами" использовался для крупных проектов моделирования, в которых строго тестировались возможности написания программ, требующих минимального (только) пространства памяти и времени на выполнение. В "C с Классами" не хватало перегрузки операций, ссылок, виртуальных функций и многих деталей. Но многие особенности C++ были добавлены позднее. Название указывает на эволюционную природу перехода к нему от C. "++" - операция приращения в C.

В качестве базового языка для C++ был выбран C, потому что он:

(1) многоцелевой, лаконичный и относительно низкого уровня;

(2) отвечает большинству задач системного программирования;

(3) идет везде и на всем;

(4) пригоден в среде программирования UNIX.

Базовый язык, C, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы C++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах. В C++ используются те же последовательности вызова и возврата из функций, что и в C. В тех случаях, когда даже этот довольно эффективный механизм является слишком дорогим, C++ функция может быть подставлена inline, удовлетворяя, таким образом, соглашению о записи функций без дополнительных расходов времени выполнения.

Одним из первоначальных предназначений C было применение его вместо программирования на ассемблере в задачах системного программирования. При проектировании C++, были приняты меры, чтобы не ставить под угрозу успехи в этой области. Основное различие между C и C++ состоит в первую очередь в степени внимания, уделяемого типам и структурам.

Размышления о программировании на C++

В идеальном случае подход к разработке программы делится на три части:

- получить ясное понимание задачи,

- выделить ключевые идеи, входящие в ее решение,

- выразить решение в виде программы.

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

Здесь приводится набор правил, которых стоит придерживаться, изучая C++.

[1] Когда вы программируете, вы создаете конкретное представление идей вашего решения некоторой задачи. Пусть структура отражает эти идеи настолько явно, насколько это возможно:

[a] Если вы считайте "это" отдельным понятием, сделайте его классом. [b] Если вы считайте "это" отдельным объектом, сделайте его объектом некоторого класса.

[c] Если два класса имеют общим нечто существенное, сделайте его базовым классом. Почти все классы в вашей программе будут иметь нечто общее; заведите (почти) универсальный базовый класс, и разработайте его наиболее тщательно.

[2] Когда вы определяете класс, который не реализует некоторый математический объект, вроде матрицы или комплексного числа, или тип низкого уровня, вроде связанного списка, то:

[a] Не используйте глобальные данные.

[b] Не используйте глобальные функции (не члены).

[c] Не используйте открытые данные-члены.

[d] Не используйте друзей, кроме как чтобы избежать [a], [b] или [c].

[e] Не обращайтесь к данным-членам или другим объектам непосредственно.

[f] Не помещайте в класс "поле типа"; используйте виртуальные функции. [g] Не используйте inline-функции, кроме как средство существенной оптимизации.