Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_KAZYMYR.doc
Скачиваний:
12
Добавлен:
09.11.2019
Размер:
3.71 Mб
Скачать

В.В. Казимир

ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ

Навчальний посібник

Чернігів 2007

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Міжнародний науково-технічний університет

Чернігівський інститут інформації, бізнесу і права

В.В. Казимир

ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ

Навчальний посібник

Рекомендовано

Міністерством освіти і науки України

як навчальний посібник для студентів вищих навчальних

закладів з напрямів підготовки “Комп’ютерні науки”,

Комп’ютеризовані системи, автоматика і управління”

(Лист МОНУ № 14/18-Г 24 від 09.01.2008)

Київ 2008

УДК 004.434 (075.8)

Казимир В.В.

Об’єктно-орієнтоване програмування: Навчальний посібник – К.: Видавничий Дім «Слово», 2008. – 192 с.

ISBN _______________

У навчальному посібнику детально викладені основні концепції об’єктно-орієнтованого програмування та особливості їх реалізації в найбільш поширених мовах програмування Smalltalk, C++, Object Pascal та Java. Окремо розглянуті питання щодо застосування бібліотеки класів мови С++. Теоретичний матеріал підкріплений чисельними прикладами. В додатках містяться методичні вказівки до лабораторних робіт, які можуть використовуватись, як під час проведення навчальних занять, так і при самостійному освоєнні дисципліни.

Для студентів всіх форм навчання, аспірантів та викладачів навчальних дисциплін за напрямами підготовки “Комп’ютерні науки”, “Комп’ютеризовані системи, автоматика і управління”.

АВТОР

КАЗИМИР Володимир Вікторович – доктор технічних наук, професор

РЕЦЕНЗЕНТИ:

В.В. ЛИТВИНОВ – доктор технічних наук, професор (Інститут проблем математичних машин і систем НАН України, відділ інтегрованих автоматизованих систем)

В.Н. ТОМАШЕВСЬКИЙ – доктор технічних наук, професор (Національний технічний університет “Київський політехнічний інститут”, кафедра автоматизованих систем обробки інформації та управління)

Рекомендовано Міністерством освіти і науки України як навчальний посібник для студентів вищих навчальних закладів з напрямів підготовки “Комп’ютерні науки”, “Комп’ютеризовані системи, автоматика і управління” (Лист МОНУ № 14/18-Г 24 від 09.01.2008)

ISBN 978-966-8407-78-9  Казимир В.В. 2008

 Видавництво “Слово”, 2008

ЗМІСТ

ПЕРЕДМОВА 8

РОЗДІЛ 1 ОБ'ЄКТНИЙ ПІДХІД У ПРОГРАМУВАННІ 10

1.1. Причини виникнення ООП 10

1.1.1. Складність об'єкта дослідження 10

1.1.2. Складність процесу розробки програмного забезпечення 12

1.1.3. Складність опису окремих елементів 13

1.2. Парадигма ООП 15

1.3. Історія розвитку ООП 18

РОЗДІЛ 2 ОБ'ЄКТИ Й КЛАСИ: ІНКАПСУЛЯЦІЯ 20

2.1. Структура об'єкта й класу 20

У різних мовах ООП поділ на інтерфейс і реалізацію не завжди явно є присутнім у визначенні класу, однак це не означає, що такого поділу немає взагалі. 22

2.2. Особливості опису класів у мовах ООП 22

2.2.1. Опис класів в SmallTalk 22

Create x: anInt y: anInt 23

2.2.2. Опис класів в C++ 24

{cout << '' Усього елементів '' << size;} 26

2.2.3. Опис класів в Delphi 26

2.2.4. Опис класів в Java 28

2.3. Поля даних та їх ініціалізація 31

2.3.1. Визначення полів даних в SmallTalk 32

2.3.2. Визначення полів даних в C++ 32

2.3.3. Визначення полів даних в Delphi 33

