Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Штерн В. - Основы C++. Методы программной инженерии - 2003

.pdf
Скачиваний:
237
Добавлен:
13.08.2013
Размер:
28.32 Mб
Скачать

Отзывы

"Виктор Штерн раскрывает методы создания сопровождаемого ПО. Эта книга полезна программистам любого уровня. Она дает углубленное понимание предмета, легко читается, содержит ценные советы и полезные примеры".

Дэниэл Ф. Костелло, ведущий специалист по разработке ПО компании GE Marquette Medical Systems

"Великолепная книга и для начинающих программистов, и для тех, кто уже имеет опыт создания программ на языке С. Будет очень полезна тем, кто хочет получить четкое понимание концепций языка С + Ч- и базовых принципов объектно-ориентированного программирования".

Стив Гласе, ведущий специалист по разработке ПО компании Motorola

CORE С

VICTOR SHTERN

Prentice Hall PTR, Upper Saddle River, NJ 07458

www.phptr.com

Основы C++

Виктор Штерн

Издательство "Лори"

CORE C++: a Software Engineering Approach

Victor Shtern

Copyright © 2000

All rights reserved

Основы C++: Методы программной инженерии Виктор Штерн

Переводчик С. Орлов Научный редактор А. Вендров

Корректоры Н. Литвинова, М. Ромашова Верстка Т. Кирпичевой

Copyright © 2000 Prentice Hall PTR

Prentice-Hall, Inc.

Upper Saddle River, NJ 07458

World rights reserved.

ISBN 0-13-085729-7

© Издательство "Лори", 2003

Изд. № : OAI (03)

ЛР № : 070612 30.09.97 г. ISBN 5-85582-188-9

Подписано в печать 20.01.2003 Формат 84 х108/16 Бумага офсет № 1 Гарнитура Литературная Печать офсетная Печ. л. 55 Тираж 3200 Заказ № 614 Цена договорная

Издательство "Лори". 123 100 Москва, Шмитовский пр., д. 13/6, стр. 1, (пом. ТАРП ЦАО) Телефон для оптовых покупателей: (095)256-02-83 Размещение рекламы: (95)259-01-62

WWW.LORY-PRESS.RU

Отпечатано с диапозитивов в ЗАО "Красногорская типография". 143400, Моск. обл, г. Красногорск, Коммунальный квартал, д. 2

Посвящается Людмиле

Благодарности

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

Мы все перед ним в долгу.

Далее я хочу поблагодарить Тимоти Бадда, Тома Каргилла, Джима Коплиена, Кэй Хорстманн, Айвора Хортона, Бертрана Мейера, Скотта Мейерса и Стивена Прата. Они написали книги по программированию, которые помогли мне вырабо­ тать собственное представление о программировании на С4-4-.

Кроме того, я в долгу перед своими слушателями в Бостонском университете, участниками профессиональных семинаров разработчиков и проводившихся на местах учебных курсах. Их вопросы и проблемы помогли мне понять, какие имен­ но методы работают при изучении C+ + .

Я искренне благодарен сотрудникам Бостонского университета Тане (Стоянке) Златевой, Джею Халфонду и Дэннису Беркли за их веру в данный проект. Уделив мне время для завершения этой книги, они сделали возможным ее появление на свет.

Хотел бы отметить и работу редакторов Стива Гласса, Дэна Костелло и С. Л. Тондо. Благодаря им в этой книге удалось устранить немало досадных оши­ бок, которые я не заметил сам.

Я благодарен ответственному редактору издательства Prentice Hall Джиму Маркхаму за помощь и содействие в работе. Именно Джим первым отметил высо­ кое качество данной книги, хотя английский — не мой родной язык.- Кроме того, он не препятствовал моим "духовным поискам", но в то же время не позволял мне выбиться из плана. И почти преуспел в этом.

