Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 9
Текст из файла (страница 9)
Таким образом, я пе только описываю средства языка, которые поддерживают технику абстракции данных, но также объясняю и саму зту технику. Часть !У продвигается дальше в этом направлении. В части !Ц описывается стандартная библиотека С+ч-. Цель части состоит в том, чтобы объяснить, как пользоваться библиотекой, продемонстрировать основные методы проектирования и программирования, а также показать, каким образом можно дополнять библиотеку.
Библиотека предоставляет контейнеры (таьис как!1з1, вес1ог п тар .— главы 16, 17), стандартные алгоритмы (такие как зог1,72лЫ и тегяе — главы 18, 19), строки (глава 2 0), операции ввода/вывода (глава 21) и поддержку вычислений (глава 22). Б части !'ч' обсуждаются вопросы, возникающие при проектировании и реалгьзации больших программных систем.
В главе 23 внимание сосредоточено на вопросах проектирования н управления. В главе 24 обсуждается связь между языком программирования Сч-ч- и проектированием. В главе 25 представлены некоторые способы использования классов при проектировании. В приложении Л описана грамматика Сч-ч- с комментариями. В приложении Б обсуждается связь между С и С+ч- и между 5сапдагс! Сч-ч- (пазываемом также !5О Сь '- и Л)х)8! Сьж) и предыдущими версиями Сч-ч-.
В приложении В представлены 39 1.1. Структура этой книги некоторые примеры, связанные с техническими аспектами языка. Приложение Г посвящено средствам стандартной библиотеки, обеспечивающим локализацию программного обеспечения, В приложении Д~ обсуждаются гарантии безопасности исключений и соответствующие требования стандартной библиотеки. 1.1.1. Примеры и ссылки В этой книге акцент сделан скорее на организации программ, а не на создании алгоритмов.
Соответственно, я избегал заумных и трудных для понимания алгоритмов. Тривиальный алгоритм обычно лучше подходит для иллюстрации нюансов определения языка илн структуры программы, Например, в этой книге я использую сортировку Шелла, тогда как в реальной жизни быстрая сортировка подходит лучше.
Часто реализация на базе более подходящего алгоритма предлагается в качестве упражнения. В реальном коде обычно более желателен вызов библиотечной функции, нежели код, используемый здесь для иллюстрации средств языка. Учебные примеры неизбежно дают искаженное представление о разработке программ. За счет упрощения примеров, сложности, возникающие из-за больших размеров программ, исчезают. Я не вижу другого пути, кроме написания программ реального размера, для получения реального представления о программировании и конкретном языке программирования. Основное внимание в этой книге уделяется элементам языка, базовым методам, на основе которых строятся все программы, а также правилам этого построения.
Выбор примеров обусловлен моим прошлым опытом в моделировании, написашзи компиляторов и библиотек. Примеры являются упрощенными вариантами того, что содержится в реальном коде. Упрощение необходимо, чтобы язык программирования и вопросы, связанные с проектированием, не затерялись среди деталей.
В книге нет претенциозных примеров, не имеющих аналогов в реальном коде. Там где это возможно, я переносил в приложение В примеры, связанные с техническими деталями языка. В них частенько используются переменные с именами х н у, типы называются А и В, а функции — Я и к' (! В примерах программ используется пропорциональный шрифт. Например: Фтс(ит!е<гозтгеат> (ат шаай! зта: саит « 'Здрав сгавдаб мир! т,п"; На первый взгляд такое написание кажется неестественным для программистов, привыкших видеть шрифт с буквами одинаковой ширины, Однако пропорциональный шрифт легче и лучше воспринимается, чем моноширинный.
Использование пропорционального шрифта также позволяет избежать многих неестественных разры- ' Здесь и далее многие строки будут записываться по-русски. В большинстве случаев это не должно вызвать проблем. Однако следует учитывать, что если вы тшшете консольное приложение для %'~пдоттз (например, в М!с сотой ЪЪоз! С ж 5,0), то выводимый русский текст может оказаться нечитаемым; в интегрированной среде он по умолчанию набирается в кодировке Утшоожз, а консоль правильно отображает русские буквы только в кодировке ГЗОЗ.
— Приаеч. рвд. 40 Глава 1. Обращение к читателю вов строк в коде. Более того, мои эксперименты показали, что большинство людей через некоторое время считают новый стиль более читабельным. Там где это возможно, свойства языка С++ и библиотеки описаны скорее в контексте их использования, чем в сухой манере руководства или справочника.
Представленные элементы языка и степень детализации их описания отражают мой взгляд на то, что именно необходимо для эффективного использования С++, Дополнением к настоящему изданшо сможет послужить книга 7йе Аппога1е«7 С+ «йапбиаяе бгапааха (Стандарт языка Се«с комментариями), которую мы с Эндрю Кепи)ом (Апдгеч«Коеп(К) сейчас пишем. Это издание будет содержать полное определение языка с комментариями, призванными сделать его более доступным для понимания. Логично предположить, что должно быть и другое дополнение, 7йе Аппо1агед С-' '- Яапдахд )л)»таку(Стандартная библиотека С '-+ с комментариями). Однако ввиду того, что время и мои возможности как автора ограничены, я не могу обещать, что подготовлю ~акую книгу.
Ссылки на разделы книги даны в форме 9 2.3.4 (глава 2, раздел 3, подраздел 4), э Б,5.6 (приложение Б, подраздел 5.6) или 6 6.61101 (глава 6, упражнение 10). Курсив используется для логического выделения (например, «строковая переменная не допустима»), при первом упоминании важной концепции (например, полиморфизм) и в комментариях в коде. Полужирным курсивом пишутся идентификаторы, ключевые слова и числовые величины в примерах (например, с1азз, соип1ег, 1712). 1.1.2. Упражнения Упражнения находятся в конце глав. Большинство упражнений принадлежат к типу «напиши программу».
Всегда пишите код, достаточный для того, чтобы его можно было откомпилировать и запустить с несколькими (по крайней мере) тестовыми варйантамн данных. Упражнения значительно различаются по сложности, поэтому они помечены цифрами, оценивающими их сложность. Масштаб экспоненциальный, так что упражнение (*1) займет десять минут, ("2) может занять час, а (*3) — целый лень.
Время, необходимое для написания программы, больше зависит от вашего опыта, чем от само~о упражнения. Упражнение со сложностью (*1) может занять у вас целый день, если вы впервые знакомитесь с новой компьютерной системой и разбираетесь, как ее запустить. С другой стороны, упражнение (*5) может быть сделано кем-нибудь за час, если у него под рукой находится подходящий набор утилит.
Любая книга по программированию на С может быть использована в качестве дополнительных упражнений к части 1. Любая книга по структурам данных и алгоритмам может быть использована в качестве источника упражнений для частей П и П1. 1.1.3. Замечания по реализации В книге используется «чистый С++», описанный в стандарте С++ 1С»«, 1997~, [С««, 20031. Поэтому примеры должны выполняться в любой реализации С+«. Большинство фрагментов программ в этой книге были проверены с использованием нескольких реализаций С««.
Примеры, использующие свойства, только недавно реализованные в С++, компилировались пе всеми реализациями. Однако я не вижу смысла в упоминании реализаций, на которых они не компилировались. Эта информация скоро устареет, потому что поставщики компиляторов ин- а! 1.2.
Изучение С++ тенсивно работают и быстро внедряют все новые свойства С++. В приложении Б вы найдете предложения по устранению проблем, связанных со старыми компиляторами С++ и колом, написанным для компиляторов С. 1.2. Изучение С++ Самая важное при изучении С-и- — сконцентрировать внимание на концепциях и не потеряться в технических деталях языка. Целью изучения языка программирования является повышение профессионального уровня, то есть вы должны научиться более эффективно проектировать и реализовывать новые системы, равно как н поддерживать существующие.
Для этой цели осознание методов проектирования и программирования является более важным, нежели понимание деталей — последнее придет позднее вместе с опытом. С»» поддерживает множество стилей программирования. Все они основаны на строгой статической проверке типов, и целью большей их части является достижение высокого уровня абстракции данных и непосредственного отображения идей программиста. Каждый стиль может эффективно достичь этих целей, в то же время обеспечивая эффективность выполнения и использования ресурсов.
Программисты, приходящие из различных языковых сред (например, С, Рог!лап, Е1зр, МЦ Лйа, Е1!1с!, Разса1 илн Мог!в!а-2), должны понять; лля того чтобы воспользоваться преимуществами С++, необходимо потратить время на изучение и применение стилей программирования, приемлемых для С++. Тоже самое касается программистов, пользовавшихся более ранней и менее выразительной версией С++. Бездумное применение в новом языке методов, эффективных в другом языке, обычно ведет к неуклюжему, медленному и сложному в сопровождении коду.
Такой код к тому же еще н неприятно писать, потому что каждая строка кода н казкдое сообщение компилятора об ошибке напоминают программисту, что используемый язык отличается от «старого языка». Вы можете писать в стиле Еогггап, С, Вша!!та!к н т. п. ца любом языке, но это и неприятно и неэкономично в языке с другой философией. Любой язык может послужить щедрым источником идей о том, как писать программы на С++. Однако для того, чтобы быть эффективным в новом контексте, эти идеи нужно трансформировать в нечто другое, более соответсвуюшее обшей структуре и системе типов С++.