osn_progr_final
.pdfМіністерство освіти і науки України Київський національний університет імені Тараса Шевченка
Міжнародний економіко-гуманітарний університет імені академіка Степана Дем”янчука
О.БИЧКОВ Ю.ТУРБАЛ
ОСНОВИ
СУЧАСНОГО
ПРОГРАМУВАННЯ
Рівне 2004
1
ББК 018.1 Б 39
УДК 004.432.2
Р е ц е н з е н т и :
доктор техн. наук, професор, зав кафедри прикладної математики
Національного університету водного господарства та природрокористування Власюк А.П.
доктор техн. наук, професор, зав. кафедри прикладної математики Рівненського державного гуманітарного університету Сяський А.О.
Рекомендовано Міністерством освіти і науки України як навчальний посібник для студентів технічних спеціальностей вищих навчальних закладів
Гриф наданий Міністерством освіти і науки України, лист № 14.18.2- 2372 від 05.11.2004
Б 39 О.Бичков, Ю.Турбал Основи сучасного програмування.
Навч. посібник. - Київ: КНУ, 2004.– 678 с.
ISBN
© О.Бичков, Ю.Турбал 2004 р.
2
|
ЗМІСТ |
|
ВСТУП....................................................................................................................... |
10 |
|
1. ОСНОВИ ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ. .................................... |
14 |
|
2. ОСНОВИ АЛГОРИТМІЗАЦІЇ..................................................................... |
23 |
|
2.1 |
ПОНЯТТЯ АЛГОРИТМУ. ............................................................................................. |
23 |
2.2 |
КЛАСИФІКАЦІЯ ВНУТРІШНІХ СТРУКТУР АЛГОРИТМІВ............................. |
25 |
2.3 |
СКЛАДНІСТЬ АЛГОРИТМІВ . ..................................................................................... |
28 |
2.4 |
СКЛАДНІСТЬ ЗАДАЧ. ................................................................................................... |
31 |
3. МЕТОДОЛОГІЯ ОПИСУ МОВ ПРОГРАМУВАННЯ........................ |
40 |
|
3.1 |
ГРАМАТИКИ .................................................................................................................... |
40 |
3.2 |
ТИПИ ФОРМАЛЬНИХ ГРАМАТИК........................................................................... |
43 |
3.3 |
БНФ. ................................................................................................................................... |
46 |
3.4 |
ГРАМАТИКИ, ЩО ОПИСУЮТЬ НАЙПРОСТІШІ КОНСТРУКЦІЇ МОВ |
|
ПРОГРАМУВАННЯ................................................................................................................. |
49 |
|
4 ТЕХНОЛОГІЯ ЗАПИСУ АЛГОРИТМІВ ЗА ДОПОМОГОЮ |
||
МОВИ ПРОГРАМУВАННЯ С. ........................................................................ |
53 |
|
4.1 |
ЕЛЕМЕНТИ МОВИ ........................................................................................................ |
53 |
4.2 |
СТРУКТУРА С-ПРОГРАМИ: ...................................................................................... |
56 |
4.3 |
ОПИСУВАЧІ...................................................................................................................... |
56 |
4.4 |
ОПЕРАЦІЇ МОВИ С....................................................................................................... |
57 |
4.4.1 Арифметичні операції та операції порівняння .............................. |
57 |
|
4.4.2 Логічні операції ................................................................................................... |
58 |
|
4.4.3 Побітові логічні операції .............................................................................. |
58 |
|
4.4.4 Операції адресації та взяття значення.............................................. |
60 |
|
4.4.5 Операція послідовного виконання............................................................ |
60 |
|
4.4.6 Операції інкремента(++) та декремента(--)................................ |
61 |
|
4.4.7 Операція присвоювання.................................................................................. |
62 |
|
4.4.8 Умовна операція ................................................................................................. |
62 |
|
4.4.9 Операція sizeof ..................................................................................................... |
63 |
|
4.4.10 Унарний “+”....................................................................................................... |
63 |
|
4.4.11 Пріоритет операцій...................................................................................... |
63 |
|
4.5 |
ОПЕРАТОРИ МОВИ С.................................................................................................. |
64 |
4.5.1 Порожній оператор ........................................................................................ |
64 |
|
4.5.2 Складений оператор ........................................................................................ |
64 |
|
4.5.3 Умовний оператор ............................................................................................ |
64 |
|
4.5.4 Оператор циклу for ......................................................................................... |
65 |
|
4.5.5 Оператори dowhile ........................................................................................ |
67 |
|
4.5.6 Оператор continue ........................................................................................... |
68 |
|
4.5.7 Операторперемикач switch ...................................................................... |
68 |
3
4.5.8 Оператор break ................................................................................................. |
69 |
|
4.5.9 Оператор goto ..................................................................................................... |
69 |
|
4.5.10 Оператор return............................................................................................... |
70 |
|
4.6 |
ДИРЕКТИВИ ПРЕПРОЦЕСОРУ ТА ВКАЗІВКИ КОМПІЛЯТОРУ ................... |
70 |
4.6.1 Директива препроцесору #define ............................................................. |
71 |
|
4.6.2 Директива #undef [<ім’я>]......................................................................... |
73 |
|
4.6.3 Директива #include........................................................................................... |
73 |
|
4.6.4 Директиви умовної компіляції: #if #elif #else #endif.............. |
74 |
|
4.6.5 Директива #line................................................................................................... |
76 |
|
4.6.6 Директива #error <повідомлення> ........................................................ |
76 |
|
4.7 |
ОПИСУВАЧІ З МОДИФІКАТОРАМИ. ................................................................... |
76 |
4.7.1 Моделі пам’яті................................................................................................... |
76 |
|
4.7.2 Модифікатори типу доступу в пам’яті ............................................ |
77 |
|
4.7.3 Модифікатори const, volatile, cdecl, pascal, interrupt ................. |
78 |
|
5 ПРИНЦИПИ ТИПІЗАЦІЇ ДАНИХ............................................................ |
80 |
|
5.1 |
ПРОСТІ ТИПИ ДАНИХ .................................................................................................. |
81 |
5.2 |
ПОХІДНІ ТИПИ................................................................................................................ |
82 |
5.3 |
ЕКВІВАЛЕНТНІСТЬ ТИПІВ ......................................................................................... |
84 |
5.4 |
УСПАДКУВАННЯ АТРИБУТІВ .................................................................................. |
85 |
5.5 |
ПЕРЕЛІЧУВАНІ ТИПИ .................................................................................................. |
86 |
5.6 |
ЛОГІЧНІ ТИПИ................................................................................................................. |
87 |
5.7 |
СИМВОЛЬНІ ТИПИ ........................................................................................................ |
87 |
5.8 |
ЧИСЛОВІ ТИПИ............................................................................................................... |
88 |
5.9 |
СТРУКТУРНІ ТИПИ ДАНИХ ....................................................................................... |
88 |
5.9.1 Масиви....................................................................................................................... |
89 |
|
5.9.2 Структури ............................................................................................................. |
90 |
|
5.10 ДЕЯКІ ОСОБЛИВОСТІ ТИПІВ ДАНИХ C ............................................................ |
90 |
|
5.10.1 Базові типи даних ........................................................................................... |
90 |
|
5.10.2 Перетворення типів...................................................................................... |
91 |
|
5.10.3 Засіб typedef. .................................................................................................... |
92 |
|
5.10.4 Вказівники та масиви................................................................................... |
93 |
|
|
5.10.4.1 Вказівники ................................................................................................... |
93 |
|
5.10.4.2 Масиви.......................................................................................................... |
94 |
|
5.10.4.3 Вказiвники та масиви. .......................................................................... |
95 |
|
5.10.4.3 Вказівники на масив та багатовимірні масиви.................... |
96 |
|
5.10.4.4 Приклади ...................................................................................................... |
97 |
5.10.5 Структури та об’єднання . ................................................................... |
110 |
|
|
5.10.5.1 Структури................................................................................................... |
110 |
|
5.10.5.2 Об’єднання............................................................................................... |
114 |
4
|
5.10.5.3 Приклади програм ................................................................................ |
|
116 |
|
6 ПРЕДСТАВЛЕННЯ ЧИСЕЛ У КОМП'ЮТЕРІ. ................................. |
|
129 |
||
6.1 |
СИСТЕМИ ЧИСЛЕННЯ ............................................................................................... |
|
|
129 |
6.2 |
ПРАВИЛА ПЕРЕВЕДЕННЯ ЧИСЕЛ З ОДНІЄЇ СИСТЕМИ ЧИСЛЕННЯ В |
|
||
ІНШУ. ........................................................................................................................................ |
|
|
132 |
|
6.3 |
ПРАВИЛО ВИЗНАЧЕННЯ ТОЧНОСТІ ПРЕДСТАВЛЕННЯ. ........................... |
134 |
||
Завдання для самостійної роботи.................................................................... |
|
136 |
||
6.4 |
ДВІЙКОВА АРИФМЕТИКА....................................................................................... |
|
|
137 |
6.4.1 Додавання двійкових чисел......................................................................... |
|
137 |
||
6.4.2 Представлення від’ємних чисел. ............................................................ |
|
138 |
||
|
6.4.2.1 Прямий код.................................................................................................. |
|
|
138 |
|
6.4.2.2 Обернений код........................................................................................... |
|
|
139 |
|
6.4.2.3 Додатковий код......................................................................................... |
|
|
140 |
6.4.3 Віднімання двійкових чисел . ..................................................................... |
|
142 |
||
6.4.4 Множення двійкових чисел........................................................................ |
|
143 |
||
Завдання для самостійної роботи.................................................................... |
|
144 |
||
6.4.5 Ділення двійкових чисел. .............................................................................. |
|
144 |
||
Завдання для самостійної роботи. ................................................................... |
|
146 |
||
6.5 |
ОЗНАКА ПЕРЕПОВНЕННЯ РОЗРЯДНОЇ СІТКИ ПРИ АРИФМЕТИЧНИХ |
|
||
ОПЕРАЦІЯХ. ........................................................................................................................... |
|
|
146 |
|
Завдання для самостійної роботи: .................................................................. |
|
147 |
||
6.6 |
ПРЕДСТАВЛЕННЯ ЦІЛИХ ЧИСЕЛ ......................................................................... |
|
147 |
|
6.7 |
ПРЕДСТАВЛЕННЯ ДІЙСНИХ ЧИСЕЛ. .................................................................. |
|
149 |
|
Завдання для самостійної роботи.................................................................... |
|
155 |
||
6.8 |
КЕРУВАННЯ МАШИННИМ ПРЕДСТАВЛЕННЯМ ЧИСЕЛ............................ |
155 |
||
6.9 |
ОСОБЛИВОСТІ ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ..................... |
156 |
||
7 |
РЕАЛІЗАЦІЯ |
КОНЦЕПЦІЇ |
СТРУКТУРНОГО |
|
ПРОГРАМУВАННЯ В МОВІ С ..................................................................... |
|
159 |
||
7.1 |
ОГОЛОШЕННЯ ТА ВИЗНАЧЕННЯ ФУНКЦІЙ.................................................... |
|
159 |
|
7.2 |
ФОРМАЛЬНІ ТА ФАКТИЧНІ ПАРАМЕТРИ......................................................... |
|
160 |
|
7.3 |
ФУНКЦІЇ ІЗ ЗМІННОЮ КІЛЬКІСТЮ ПАРАМЕТРІВ.......................................... |
|
162 |
|
7.4 |
РЕКУРСІЯ......................................................................................................................... |
|
|
163 |
7.5 ПАРАМЕТРИ ФУНКЦІЇ MAIN. ............................................................................. |
|
164 |
||
7.6 |
ЛIТЕРНI ВКАЗIВНИКИ ТА ФУНКЦIЇ..................................................................... |
|
165 |
|
7.7 |
ЧАС ЖИТТЯ ТА ОБЛАСТЬ ДІЇ. ОГОЛОШЕННЯ ТА ВИЗНАЧЕННЯ ......... |
166 |
||
7.8 |
КЛАСИ ПАМ’ЯТІ. ......................................................................................................... |
|
|
168 |
7.9 |
ПРИКЛАДИ ПРОГРАМ................................................................................................ |
|
|
169 |
7.9 |
ВВІД-ВИВІД С. ФАЙЛИ ТА ПОТОКИ. ................................................................. |
|
183 |
|
7.9.1 Функції вводу-виводу верхнього рівня................................................. |
|
183 |
5
7.9.2 Функції вводу-виводу консольного терміналу та порта........ |
189 |
7.9.3 Функції-вводу виводу нижнього рівня................................................. |
189 |
7.9.4 Приклади програм ........................................................................................... |
190 |
8 ОБ’ЄКТНО-ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ ТА С++. .......... |
212 |
8.1 ЕЛЕМЕНТИ КОНЦЕПЦІЇ ООП................................................................................ |
212 |
8.2 ВІД СТРУКТУР ANSI С ДО КЛАСІВ С++. ...................................................... |
214 |
8.3 ОПИС ПРОТОКОЛУ КЛАСУ. .................................................................................... |
217 |
ЗАВДАННЯ.............................................................................................................................. |
221 |
8.4 ДЕЯКІ ОСОБЛИВОСТI C++. ......................................................................... |
222 |
8.4.1 Коментарі........................................................................................................... |
222 |
8.4.2 Прототипи функцій. ..................................................................................... |
222 |
8.4.3 Операція розширення області видимості. ...................................... |
223 |
8.4.4 Оголошення в операторах. ........................................................................ |
223 |
8.4.5 Перевантаження функцій. ........................................................................ |
224 |
8.4.6 Значення формальних параметрів по замовчуванню................ |
224 |
8.4.7 Посилання та вказівники. ........................................................................... |
225 |
8.4.8 Специфікатор INLINE................................................................................. |
229 |
8.4.9 Операції NEW та DELETE ................................................................... |
229 |
8.4.10 Вказівник на void. .......................................................................................... |
230 |
8.4.11 Зв’язування із збереженням типів .................................................... |
230 |
8.4.12 Про структури та об’єднання. ........................................................... |
231 |
ЗАВДАННЯ.............................................................................................................................. |
232 |
8.5 ФУНКЦІЇ-ЧЛЕНИ КЛАСУ. ............................................................................. |
232 |
8.5.1 Функції-члени в межах та за межами формального опису |
|
класу. .................................................................................................................................... |
232 |
8.5.2 Про вказівник this............................................................................................. |
233 |
8.5.3 Перевантаження функцій-членів. Параметри по |
|
замовчуванню. ................................................................................................................ |
234 |
ЗАВДАННЯ.............................................................................................................................. |
236 |
8.6 КОНСТРУКТОРИ ТА ДЕСТРУКТОРИ. ................................................... |
237 |
8.6.1 Поняття про конструктори. .................................................................. |
237 |
8.6.2 Деструктори...................................................................................................... |
240 |
8.6.3 Конструктор копіювання. ........................................................................ |
242 |
ЗАВДАННЯ.............................................................................................................................. |
243 |
8.7 ГЛОБАЛЬНІ ТА ЛОКАЛЬНІ ОБ’ЄКТИ. ................................................. |
244 |
Глобальні об’єкти. ...................................................................................................... |
244 |
Локальні об’єкти ........................................................................................................ |
245 |
Вказівники на об’єкти .............................................................................................. |
245 |
Об’єкти-посилання ..................................................................................................... |
246 |
6
Об’єкти-результати функцій. ............................................................................ |
246 |
Масиви об’єктів .......................................................................................................... |
246 |
ЗАВДАННЯ.............................................................................................................................. |
247 |
8.8 СТАТИЧНА ПАМ’ЯТЬ ТА КЛАСИ............................................................ |
248 |
ЗАВДАННЯ.............................................................................................................................. |
251 |
8.9 НАСЛІДУВАННЯ .................................................................................................. |
252 |
8.9.1 Синтаксична реалізація наслідування ................................................ |
252 |
8.9.2 Правила доступу до полів даних ............................................................ |
253 |
8.9.3 Конструктори та деструктори в похідних класах................... |
255 |
8.9.4 Використання заміщуючих функцій-членів..................................... |
257 |
8.9.5 Похідні класи та вказівники. .................................................................... |
259 |
8.9.6 Ієрархія типів..................................................................................................... |
260 |
8.9.7 Множинне наслідування .............................................................................. |
260 |
ЗАВДАННЯ.............................................................................................................................. |
263 |
8.10 ВIРТУАЛЬНI ФУНКЦIЇ ТА КЛАСИ ........................................................ |
264 |
8.10.1 Віртуальні функції. ...................................................................................... |
264 |
8.10.2 Чисті віртуальні функції. Абстрактні класи. ........................... |
266 |
8.10.3 Віртуальні деструктори. ........................................................................ |
269 |
8.10.4 Посилання як засіб для реалізації поліморфізму ....................... |
270 |
8.10.5 Дещо про механізм віртуальних функцій....................................... |
270 |
8.10.6 Віртуальні базові класи............................................................................. |
272 |
8.10.6.1 Ієрархії класів та наслідування ................................................... |
272 |
8.10.6.2 Віртуальні базові класи ..................................................................... |
273 |
8.10.6.3 Виклик конструкторів та віртуальні базові класи............ |
274 |
ЗАВДАННЯ.............................................................................................................................. |
276 |
8.11 ДРУЗІ ............................................................................................................................ |
277 |
8.11.1 Дружні класи.................................................................................................. |
277 |
8.11.2 Дружні функції............................................................................................... |
279 |
ЗАВДАННЯ.............................................................................................................................. |
281 |
8.12 ПЕРЕВАНТАЖЕННЯ ОПЕРАЦІЙ............................................................ |
281 |
8.12.1 Перевантаження операцій. Загальний підхід............................. |
281 |
8.12.2 Перетворення типів.................................................................................... |
284 |
8.12.3 Перевантаження деяких операцій..................................................... |
287 |
8.12.3.1 Операція індексування масиву..................................................... |
287 |
8.12.3.2 Перевантаження операції виклику функції.......................... |
289 |
8.12.3.3 Операція доступу до члена класу.............................................. |
291 |
8.12.3.4 Перевантаження операцій інкремента та декремента. .. |
292 |
8.12.3.5 Перевантаження операцій управління пам’яттю |
|
(NEW,DELETE). ....................................................................................................... |
293 |
7
|
8.12.3.6 Перевантаження операції присвоювання. ............................ |
294 |
ЗАВДАННЯ : ........................................................................................................................... |
295 |
|
8.13 ШАБЛОНИ С++.................................................................................................... |
296 |
|
8.13.1 Функціональні шаблони ............................................................................. |
296 |
|
|
8.13.1.1 Визначення та використання шаблонів функцiй............. |
296 |
|
8.13.1.2 Перевантаження шаблонiв функцiї. .......................................... |
298 |
|
8.13.1.3 Cпецiалiзованi функцiї шаблона. ................................................ |
299 |
8.13.2 Шаблони класів. ............................................................................................ |
300 |
|
|
8.13.2.1 Визначення шаблонів класу ........................................................... |
300 |
|
8.13.2.2 Константи та типи як параметри шаблону............................ |
301 |
|
8.13.2.3 Використання шаблонних класів ................................................ |
302 |
|
8.13.2.4 Спецiалiзацiя шаблонiв класу. ................................................... |
303 |
ЗАВДАННЯ.............................................................................................................................. |
305 |
|
ДОДАТКОВІ ЗАВДАННЯ З С++ ..................................................................................... |
305 |
|
9 АВТОМАТНА ТЕХНОЛОГІЯ ПРОГРАМУВАННЯ........................... |
313 |
|
9.1 |
ЛЕКСИЧНИЙ АНАЛІЗ. ................................................................................................ |
314 |
9.1.1 Формалізм лексичного аналізатора. ................................................... |
314 |
|
9.1.2 Представлення в ЕОМ.................................................................................. |
315 |
|
9.2 |
ПРОГРАМУВАННЯ ЗА ДОПОМОГОЮ СКІНЧЕННИХ АВТОМАТІВ......... |
316 |
9.2.1 Скінченний автомат як формалізм..................................................... |
316 |
|
9.2.2 Основи конструювання програм з допомогою СА...................... |
318 |
|
Задачі для самостійної роботи.......................................................................... |
329 |
|
ДОДАТКИ .............................................................................................................. |
331 |
|
1 ВВIД-ВИВIД С++ ........................................................................................... |
331 |
|
1.1 |
СИСТЕМА ВВОДУ-ВИВОДУ С++. ........................................................................ |
331 |
1.2 |
ПЕРЕАДРЕСАЦІЯ ВВОДУ-ВИВОДУ...................................................................... |
337 |
1.3 |
РОЗШИРЕННЯ ПОТОКІВ ДЛЯ ТИПІВ КОРИCТУВАЧА ................................ |
337 |
1.4 |
ОПЕРАЦІЇ РОБОТИ З ПОТОКОМ ЯК ДРУЖНІ ................................................. |
339 |
1.5 |
ФОРМАТОВАНИЙ ВВІД-ВИВІД .......................................................................... |
339 |
1.5.1 Ширина поля...................................................................................................... |
340 |
|
1.5.2 Заповнюючий символ...................................................................................... |
340 |
|
1.5.3 Кількість цифр дійсних чисел .................................................................. |
341 |
|
1.5.4 Прапорці форматування............................................................................. |
341 |
|
1.5.5 Маніпулятори..................................................................................................... |
344 |
|
1.6 |
СТАН ПОТОКУ ............................................................................................................. |
345 |
1.7 |
ФАЙЛОВИЙ ВВІД-ВИВІД.......................................................................................... |
345 |
1.7.1 Конструктори файлових потокiв......................................................... |
346 |
|
1.7.2 Вiдкриття файлу ............................................................................................. |
346 |
|
1.8 |
НЕФОРМАТОВАНИЙ ВВІД-ВИВІД ........................................................................ |
349 |
8
1.9 ДЕЯКІ ФУНКЦІЇ ВВОДУ-ВИВОДУ ......................................................................... |
350 |
1.10 ФОРМАТУВАННЯ В ПАМ’ЯТІ.............................................................................. |
352 |
ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ .................................................................. |
354 |
2 УПРАВЛІННЯ ВИКЛЮЧЕННЯМИ ....................................................... |
355 |
2.2 РОБОТА З УПРАВЛІННЯМ ВИКЛЮЧЕННЯМИ МОВИ С++ ........................ |
355 |
2.2.1 Синтаксис основних конструкцій ......................................................... |
355 |
2.2.1.1 Використання try та сatch ................................................................... |
356 |
2.2.1.2 Використання throw ............................................................................... |
357 |
2.2.2 Тип виключення та конструктор копії.............................................. |
359 |
2.2.3 Пошук відповідного типу виключення ................................................ |
359 |
2.2.4 Використання terminate() та некеровані виключення............. |
360 |
2.2.5 Робота з специфікаціями виключень .................................................. |
361 |
2.2.6 Робота з непередбаченими виключеннями ...................................... |
361 |
2.2.7 Робота з конструкторами та виключеннями .............................. |
362 |
2.2.8 Динамічні об’єкти ........................................................................................... |
363 |
2.2.9 Передача значень з конструктора та деструктора.............. |
365 |
2.2.10 Робота з ієрархіями виключень ........................................................... |
365 |
2.2.11 Робота з специфічними класами виключень................................ |
366 |
2.2.11.1 xmsg ............................................................................................................... |
366 |
2.2.11.2 xalloc.............................................................................................................. |
367 |
2.3 СТРУКТУРНЕ УПРАВЛІННЯ ВИКЛЮЧЕННЯМИ ............................................. |
369 |
2.3.1 Використання кадрованого управління виключеннями |
|
(_try/_except).................................................................................................................... |
369 |
2.3.1.1 Синтаксис ..................................................................................................... |
369 |
2.3.1.2 Функція RaiseException() .................................................................... |
369 |
2.3.1.3 Фільтруючий вираз ................................................................................. |
370 |
2.3.2 Використання завершуючих обробників |
|
виключень(_try/_finally) ............................................................................................ |
371 |
ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ .................................................................. |
373 |
3 ДОВІДНИК ФУНКЦІЙ С ............................................................................ |
375 |
ЛІТЕРАТУРА. .......................................................................................................... |
443 |
9
ВСТУП
Підвищення внутрішнього інтелекту ЕОМ - засіб їхнього вдосконалювання В.М.Глушков
Важливим етапом в розвитку технології програмування стало створення та досить широке поширення мови програмування С++. Мова програмування С++ зберігає основні типи даних, операції, синтаксис операторів мови С (про це свідчить сама назва мови). Водночас, це зовсім інша мова, яка ввела в практику програмування новий технологічний підхід - об'єктно-орієнтоване програмування. Введення в практику програмування об'єктно-орієн- тованої парадигми дозволяє значно підвищити рівень технології створення програмних засобів, скоротити затрати на розробку програм, їх повторне використання, розширити інтелектуальні можливості ЕОМ.
Великий внесок у створення даної парадигми внесли У.Далл та Б.Мюрхарг, які розробили в 60-х роках мову моделювання дискретних систем Сімула-67. Ця мова включила в себе базові концепції ООП. Велике значення у розвитку даного напряму мали роботи по розвитку концепції абстрактних типів даних Б.Лискова, Н.Вірта, Д.Парнаса та ін. Однак, найбільш повно та цілісно об'єктно-орієнтована парадигма була реалізована в мові Smalltalk-80, яка була розроблена в 70-ті роки в науковому центрі Раlо Аltо фірми Хеrох під керівництвом А.Гольдберга. По суті, Smalltalk-80 являв собою мову деякої абстрактної машини, яка мала об'єктно-орієнтовану пам'ять. Маніпулювання з елементами пам'яті (об'єктами) ґрунтувалось на використанні механізму повідомлень, які посилаються об'єктам. Крім того, ця абстрактна машина підтримувала графічно-орієнтований дружній інтерфейс з користувачем. Ця тріада мови Smalltalk-80 стала революційним поворотом в технології програмування. Використання об'єктів дозволило по-перше, конструювати адекватні інформаційні зображення реальних проблемних областей, використовуючи прийняті для цих областей поняття та семантичні знання, по-друге, створювати ідеальні абстрактні моделі реального світу , формально задаючи закони його існування, по-третє, надати можливість безпосереднього, прямого, немовного за формою маніпулювання семантичними сутностями середовища, що моделюється (тобто, по суті,
10