Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лафоре Р. - Объектно-ориентированное программир...doc
Скачиваний:
153
Добавлен:
01.04.2025
Размер:
41 Мб
Скачать
☆

Заголовочные файлы 605

Пространства имен 609

Класс сверхбольших чисел 613

Числа как строки 613

Описатель класса 614

Методы 615

Прикладная программа 617

Моделирование высотного лифта 619

Работа программы ELEV 620

Проектирование системы 621

Листинг программы ELEV 623

Диаграмма состояний для программы ELEV 634

Резюме 635

Вопросы 636

Проекты 638

Глава 14. Шаблоны и исключения 640

Шаблоны функций 640

Шаблон простой функции 642

Шаблоны функций с несколькими аргументами 644

Шаблоны классов 647

Контекстозависимое имя класса 651

Создание класса связных списков с помощью шаблонов 653

Хранение пользовательских типов 655

UML и шаблоны 658

Исключения 659

Для чего нужны исключения 660

Синтаксис исключений 661

Простой пример исключения 662

Многократные исключения 666

Исключения и класс Distance 668

Исключения с аргументами 670

Класс bad_alloc 673

Размышления об исключениях 674

Резюме 675

Вопросы 676

Упражнения 678

Глава 15. Стандартная библиотека шаблонов (stl) 681

Введение в STL 682

Контейнеры 682

Алгоритмы 687

Итераторы 688

Возможные проблемы с STL 689

Алгоритмы 690

Алгоритм find() 690

Алгоритм count() 691

Алгоритм sort() 692

Алгоритм search() 692

Алгоритм merge() 693

функциональные объекты 694

Пользовательские функции вместо функциональных объектов 695

Добавление _if к аргументам 696

Алгоритм for_each() 697

Алгоритм transform() 697

Последовательные контейнеры 698

Векторы 699

Списки 702

Итераторы 706

Итераторы как интеллектуальные указатели 706

Итераторы в качестве интерфейса 708

Соответствие алгоритмов контейнерам 710

Работа с итераторами 713

Специализированные итераторы 717

Адаптеры итераторов 717

Потоковые итераторы 720

Ассоциативные контейнеры 724

Множества и мультимножества 725

Отображения и мультиотображения 729

Ассоциативный массив 730

Хранение пользовательских объектов 731

Множество объектов person 732

Список объектов класса person 735

функциональные объекты 738

Предопределенные функциональные объекты 739

Создание собственных функциональных объектов 741

функциональные объекты и поведение контейнеров 746

Резюме 746

Вопросы 747

Упражнения 749

Глава 16. Разработка объектно-ориентированного по 752

Эволюция процесса создания программного обеспечения 752

Процесс просиживания штанов 753

Каскадный процесс 753

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

Современные подходы 754

Моделирование вариантов использования 755

Действующие субъекты 755

Варианты использования 756

Сценарии 756

Диаграммы вариантов использования 757

Описания вариантов использования 758

От вариантов использования к классам 758

Предметная область программирования 759

Рукописные формы 760

Допущения 762

Программа LANDLORD: стадия развития 762

Действующие субъекты 762

Варианты использования 762

Описание вариантов использования 763

Сценарии 765

Диаграммы действий UML 765

От вариантов использования к классам 766

Список существительных 766

Уточнение списка 767

Определение атрибутов 768

От глаголов к сообщениям 768

Диаграмма классов 770

Диаграммы последовательностей 770

Написание кода 774

Заголовочный файл 775

Исходные .cpp файлы 780

Вынужденные упрощения 789

Взаимодействие с программой 789

Заключение 791

Резюме 791

Вопросы 792

Проекты 794

Приложение А. Таблица ASCII 796

Приложение Б. Таблица приоритетов операций C++ 803

Таблица приоритетов операций 803

Зарезервированные слова 803

Приложение В. Microsoft Visual C++ 806

Элементы экрана 806

Однофайловые программы 807

Компоновка существующего файла 807

Создание нового файла 808

Ошибки 808

