Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lutsik_Yu_A_Obektno_orientir_programmir_na_yaz.pdf
Скачиваний:
63
Добавлен:
11.05.2015
Размер:
4.33 Mб
Скачать

 

 

 

 

Ю. А. Луцик, В. Н. Комличенко

Р

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И

 

 

 

 

 

 

 

 

У

 

 

 

 

 

 

 

 

Г

 

 

 

 

 

 

 

 

 

Б

 

 

 

 

 

 

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

 

 

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++

 

 

 

 

 

 

 

а

 

 

 

 

 

 

 

Допущено Министерством образования

 

 

 

 

Республики Беларусь в честве учебного пособия

 

 

 

 

 

 

е

 

 

 

 

 

 

для студентов учр жд ний, обеспечивающих получение

 

 

 

 

 

т

 

 

 

 

 

высшего образования по сп кциальностям «Информационные системы

 

 

 

 

 

и хнологии (по направлениям

 

 

 

 

 

 

о

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

л

 

 

 

 

 

 

 

 

б

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

Б

 

 

 

 

 

 

 

 

 

 

МИНСК БГУИР 2008

УДК 681.322 (075.8) ББК 32.97 я 73

Л 86

Рецензенты :

 

 

 

 

 

 

 

 

 

Р

 

кафедра прикладной математики и информатики Белорусского

 

государственного педагогического университета им. М. Танка

 

 

 

 

 

 

 

 

И

 

(заведующий кафедрой, канд. физ.-мат. наук А. А. Бейда),

 

 

заведующий кафедрой «Программное обеспечение вычислительной

 

 

 

 

 

 

 

У

 

 

техники и автоматизированных систем» Белорусского национального

 

технического университета, канд. техн. наук Н. А. Разоренов

 

 

 

 

 

 

Г

 

 

 

 

 

 

 

 

Б

 

 

 

 

 

 

 

 

а

 

 

 

 

 

 

 

к

 

 

 

 

 

 

 

ро

е

 

 

 

 

 

 

Луцик, Ю. А.

 

 

 

 

 

 

Л 86

ваннте программирование на языке С++: учеб. по-

Объектно-ориент

 

 

л

 

 

 

 

 

 

 

 

собие / Ю. А. Луц к, В. Н. Комличенко. – Минск : БГУИР, 2008. – 266 с.: ил.

 

ISBN 978-985-444-985-8

 

 

 

 

 

 

 

б

 

 

 

 

 

 

 

 

В уче ном пособиирассмотрены приемы и правила объектно-ориентированного

 

программирования с испо ьзованием языка С++. Изложены основные конструкции язы-

 

и

 

 

 

 

 

 

 

 

 

ка С++, а также о щие принципы разработки объектно-ориентированных программ. Рас-

 

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

 

 

Б

 

 

 

 

 

 

 

 

 

Пособ е будет полезно студентам всех специальностей, магистрантам и аспирантам.

 

 

 

 

 

 

 

УДК 681.322 (075.8)

 

 

 

 

 

 

 

ББК 32.97 я 73

ISBN 978-985-444-985-8

 

 

 

© Луцик Ю. А., Комличенко В. Н.,

2008

 

 

 

© УО «Белорусский государственный

 

 

 

 

 

 

 

 

 

университет информатики

 

 

 

 

 

 

и радиоэлектроники», 2008

 

2

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

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

необходимо следующее:

 

 

 

 

 

- определить задачу, которую нужно решить;

 

Р

- продумать интерфейс программы с пользователем;

 

- разбить программу на логически законченные этапы;

 

-

создать текст программы;

 

И

 

 

 

-

отладить программу;

 

 

 

 

-

тестировать программу.

 

 

 

Второй подход называется объектно-ориентированным программирова-

 

 

 

 

 

Г

 

 

нием (ООП). Для разработки программ, основанных на использовании объект-

 

 

 

 

 

Б

 

 

но-ориентированного программирования, необходимоУ:

 

-

определить задачу;

 

 

 

 

 

- определить уникальные объекты в области решаемой задачи;

- определить взаимосвязь между объектами;

 

 

-

 

 

 

к

 

 

 

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

возможные состояния, в которых может н ходиться объект;

 

-

 

 

е

 

 

 

определить сообщ ния, принимаемые каждым объектом, и коды функ-

 

 

кт

буд т реагировать на эти сообщения. Оформить

ций, согласно которым объ

 

их как функции-члены неко орых классов;

 

 

 

-

 

ро

 

 

 

 

 

объявить объек ы данных классов;

 

 

 

- определить начальное состояние системы;

 

 

-

скомп л вать, скомпоновать систему.

 

 

 

л

 

 

 

 

 

 

Цель настоящего учебного пособия помочь в изучении языка С++, под-

держивающего объектно-ориентированный подход в программировании. Для

 

б

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

струк

языка С.

ций

Б

 

Материал пособия основывается на ряде изданий [1–11].

 

 

3

1.ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД

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

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

взаимодействующих друг с другом объектов, каждый из которых является эк-

нии трех требований: 1) в качестве базовых элементов используются объектыР, а

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