2.3.4. Визначення змінних в Java 33

2.4. Доступ до даних 34

2.4.1. Доступ до даних в SmallTalk 34

2.4.2. Доступ до даних в C++ 35

2.4.3. Доступ до даних в Delphi 36

2.4.4. Доступ до даних в Java 37

2.5. Спеціальні змінні 38

2.5.1. Спеціальні змінні в SmallTalk 38

2.5.2. Спеціальні змінні в C++ 39

2.5.3. Спеціальні змінні в Java 39

2.5.4. Спеціальні змінні в Delphi 40

2.6. Посилання 41

2.6.1. Визначення посилань в SmallTalk, Delphi і Java 41

2.6.2. Особливості визначення посилань у С++ 41

2.7. Методи 42

2.7.1. Загальна схема визначення методу 43

2.7.2. Визначення методів в SmallTalk 43

2.7.3. Визначення методів в C++ 43

2.7.4. Визначення методів в Delphi 45

begin 47

2.7.5. Визначення методів в Java 47

2.8. "Дружні" методи 48

2.8.1. «Дружні» функції в С++ 48

2.8.2. Аналог дружніх функцій в Delphi 50

2.9. Конструктори й деструктори 52

2.9.1. Конструктори й деструктори в SmallTalk 52

2.9.2. Конструктори й деструктори в С++ 53

2.9.3. Конструктори й деструктори в Delphi 58

2.9.4. Конструктори й деструктори в Java 60

2.10. Властивості 62

2.10.1. Властивості в Delphi 62

2.10.2. Властивості в Java 65

2.11. Функції-операції в С++ 68

2.12. Абстрактні методи 72

РОЗДІЛ 3 УСПАДКУВАННЯ 75

3.1. Форми успадкування 75

3.2. Успадкування в SmallTalk 77

3.3. Успадкування в С++ 78

3.3.1. Віртуальне успадкування 80

3.3.2. Правило сумісності типів 81

3.3.3. Використання конструкторів і деструкторів при успадкуванні 83

3.4. Успадкування в Delphi 84

3.4.1. Ієрархія класів в Delphi 86

3.4.2. Створення нових компонентів 87

3.5. Успадкування в Java 90

3.5.1. Використання ключового слова super 93

3.5.2. Клас Object 94

РОЗДІЛ 4 ПОЛІМОРФІЗМ 96

4.1. Віртуальні методи 96

4.2. Віртуальні функції в С++ 98

4.2.1. Механізм пізнього зв'язування 99

4.2.2. Таблиця віртуальних методів 101

4.3. Поліморфізм в Delphi 103

4.3.1. Заміщення віртуальних і динамічних методів 105

4.3.2. Приведення типів 107

4.4. Поліморфізм в Java 108

4.5. Поліморфізм в SmallTalk 109

РОЗДІЛ 5 БІБЛІОТЕКА КЛАСІВ С++ 111

5.1. Потокові класи 111

5.1.1. Ієрархія потокових класів 111

5.1.2. Форматоване введення/ виведення 112

5.1.3. Маніпулятори 114

5.1.4. Введення/виведення у файл 114

5.2. Контейнерні класи 115

5.2.1. Ітератори 116

5.2.2. Визначення контейнерних класів 118

5.2.3. Стандартні контейнерні класи 119

5.3. STL – стандартна бібліотека шаблонів 121

5.3.1. Параметиізовані класи (шаблони) 121

5.3.2. Ітератори STL 123

5.3.3. Узагальнені алгоритми 124

ЛІТЕРАТУРА 130

ДОДАТКИ 131

ЛАБОРАТОРНА РОБОТА №1 ОБ'ЄКТИ Й ПОВІДОМЛЕННЯ В SMALLTALK 132

ЛАБОРАТОРНА РОБОТА №2 КЛАСИ Й МЕТОДИ В SMALLTALK 147