Информация о типах в процессе исполнения (RTTI) 808

Многофайловые программы 809

Проекты и рабочие области 809

Работа над проектом 809

Сохранение, закрытие и открытие проектов 810

Компиляция и компоновка 811

Программы с консольной графикой 811

Отладка программ 811

Пошаговая трассировка 812

Просмотр переменных 812

Пошаговая трассировка функций 812

Точки останова 813

Приложение Г. Borland C++ Builder 814

Запуск примеров в C++ Builder 815

Очистка экрана 815

Создание нового проекта 815

Задание имени и сохранение проекта 817

Работа с существующими файлами 817

Компиляция, связывание и запуск программ 818

Запуск программы в C++ Builder 818

Запуск программы в MS DOS 818

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

Закрытие и открытие проектов 818

Добавление заголовочного файла к проекту 819

Создание нового заголовочного файла 819

Редактирование заголовочного файла 819

Определение местонахождения заголовочного файла 819

Проекты с несколькими исходными файлами 820

Создание дополнительных исходных файлов 820

Добавление существующих исходных файлов 820

Менеджер проектов 821

Программы с консольной графикой 821

Отладка 822

Пошаговый прогон 822

Просмотр переменных 822

Пошаговая трассировка функций 822

Точки останова 823

Приложение Д. Упрощенный вариант консольной графики 824

Использование подпрограмм библиотеки консольной графики 825

Функции библиотеки консольной графики 825

Реализация функций консольной графики 827

Компиляторы Microsoft 827

Компиляторы Borland 828

Листинги исходных кодов 828

Приложение Е. Алгоритмы и методы STL 836

Алгоритмы 836

Методы 843

Итераторы 845

Приложение Ж. Ответы и решения 847

Глава 1 847

Глава 2 847

Глава 3 849

Глава 4 853

Глава 5 855

Глава 6 859

Глава 7 862

Глава 8 866

Глава 9 871

Глава 10 876

Глава 11 881

Глава 12 886

Глава 13 889

Глава 14 890

Глава 15 894

Глава 16 898

Приложение 3. Библиография 899

Углубленное изучение C++ 899

Основополагающие документы 900

UML 900

История C++ 901

И другое 901

Алфавитный указатель 902

Эта книга посвящается GGL и ее неукротимому духу

Предисловие

Наиболее существенные изменения в 4-м издании касаются более раннего озна- комления читателя с языком UML, дополнительных сведений о межфайловом взаимодействии в главе 13 и обновления материала, относящегося к разработке программного обеспечения, в главе 16.

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

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

Введение

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

Новые концепции программирования

Двадцать и более лет назад программисты реализовывали свои проекты путем непосредственного написания кода. С возрастанием размера и сложности проектов становилось все яснее, что такой подход неудачен. Проблема заключалась в не- пропорциональном возрастании сложности процесса создания самих программ.

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

  • объектно-ориентированное программирование (ООП);

  • унифицированный язык моделирования (UML);

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

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

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

Почему объектно-ориентированный подход к программированию стал приори- тетным при разработке большинства программных проектов? ООП предлагает новый мощный способ решения проблемы сложности программ. Вместо того

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

Унифицированный язык моделирования

Унифицированный язык моделирования (UML) — это графический язык, вклю- чающий в себя множество различных диаграмм, помогающих специалистам по системному анализу создавать алгоритмы, а программистам — разбираться в принципах работы программы. UML является мощным инструментом, позво- ляющим сделать процесс программирования более легким и эффективным. Мы проводим краткое ознакомление с UML в главе 1, а более специфические вопро- сы, связанные с UML, рассматриваем в других главах книги. Каждое новое сред- ство UML вводится на рассмотрение в том месте, где оно становится полезным для иллюстрации разделов ООП. Таким образом, у вас появляется возможность, не прилагая лишних усилий, освоить концепции языка UML, который одновре- менно будет способствовать более эффективному усвоению C++.

Языки и платформы разработки

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

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