следования. Программа будет объектно-ориентированной только при соблюде-

ного класса; 3) классы организованы иерархически. И

не алгоритмы; 2) каждый объект является экземпляром какого-либо определен- У

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

де всего подразумевает правильное и эффективное использование механизмов

конкретных языков программирования, а проектирование основное внимание

уделяет правильному и эффективному

структурированиюГсложных систем.

 

 

 

 

 

 

 

а

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

соединяющая в себе процесс объектной декомпозицииБи приемы представления

 

 

 

 

 

к

логической (классы и объекты) и физичес ой (модули и процессы) структуры

 

 

 

 

 

ес

 

системы, а также статической и динамич

ой моделей проектируемой систе-

мы.

 

 

 

 

 

 

 

Именно объектно-ориентированная д композиция отличает объектно-

ориентированное проектирование

с руктурного; в первом случае логическая

 

 

 

нно

 

 

 

структура системы отражается абс ракциями в виде классов и объектов, во вто-

ром алгоритмами.

и

отый анализ. На объектную модель повлияла

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

 

лиз

 

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

более ранняя модель жизне

ориентированный ана

з направлен на создание моделей реальной действи-

б

 

 

 

 

 

 

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

и

 

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

ориентированный ана

воспринимаются с точки зрения классов и объектов, выявленных в предметной областиБ.

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

2.ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

2.1.Абстрактные типы данных

Концепция абстрактных типов и абстрактных типов данных является ключевой в программировании. Абстракция подразумевает разделение и неза- 4

висимое рассмотрение интерфейса и реализации.

Интерфейс и внутренняя реализация являются определяющими свойст-

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

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

объект (его реализацию) пользователем, который не является специалистом в

этой области, приводит к отрицательному результатуГ. В программировании за-

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

тия внутренних компонент. Принцип бстрБкции обязывает использовать меха-

 

к

низмы скрытия, которые предотвр щ ют умышленное или случайное измене-

ние внутренней реализации.

а

Различают процедурную абстра цию и абстракцию данных.

Процедурная абс ракция тр бует раздельного рассмотрения назначения

процедуры (например функцииеС/С++) и ее реализации.

Абстракция данных

ребует раздельного рассмотрения операций над

программа.

 

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

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

прибор, имеющий развитый интерфейс с пользователем. При эксплуатации

удобнее в эксплуатации. При приобретении объекта нас Иинтересует его интер- фейс, но не его реализация. Основная цель абстракции в программировании за-

ключается в отделении интерфейса от реализации. ПопыткаУусовершенствовать

озациитэ их операций. Достаточно знать, какие операции

данными и реали выполняет модуль (функция С/С++), но не требуется знать, какие данные он

при этом испо ьзует (они скрыты) и как в действительности выполняются эти операции.

Таким образом, абстракция позволяет отделить внешнее представление

няя структура модуля, а лишь то, что этот модуль может «делать». С точки Бзрен я же разработчика, качество модуля определяется его дешевизной и

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

 