Выражаю благодарность ответственному редактору Prentice Hall Яну Шварцу и его сотрудникам-корректорам, которые терпеливо боролись с моим русским сти­ лем артиклей, предлогов и сделали язык этой книги больше похожим на англий­ ский.

Но прежде всего я благодарен Тиму Муру, ответственному редактору Prentice Hall. Он нашел время, чтобы выслушать мои предложения, имел достаточно вооб­ ражения, чтобы мне поверить, и энтузиазм, чтобы убедить всех, какая это будет великолепная книга. Если бы не Тим, данная книга никогда не была бы написана. Спасибо, Тим! Ваши усилия так много значили!

Спасибо моей семье. Мои родные поощряли и воодушевляли меня. Они позво­ лили мне написать данный труд, не отвлекая чрезмерно на утомительные работы по дому. Последнее особенно важно: пока я писал свою KHHiy, моя жена трудилась над своими. Я также поощрял ее, восхищался ею и позволил ей заниматься своей работой, помогая в работе по дому.

Наконец, не могу не отметить сенатора Генри М. Джексона (округ Вашингтон) и члена Палаты представителей Чарльза Вэника (округ Огайо), авторов поправки Джексона-Вэника, увязавшей права человека с благоприятствующим режимом

торговли с зарубежными странами

и столь долго подвергавшейся

критике.

Я — один из немногих счастливцев,

на жизнь которых эта поправка

повлияла

самым непосредственным образом. Разница между свободой и рабством — мой личный опыт, а не просто абстрактная концепция. И за это я очень благодарен.

Предисловие

Поздравляю! Перед вами одна из самых полезных книг по C+ + . В ней рассказано о сильных и слабых сторонах языка C+ + , и сделано это лучше, чем в каком-либо другом написанном на текущий день руковод­

стве. А их выпущено уже немало.

Чем эта книга отличается от других книг по C+ +

Конечно, любой автор может заявить, что его книга — одна из лучших. Дан­ ную книгу отличает то, что она написана с точки зрения программной инженерии (software engineering) и сопровождения ПО на C+ + . Лишь в очень немногих руководствах используется такой подход (если они вообще есть). Дело в том, что язык C + + меняет не только способ написания компьютерных программ, но и методы изучения языка программирования. В добрые старые времена достаточ­ но было потратить день-другой на ознакомление с основами базового синтаксиса языка — и можно пробовать свои силы на простых примерах. Затем — переход к более сложному синтаксису и решение задач посложнее. Через неделю или две (либо три-четыре, если это действительно трудный язык) вы осваивали все и счи­ тали себя экспертом.

С языком C + + все по-другому, он очень многосторонний и сложный. Конечно, он является надстройкой над языком С, а потому простые программы на С (и, следовательно, на C+ + ) научиться писать нетрудно. А вот со сложными про­

граммами

дело обстоит иначе. Если программист недостаточно хорошо знает

C + + , то такая программа не будет переносимой и легко сопровождаемой, а по­

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

С+Н

замечательный язык. Он задумывался как язык общего назначения,

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

1.Медленное выполнение — намного медленнее сопоставимой программы на языке С.

2 . Ошибки управления памятью, проявляющиеся только при изменении режима использования памяти (например, при инсталляции другой программы).

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

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

VIII

ПреА^САовтв

 

Насколько все это важно? Если создается простая программа, которая прослу­

 

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

 

повторного использования, управление памятью и сопровождаемость, возможно,

 

и не так важны. Все, что требуется — быстрое решение проблемы. Если оно

 

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

 

прежней новую программу. Для этого подойдет любая книга по C + + (но надо

 

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

 

ством с языком и особенностями его использования).

 

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

 

придется сопровождать длительное время, все это имеет значение. Методы про­

 

граммной инженерии и сопровождения ПО, описываемые в данной книге, будут

 

в таком случае весьма полезны. В большинстве книг по C + + подобные вопросы

 

не затрагиваются вовсе. (Достаточно просмотреть их тематические указатели.)

 

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

 