До последнего времени язык C++ развивался вне рамок стандартизации. Это означало, что каждый производитель компиляторов по-своему реализовывал отдельные нюансы языка. Тем не менее комитет по стандартам языка C++ орга- низации ANSI/ISO разработал документ, ныне известный под названием Стан- дартного C++. (ANSI является сокращением от английского названия Амери- канского Национального Института Стандартов, а ISO — от Международной Организации Стандартов.) Стандартный C++ включает в себя много допол- нительных возможностей, например стандартную библиотеку шаблонов (STL).

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

Наиболее популярной средой разработки для C++ является продукт, совмест- но разработанный компаниями Microsoft и Borland и предназначенный для рабо- ты под управлением операционных систем Microsoft Windows. Мы постарались создать примеры программ для этой книги таким образом, чтобы они поддер- живались как компиляторами Microsoft, так и компиляторами Borland (более детальную информацию о компиляторах можно найти в приложении В «Micro- soft Visual C++» и приложении Г «Borland C++ Builder»).

Для чего нужна эта книга

Эта книга предназначена для изучения объектно-ориентированного програм- мирования на языке C++ с помощью компиляторов фирм Microsoft и Borland. В ней также рассматриваются методы разработки программного обеспечения и графический язык UML. Книга будет полезна как профессиональным про- граммистам, так и студентам, изучающим программирование, а также всем тем, кто испытывает интерес к данной тематике.

Новые концепции

Объектно-ориентированное программирование содержит несколько концепций, которые могут быть незнакомы тем, кто практикует программирование на таких традиционных языках, как Pascal, Basic и C. К этим концепциям относятся клас- сы, наследование и полиморфизм, составляющие основу объектно-ориентирован- ного подхода. Тем не менее, рассматривая специфичные вопросы объектно-ори- ентированных языков, довольно легко уйти в сторону от этих понятий. Многие книги обрушивают на читателя море деталей относительно возможностей языка, не уделяя внимания тому, почему эти возможности существуют. В этой книге нюансы языка рассматриваются в связи с базовыми концепциями.

Последовательность изложения материала

В этой книге мы начинаем с рассмотрения самых простых примеров, постепенно усложняя их и заканчивая полноценными объектно-ориентированными при- ложениями. Интенсивность подачи нового материала такова, что у читателя есть возможность без спешки усваивать пройденный материал. Для облегчения усвоения нового материала мы постарались снабдить его максимальным количе- ством наглядных иллюстраций. В конце каждой главы приведены контрольные вопросы и упражнения, что позволяет использовать книгу в качестве практиче- ского пособия для студентов. Ответы на вопросы и упражнения, помеченные знаком *, приведены в приложении Ж. Упражнения имеют различную степень сложности.

Знания, необходимые для чтения этой книги

Материал, изложенный в этой книге, доступен даже тем, кто изучает программи- рование «с нуля». Однако наличие опыта программирования на таких языках, как Visual Basic, не будет помехой при чтении.

Многие учебники по C++ рассчитаны на то, что читатель уже знаком с язы- ком C. Данная книга в этом смысле является исключением. Изучение C++ в этой книге начинается «с чистого листа», и отсутствие знакомства с языком C никак не скажется на эффективности изучения C++. Читатели, знакомые с C, навер- няка обратят внимание на то, как мало существует различий между C и C++.

Желательно, чтобы читатель этой книги имел представление об основных операциях Microsoft Windows, таких, как запуск приложений и копирование файлов.

Техническое и программное обеспечение

Для работы с программами вам потребуется компилятор языка C++. Для приме- ров из этой книги подойдут компиляторы Microsoft C++ и Borland C++.

В приложении В этой книги можно найти подробную информацию о работе с компилятором фирмы Microsoft, а в приложении Г — с компилятором фирмы Borland. Другие компиляторы, рассчитанные на стандартный C++, будут безо- шибочно воспринимать большинство примеров в том виде, в каком они приве- дены в книге.

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

Консольные программы

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

Исходные тексты программ

Исходные тексты программ доступны на сервере http://www.samspublishing.com