л

б

и

 

эффект вностью.

Абстракция данных предполагает определение и рассмотрение абстракт- ных типов данных (АТД), или, иначе, новых типов данных, введенных пользо- вателем. АТД это совокупность данных вместе с множеством операций, ко- торые можно выполнять над этими данными.

2.2. Базовые принципы объектно-ориентированного программирования

Объектно-ориентированное программирование основывается на трех ос- 5

новных концепциях: инкапсуляции, полиморфизме и наследовании.

Инкапсуляция (пакетирование) представляет собой механизм, связываю- щий вместе данные и код, обрабатывающий эти данные, и сохраняющий их от внешнего воздействия и ошибочного использования. Инкапсуляция позволяет создавать объект, являющийся логическим целым, включающим данные и код для работы с этими данными. Объект обеспечивает защиту против случайной или несанкционированной модификации частных (private) составляющих его членов. Закрытые данные или коды (методы) доступны только для других час- тей этого объекта и недоступны вне его. Открытая часть объекта предназначена для обеспечения контролируемого интерфейса его закрытой части.

Полиморфизм обеспечивает возможность реагировать различным образом

на одно и то же сообщение (вызов функции-члена). Полиморфизм позволяет

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

 

У

интерфейса для задания целого класса действий. Поддержка полиморфизма в

ООП осуществляется через виртуальные функции и механизм перегрузкиИи пе-

реопределения.

 

 

Ключевым в понимании полиморфизма является то, что он позволяет ма-

нипулировать объектами различной степени сложности путемГсоздания общего

 

асс

 

для них стандартного интерфейса для реализации похожих действий.

Наследование представляет собой мех низм, благодаряБ

которому новый

 

к

 

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

существующего (базового) класса. Новый л , и пользуя наследование, нуж-

дается только в определении специфичных толь о для этого класса компонент.

Наследование позволяет поддержива конц пцию иерархии классов.

Различают полиморфные и мономорфныее

языки. Для мономорфных

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

ть имеют уникальный тип. П поллим рфные языки поддерживают концепцию поли-

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

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

БПри построении объектно-ориентированной программы одним из основ- ных является вопрос иерархии классов. Пусть имеется некоторая иерархия (структура, взаимосвязь) классов. В этом случае можно:

- определить объект для заданного класса; - построить новый класс, наследуя свойства существующего класса;

- изменить поведение нового класса (изменить существующие и доба- вить новые функции).

Построение нового класса, наследованного из существующего, предпола-

гает:

- добавление в новый класс новых компонент-данных;

6

-добавление в новый класс новых компонент-функций;

-замену в новом классе наследуемых из старого класса компонент- функций.

Наследование может быть одиночным и множественным (рис. 1). При множественном наследовании производный (новый) класс имеет более одного наследуемого (старого) класса, из которых образуется новый класс. При этом новый класс наследует поведение этих классов.

Общий базовый класс

 

Производный

Производный

Производный

базовый класс

базовый класс

Р

базовый класс

 

 

 

 

И

Производный Производный

 

 

ПроизводныйУ

Простое (одиночное) наследование

 

Г

 

 

Множественное наследование

Рис. 1. Виды иер рхии классов

 

 

 

Б

 

Таким образом, объектно-ориентиров нное программирование метод

 

а

 

 

построения программ в виде множ ства взаимодействующих объектов, струк-

к

 

 

 

е

 

 

 

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

тура и поведение которых описаны соответствующими классами. Все эти клас-

сы образуют иерархию классов, выражающую отношение наследования.

При разработкеобъек но-ориентированных программ часто используются

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

бЯзык программирования называется объектно-ориентированным, если : и- он поддерживает абстрактные типы данных (объекты с определенным нтерфейсом и скрытым внутренним состоянием);

Б - объекты имеют связанные с ними типы (классы); - поддерживается механизм наследования.

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

нием на основе абстрактных типов данных.

2.3. Основные достоинства языка С++

Язык С++ основывается на языке С, сохраняя большую часть возможно-

7

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]