
- •Передмова
- •Розділ 1 об'єктний підхід у програмуванні
- •1.1.Причини виникнення ооп
- •1.1.1.Складність об'єкта дослідження
- •1.1.2.Складність процесу розробки програмного забезпечення
- •1.1.3.Складність опису окремих елементів
- •1.2.Парадигма ооп
- •1.3.Історія розвитку ооп
- •Розділ 2 об'єкти й класи: інкапсуляція
- •2.1.Структура об'єкта й класу
- •2.2.Особливості опису класів у мовах ооп
- •2.2.1.Опис класів в SmallTalk
- •2.2.3.Опис класів в Delphi
- •2.2.4.Опис класів в Java
- •2.3.Поля даних та їх ініціалізація
- •2.3.1.Визначення полів даних в SmallTalk
- •2.3.3.Визначення полів даних в Delphi
- •2.3.4.Визначення змінних в Java
- •2.4.Доступ до даних
- •2.4.1.Доступ до даних в SmallTalk
- •2.4.3.Доступ до даних в Delphi
- •2.4.4.Доступ до даних в Java
- •2.5.Спеціальні змінні
- •2.5.1.Спеціальні змінні в SmallTalk
- •2.5.3.Спеціальні змінні в Java
- •2.5.4.Спеціальні змінні в Delphi
- •2.6.Посилання
- •2.6.1.Визначення посилань в SmallTalk, Delphi і Java
- •2.7.Методи
- •2.7.1.Загальна схема визначення методу
- •2.7.2.Визначення методів в SmallTalk
- •2.7.4.Визначення методів в Delphi
- •2.7.5.Визначення методів в Java
- •2.8."Дружні" методи
- •2.8.2.Аналог дружніх функцій в Delphi
- •2.9.Конструктори й деструктори
- •2.9.1.Конструктори й деструктори в SmallTalk
- •2.9.3.Конструктори й деструктори в Delphi
- •2.9.4.Конструктори й деструктори в Java
- •2.10.Властивості
- •2.10.1.Властивості в Delphi
- •2.10.2.Властивості в Java
- •2.12.Абстрактні методи
- •Розділ 3 успадкування
- •3.1.Форми успадкування
- •3.2.Успадкування в SmallTalk
- •3.3.1.Віртуальне успадкування
- •3.3.2.Правило сумісності типів
- •3.3.3.Використання конструкторів і деструкторів при успадкуванні
- •3.4.Успадкування в Delphi
- •3.4.1.Ієрархія класів в Delphi
- •3.4.2.Створення нових компонентів
- •3.5.Успадкування в Java
- •3.5.1.Використання ключового слова super
- •3.5.2.Клас Object
- •Розділ 4 поліморфізм
- •4.1.Віртуальні методи
- •4.2.1.Механізм пізнього зв'язування
- •4.2.2.Таблиця віртуальних методів
- •4.3.Поліморфізм в Delphi
- •4.3.1.Заміщення віртуальних і динамічних методів
- •4.3.2.Приведення типів
- •4.4.Поліморфізм в Java
- •4.5.Поліморфізм в SmallTalk
- •5.1.Потокові класи
- •5.1.1.Ієрархія потокових класів
- •5.1.2.Форматоване введення/ виведення
- •5.1.3.Маніпулятори
- •5.1.4.Введення/виведення у файл
- •5.2.Контейнерні класи
- •5.2.1.Ітератори
- •5.2.2.Визначення контейнерних класів
- •5.2.3.Стандартні контейнерні класи
- •5.3.1.Параметиізовані класи (шаблони)
- •5.3.2.Ітератори stl
- •5.3.3.Узагальнені алгоритми
- •Література
- •Додатки лабораторна робота №1 об'єкти й повідомлення в smalltalk
- •Лабораторна робота №2 класи й методи в smalltalk
- •Листинг 3.1
- •Листинг 3.2
- •Листинг 3.3
- •Лабораторна робота 5 компоненти в delphi
- •Лабораторна робота 6 меню й вікна в delphi
- •Лабораторна робота 7 розробка меню в java
- •Лабораторна робота 8 робота з подіями в java
1.3.Історія розвитку ооп
Першою мовою, у якому знайшли своє відображення ідеї побудови програм на основі об'єктів, стала мова Simula -67, що була розроблена в 1967 році норвезькими вченими У. Далом, Б. Мюрхаугом і Б. Ньюгордом. Основою розробки послужила мова Алгол-60, що був доповнений новими поняттями класу, об'єкта й успадкування.
Концепції, закладені в мові Simula -67, одержали свій розвиток у серії мов SmallTalk - 72, 74, 76, 78, 80, розроблених фірмою Xerox. SmallTalk був чисто об’єктно-орієнтованою мовою, у якій навіть примітивні типи (константи, цілі, дійсні числа й т.п.) були об'єктами. Завдяки розвинутій графіці, у свій час, SmallTalk був зручним засобом для створення комп'ютерних ігор.
В 1971 році Николас Вирт починає розробку мови Object Pascal, що надалі склала основу Delphi. У цей же час фірмою Borland розвиваються й інші версії Pascal (Turbo Pascal 5.0, BP 7.0), в які включаються можливості ООП.
Мова С++ був розроблений в Bell Labs Б’ярном Страуструпом на початку 80-х років минулого сторіччя. І хоча він успадкував синтаксис мови З, його не можна вважати простим розширенням С. С++ має всі властивості, властивими ООП, споконвічно. Зараз існує безліч версій мови С++, розроблених різними фірмами, які з успіхом застосовуються в різних програмних системах. Але особливим успіхом ця мова користується на системному рівні.
Нарешті, в 90-і роки фірма Sun Microsystem випустила мову Java, що ґрунтувався на технологічних підходах SmallTalk, але мав синтаксис C++. Зростаючи з проекту, націленого на програмування мікроприставок, Java дуже швидко завоював визнання, насамперед завдяки своєї багатоплатформеності. За рахунок використання віртуальної Java-машини (успадковані ідеї SmallTalk), написані один раз програми на Java здатні виконуватися в різних обчислювальних середовищах. Особливо широко застосування Java для створення Web-орієнтованих систем і застосувань.
У наш час мови ООП є основним інструментом в руках програмістів, дозволяючи досить швидко створювати складні програмні системи, що відрізняються високою надійністю.
Контрольні питання:
У чому полягає складність програм?
Які методи застосовуються для зменшення складності програм?
У чому суть керування даними?
Намалюйте дерево обчислень виразу (sinx + cos2x)(sinx2 –cosx2) при керуванні даними.
Назвіть основні мови ООП.
Розділ 2 об'єкти й класи: інкапсуляція
2.1.Структура об'єкта й класу
Інкапсуляція є однієї з базових концепцій ООП. Дослівно в Webster’s New Word Dictionary слово інкапсуляція трактується як «результат приховування як би у капсулі, уміщений в обмежений простір, ущільнення». В ООП інкапсуляція проявляється в структурі об'єкта, що ставиться у відповідність деякій концептуальній сутності, яка відноситься до предметної області (завдання).
О
Стан
(набір даних)
б'єкти
предметної області характеризуються
деяким станом і поведінкою.
Поведінка
(методи)
Рис. 2.1. Структура об'єкта
На основі абстракції відбувається формування подання про якості, або властивості об'єкта, шляхом видалення деяких з них. Це дозволяє із усієї множини властивостей об'єкта, що характеризують його стан і поведінку виділити головні з погляду на завдання, що розв'язується. В результаті, стану об'єкта буде поставлений у відповідність набір змінних (даних), а поведінці – набір методів або функцій, що виконуються об'єктом.
Таким чином, ми одержуємо об'єднання даних і методів у єдиній структурі, причому стан об'єкта, що задається його даними, інкапсулюється всередині його поведінки, що обумовлена методами. Це означає, що доступ до даних об'єкта можна одержати тільки через його методи. Дані втілюють у собі абстракцію стану, а методи – абстракцію поведінки.
Примітка незважаючи на те що в деяких мовах ООП існує можливість безпосереднього доступу до даних хороший стиль програмування має на увазі що працювати з даними треба тільки через методи Об'єкт повинен самостійно змінювати свій стан у відповідь на отримані повідомлення. Тільки так можна досягти дійсного керування даними.
Т
аким
чином, об'єкт у мовах ООП, як структура
даних, являє собою іменований програмний
компонент який
містить власні локальні дані й здатен
виконувати певні дії над ними за допомогою
методів – підпрограм, описаних усередині
класу Виклик
необхідного методу здійснюється
передачею повідомлення
як правило однойменного
методу
Для прикладу на рис. 2.2. наведене умовне подання об'єкта «Точка » як структури даних.
Рис. 2.2. Подання об'єкта як структури даних
Стану об'єкта відповідає набір полів даних. Розрізняють стани:
статичний (визначається складом полів даних);
динамічний (визначається значеннями полів даних.
Динамічний стан визначає індивідуальність об'єкта. Як структура даних об'єкт від створення до знищення постійно існує в пам'яті.
Для визначення об'єктів, що мають однакову структуру (набір полів даних або методів) використовується абстрактний тип даних – клас. Всі об'єкти однієї структури є об'єктами одного класу.
В описі класу виділяються:
Інтерфейс - дає зовнішнє подання про об'єкт. Показує, які властивості відрізняють об'єкт даного класу й на які повідомлення він здатний реагувати. Інтерфейс включає опис даних об'єкта й перерахування його методів.
Реалізація - визначає внутрішні особливості поведінки об'єкта: те, яким чином об'єкт реагує на повідомлення, що посилають йому.
Примітка: поділ інтерфейсу й реалізації у визначенні об'єкта дозволяє повною мірою застосувати системний підхід до побудови програм. Завдяки наявності інтерфейсу об'єкт розглядається як «чорний ящик», що має входи й виходи, через які він взаємодіє зі своїм оточенням. Заміна будь-якого об'єкта програмної системи без зміни його інтерфейсу забезпечує збереження працездатності системи.
У різних мовах ООП поділ на інтерфейс і реалізацію не завжди явно є присутнім у визначенні класу, однак це не означає, що такого поділу немає взагалі.