ЛАБОРАТОРНА РОБОТА 3 КЛАСИ Й ОБ'ЄКТИ В C++ 157

ЛАБОРАТОРНА РОБОТА 4 УСПАДКУВАННЯ Й ПОЛІМОРФІЗМ В C++ 169

ЛАБОРАТОРНА РОБОТА 5 КОМПОНЕНТИ В DELPHI 180

ЛАБОРАТОРНА РОБОТА 6 МЕНЮ Й ВІКНА В DELPHI 194

ЛАБОРАТОРНА РОБОТА 7 РОЗРОБКА МЕНЮ В JAVA 204

ЛАБОРАТОРНА РОБОТА 8 РОБОТА З ПОДІЯМИ В JAVA 212

Передмова

Об’єктно-орієнтоване програмування (ООП) сьогодні є провідним напрямком у розробці складних програмних систем. На основі ООП створене велике число різноманітних середовищ програмування, які з успіхом застосовуються при вирішенні практичних завдань у всіх сферах застосування комп'ютерної техніки, включаючи побудову великих баз даних, керування машинами й механізмами, забезпечення функціонування мобільних пристроїв. Фактично, скрізь, де виконуються комп'ютерні програми, вони створюються на основі об’єктно-орієнтованого програмування.

Звідси випливають особливі вимоги до підготовки фахівців в області комп'ютерних наук і комп’ютеризованих систем керування по даній дисципліні. Неможливо стати гарним програмістом, не опанувавши всіма тонкощами й секретами ООП. Значною мірою вони можуть бути збагнені тільки в результаті порівняльного аналізу особливостей реалізації парадигми об'єктного підходу в різних мовах програмування, а саме в Smalltalk, Object Pascal, C++ і Java. Саме з упором на такий акцент побудований даний навчальний посібник. Кожне питання розглядається в площині його вирішення в кожній з цих мов програмування.

Викладення теоретичного матеріалу дається в розрізі основних концепцій ООП. У першому розділі розглядаються причини зародження й історія становлення об'єктного підходу в програмуванні. Докладно пояснюється суть керування даними при виконанні програм.

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

Третій розділ охоплює питання успадкування в ООП. Крім технічних особливостей побудови ієрархій класів розглядаються правила виклику конструкторів і деструкторів з урахуванням успадкування, а також принцип віртуального успадкування.

У четвертому розділі докладно розкриваються механізми раннього й пізнього зв'язування в С++, специфіка перевизначення й заміщення методів.

П'ятий розділ присвячений винятково мові С++, а саме особливостям побудови потокових класів і контейнерів. На закінчення приводиться приклад використання узагальнених алгоритмів, що будуються з використанням шаблонів.

У додатках до навчального посібника містяться методичні вказівки до лабораторних робіт з дисципліни ООП. Для кожної з розглянутих мов програмування розроблено по дві лабораторні роботи, у яких на чисельних прикладах відпрацьовуються навички застосування ООП при вирішенні практичних завдань із використанням розвинених середовищ програмування.

Для підвищення якості засвоєння теоретичного та практичного матеріалу в посібнику приводяться контрольні питання (в кожному теоретичному розділі) і завдання для самостійної роботи (в кожній лабораторній роботі).

Навчальний посібник написаний на основі відповідного курсу лекцій, який на протязі багатьох років читався автором на кафедрі інформаційних комп’ютерних систем Чернігівського державного технологічного університету. Автор вдячний викладачам й аспірантам кафедри за допомогу, яку вони надавали під час постановки циклу лабораторних робіт, та завідуючому кафедри Павловському В.І. за висловлені ним цінні поради при розробці даного курсу. Особливу подяку автор висловлює своєму шкільному вчителю Тихиєнко В.П., який вперше познайомив його з програмуванням та привів любов до математики, та шановним рецензентам, влучні зауваження яких сприяли поліпшенню змісту навчального посібника.