- •Дисципліна: Об’єктно-орієнтоване програмування (ооп) Лекція 1. Вступ до ооп
- •1. Від процедурного програмування до об’єктного
- •1.1. Структурне програмування
- •1.2. Модульне програмування
- •1.3 Програмування, кероване подіями
- •2. Об’єктно-орієнтоване програмування
- •3 Чисто об'єктно-орієнтовані і гібридні мови програмування
1.2. Модульне програмування
Модульне програмування передбачає виділення групи підпрограм, які використовують одні й ті самі глобальні дані, у окремі модулі (бібліотеки підпрограм), наприклад, модуль графічних ресурсів, модуль підпрограм виводу на принтер. Зв'язок між модулями здійснюється через спеціальний інтерфейс, а доступ до реалізації модуля (тіло підпрограми та деякі «внутрішні» змінні) заборонено.
Цю технологію підтримують сучасні версії мов Pascal та С (С++), мови Ада та Modula.
Використання модульного програмування суттєво спрощує виконання розробки програми декількома програмістами, кожен з яких розроблює свої модулі. Внутрішня організація модулів схована від останніх і тому може змінюватися незалежно. Взаємодія модулів здійснюється через спеціальні модульні інтерфейси. Крім того, модулі у майбутньому можуть використовуватись у інших розробках, що збільшує продуктивність роботи програмістів.
Практика програмування показує, що структурний підхід у поєднанні з модульним програмуванням дозволяє отримати достатньо надійні програми, розмір яких не перевищує 100000 операторів. Вузьким місцем модульного програмування є те, що помилка у інтерфейсі коли викликається підпрограма виявляється тільки при виконанні програми ( при роздільній компіляції модулів виявити ці помилки раніше неможливо ). При збільшенні розміру програми більш ніж 100000 операторів найчастіше зростає складність зв’язків між модульними інтерфейсами, і передбачити взаємодію окремих частин програми стає практично неможливим.
Прагнення зменшити кількість зв’язків між окремими частинами програми привело до появи нових технологій програмування.
1.3 Програмування, кероване подіями
З появою ОС Windows отримало розвиток програмування, кероване подіями.
Замість того щоб чекати повного завершення введення і обробки одного набору даних, і лише потім послідовно переходити до очікування наступного, в системі організується цикл постійного опитування черги подій, що поступають ззовні.
Таким чином, програма в стилі програмування керованого подіями складається з ряду невеликих прикладних програм, так званих обробників подій, які запускаються у відповідь на появу цих подій, і диспетчера, що використовує чергу необроблених подій, викликає обробники подій і імітує середовище, кероване перериваннями.
Під подією в мові програмування звичайно розуміють спосіб включення фрагмента в програмний код з метою зміни поведінки програми.
Як тільки відбувається зміна середовища обчислень, які цікавлять розробника або користувача програмного забезпечення, активізується подія і виконується відповідний фрагмент коду.
Програмування кероване подіями – найбільш поширена сучасна технолгія програмування, підтримувана операційними системами (ОС) і реалізована в мовах програмування (С++, Visual Basic, C#) та інших.
Структурне, модульне, програмування, кероване подіями утворили фундамент ООП.
2. Об’єктно-орієнтоване програмування
Наступним кроком була ідея розділення програми на модулі так, щоб дані описували структуру реально існуючого у відповідній предметній області об’єкта, а процедури - його поведінку: дії доступні для цього об’єкта. Тоді поведінка системи забезпечувалась би взаємодією її складових – об’єктів.
Застосування об’єктної декомпозиції перенесло процес проектування і програмування складної системи у сферу реально існуючих об’єктів у тій предметній області, для якої цю систему розробляли. Це значно спрощувало проектування, адже полегшувало взаємодію програміста, який мав цю систему реалізувати, з постановником завдання – спеціалістом у предметній області, але не програмістом, а також і самі процеси програмування, пошуку помилок і модифікування.
Так виникло об’єктно-орієнтоване програмування.
Визначення. Об'єктно-орієнтоване програмування (ООП) – технологія, заснована на представленні предметної області у вигляді системи взаємозв'язаних абстрактних об'єктів і їх реалізацій..
Зараз в ООП домінують два стилі – програмування, базоване на класах (class-based programming) і програмування, базоване на прототипах (prototype-based programming) – відносно новий напрям ООП.
Програмування, базоване на класах. На відміну від процедурного програмування, в якому дані і функції їх обробки не зв'язані, в ООП визначена нова структура даних - клас - абстрактний тип, в якому окрім даних містяться функції їх обробки (методи).
Розглянемо основні поняття ООП: об'єкт, клас, властивість і метод.
Кожний об'єкт в ООП має свій тип (клас).
Клас представляє собою абстрактний тип даних, який має:
Поля – атрибути об'єкту.
Властивості - параметри об'єкту (значення його атрибутів).
Методи - дії, які можна виконувати над об'єктом цього типу, або які сам об'єкт може виконувати (процедури та функції).
Події - повідомлення, які посилає об'єкт (або посилаються об'єкту) при зміні стану.
Кожний об'єкт є екземпляром деякого класу об'єктів. Один клас відрізняється від інших іменем і, звичайно, набором інтерфейсів. Інтерфейси, у свою чергу, - це набір повідомлень, які можна посилати об'єкту.
В основі об'єктно-орієнтованого програмування лежать 4 основні принципи:
Абстракція - опис взаємодії виключно в термінах повідомлень/подій в предметній області. Об'єкти надають не повну інформацію про реальні властивості предметної області. Їх моделі адекватні вирішуваній задачі, працювати з ними зручніше, ніж з низькорівневим описом усіх можливих властивостей і реакцій об'єкту.
Інкапсуляція - здатність приховування реалізації (властивостей і методів усередині класу), тобто можливість доступу до об'єкту і маніпулювання ним виключно за допомогою властивостей (get, set) і методів класу.
До основних властивостей інкапсуляції відносяться наступні:
сумісне зберігання даних і функцій (тобто властивостей і методів) усередині класу;
приховування внутрішньої інформації від користувача (що забезпечує більшу безпеку програмі) – за допомогою специфікаторів доступу private, internal;
ізоляція користувача від деталей реалізації (що забезпечує незалежність від моделі обчислень і потенційно дружній інтерфейс програми).
Спадкування - можливість породжувати один клас від іншого із збереженням всіх властивостей і методів базового класу і додавання, за потреби, нових властивостей і методів. Спадкування призначене для відображення такої властивості систем, як ієрархічність.
У мовах програмування поняття спадкування означає застосовність всіх або деяких властивостей та/або методів базового класу для всіх класів, похідних від нього. Крім того, збереження властивостей і/або методів базового класу повинне забезпечуватися і для всіх конкретизацій (тобто конкретних об'єктів) будь-якого похідного класу.
Поліморфізм – це концепція, що дозволяє мати різні реалізації для одного і того ж методу, які будуть вибиратися залежно від типу об'єкту, переданого до методу при його виклику.
В об'єктно-орієнтованому програмуванні під поліморфізмом розуміється можливість оперувати об'єктами, не володіючи точним знанням їх типів.
Питання: Які приклади поліморфізму можна навести?
Відповідь: в С++, C# перевантаження функцій – одне і те саме ім'я функції може використовуватися для передачі повідомлень об'єктам різних класів. Такі функції повинні мати різні списки параметрів.
Отже -
Класи, спадкування і поліморфізм - фундаментальні властивості, яким повинні задовольняти мови програмування, щоб підтримувати об'єктно-орієнтовану технологію програмування.
Для реалізації цих властивостей різні мови програмування використовують різні підходи.