из трудной ситуации.

 

Еш,е одна важная черта этой книги — способ подачи материала. Есть немало

 

книг, где перечисляются средства и особенности языка, но почти не рассказыва­

 

ется о том, как его использовать. Это все равно, что, изучая французский язык,

 

заниматься только грамматикой. Можно ли, освоив грамматику, заговорить

 

по-франиузски? Очевидно, что для беглой речи этого недостаточно. В данной

 

книге описано,как нужно и как не нужно применять язык, особенно с точки зрения

 

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

 

Особенностью C + + является тесная взаимосвязь различных средств языка,

 

из-за чего его очень трудно осваивать последовательно — от простого к сложно­

 

му. Многие авторы руководств по C + + даже и не пытаются этого делать. Они

 

полагают, что это только запутывает читателя, а в результате упоминают в главе 3

 

концепцию, которая поясняется лишь в главе 8, оставляя вас в недоумении.

 

Здесь реализован другой подход. Темы раскрываются циклически — сначала

 

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

 

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

 

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

 

специалистов в области ПО. Большинство его учеников, слушателей колледжа

 

при Бостонском университете (Boston University Metropolitan College), уже вы­

 

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

 

свое образование с целью профессионального роста. Автор провел бесчисленное

 

множество семинаров и учебных курсов, хорошо знаком со сложностями освоения

 

учаш.имися принципов языка и методов программирования. Этот опыт позволил

 

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

 

и рекомендации. Такой подход к обучению C + + достаточно уникален, почитатель

 

может воспользоваться его преимуш,ествами.

Для кого предназначена книга

Книга написана для профессионалов, которым необходимо осмысленное, про­ думанное представление практических деталей программирования на C + + и по­ нимание всех тонкостей языка.

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

Предисловие IX

Как построена эта книга

Вряд ли нужно подробно пояснять, о чем и где рассказывается. Незнакомые термины, концепции и методы здесь перечислять не стоит — это лишь утомит читателя. Именно поэтому краткое содержание книги вынесено в конец, в гла­ ву 19. Те, кого это интересует, могут сначала ее прочитать.

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

Программистам, имеюидим опыт работы с C + + , наиболее интересны будут части III и IV, где рассказывается о мош,ных средствах C+ +

и "подводных камнях". Если при первом знакомстве с C + +

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

ознакомиться также с частями I и II (кроме того, это просто интересно).

Опытным программистам, применяюи;им язык С и желаюш^им перейти на C+ + , следует прочитать части II, III и IV — это как раз для них. Полезно будет также просмотреть часть 1, в которой язык С

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

• Программистам с опытом работы на языках высокого уровня, отличных от С и C+ + , следует начать с части 1.

Тем, кто хотел бы познакомиться с введением в программирование, лучше пропустить главу 1, посвяиценную объектно-ориентированному подходу. На этом этапе она будет для вас слишком абстрактной.

Сначала изучите другие главы части I, потом вернитесь к главе 1, а затем переходите к частям II, 111 и IV.

Соглашения, используемые в данной книге

Весь программный код, представленный в нумерованных листингах, полностью протестирован и отлажен с использованием нескольких компиляторов, включая Microsoft Visual C+ + , Borland и GNU. Он должен работать без каких-либо изменений. Фрагменты кода, не включенные в нумерованные листинги, также отлажены и протестированы. Их можно выполнять, но для этого требуется неко­ торое знакомство с языком.

В данной книге листинги и фрагменты программного кода представлены моноширинным шрифтом. Это же относится к встречаюидимся в тексте терминам языка C+ + . Например, имя класса C + + записывается как Account, так же, как в программном коде. То же самое и с ключевыми словами.

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

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

О с т о р о ж н о ! Этим значком помечена информация о том, что может вызвать W непредвиденные трудности или дать неожиданные результаты.

Соседние файлы в предмете Программирование на C++