Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
derzh.docx
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
10.8 Mб
Скачать

13. Парадигма об’єктно-орієнтованого програмування та основні його принципи, їх зміст.

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

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

ООП грунтується на трьох основних принципах:

Інкапсуляція, поліморфізм, успадкування.

об’єкти можна розглядати як деяку сукупність даних і способів роботи з ними. Дані можна розглядати як поля запису – характеристики поб’єкта. Користувач та об’єкти програми повинні мати можливість читати дані об’єкта , певним чином їх обробляти та записувати в об’єкт нові занчення. Тут найважливіше значення має принцип інкапсуляції і приховування даних, який означає, що зовнішнім об’єктам і користувачу прямий доступ до даних, як правило, заборонено.

Для реалізації приховування даних в об’єкті зазвичай визначають процедури та функції , які забезпечують необхідні операції з даними: читання обробку, запис. Ці функції і процедури називають методами. Сукупність даних і методів їх читання та запису називається властивостями об’єкта. Середовищем взаємодії об’єктів є повідомлення, які генеруються у результаі виникнення різних подій.

Для організації динамічного розподілу пам’яті до всіх об’єктів закладено методи їх створення – конструктори та методи їх знищення – деструктори.

Типи об’єктів, зокрема , компонентів бібліотек системи розробки, застосувань формуються у вигляді класів (класи – це типи, обумовлені користувачем, де описуються властивості об’єкта, його методи і події, на які він може реагувати. Якби при створенні нового класу все доводилось починати з нуля, то ефективність цього заняття була би мінімальна. Для цього існує важливий принцип ООП – успадкування.

Новий клас може успадкувати властивості, методи, події батьківського класу, на основі якого він створюється.

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

14. Порівняльний аналіз статичних та віртуальних методів в об’єктно-орієнтованому програмуванні, їх особливості. Призначення та правила формування конструкторів та деструкторів.

Віртуальна функція – це така функція, яка оголошується в базовому класі з

використанням ключового слова virtual і перевизначається в одному або декількох

похідних класах. Таким чином, кожен похідний клас може мати власну версію віртуальної функції. Віртуальні функції у поєднанні з похідними типами дають змогу мові програмування C++ підтримувати динамічний поліморфізм. Він для об'єктно-орієнтованого програмування є важливим з однієї причини: дає змогу деякому узагальненому класу визначати функції, які використовуватимуть усі похідні від нього класи, причому похідний клас може визначити власну реалізацію усіх або деяких цих функцій.

Під час обговорення об'єктно-орієнтованих мов програмування зазвичай використовують два терміни: раннє зв'язування (early binding) і пізнє зв'язування (late binding). У мові програмування C++ ці терміни пов'язують з подіями, які відбуваються при компілюванні та у період виконання програми відповідно.

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

назвати ефективність: воно працює швидше від пізнього і вимагає менших витрат пам'яті. Його основний недолік – відсутність гнучкості. Пізнє зв'язування означає, що точне рішення про виклик функції буде ухвалено у процесі виконання програми. Пізнє зв'язування у мові програмування C++ досягається за рахунок застосування віртуальних функцій і похідних типів. Перевага пізнього зв'язування полягає у тому, що воно забезпечує великий ступінь гнучкості. Його можна застосовувати для підтримки загального інтерфейсу і давати змогу при цьому різним об'єктам, які використовують цей інтерфейс, визначати їх власні реалізації Але до його недоліків можна віднести, хоч і незначне, але все таки пониження швидкості виконання програм та збільшення накладни витрат пам’яті.

Функція-член класу, основна мета якої – ініціалізація змінних об’єкту цього класу або розподіл пам`яті для них, називається конструктором.

В С++ ознакою конструктора є співпадання імені конструктора з іменем класу. Конструктор присутній завжди, якщо його не визначити, він формується автоматично за замовчуванням. Конструктори не викликаються явно, а викликаються неявно під час створення чи формування об’єктів.

Другою важливою функцією-члену класу є деструктор. Він знищує об’єкт даного класу. Ім’я деструктора співпадає з іменем класу, але йому передує символ «~».

#include <iostream.h>

class empty{

char *obj_name;

public:

empty(char* name){

сout<<”Створено об’єкт з ім’ям”;

сout<<name<<”клас empty\n”;

obj_name = name};

~empty(){

cout<<”Об’єкт ”<<obj_name;

cout<<”Знищено”/n”;}

}one(“one”)

void main(void){

empty second(“second”);

}

Створено об’єкт one класу empty

Створено об’єкт second класу empty

Об’єкт second знищено

Об’єкт one знищено

Існує низка правил використання конструктора

Правила формування конструкторів:

1)Конструктор не повертає жодного значення, навіть типу void. Не можна одержати вказівник на конструктор.

2) Клас може містити низку конструкторів з різними параметрами для різних видів ініціалізації.

3)Конструктор без параметрів називається конструктором за замовчуванням.

4)Параметри конструктора можуть мати будь-який тип крім цього ж самого класу.

5)Можна задати параметри конструктора за замовчуванням, їх може містити тільки один конструктор. Конструктори не успадковуються.

6) Конструктори не можуть мати модифікатори static або virtual.

7) Конструктори глобальних об’єктів викликаються до виклику функції main(). Локальні об’єкти створюються, як тільки стає активною область їх дії.

8)Локальні та статичні об’єкти створюються в порядку розміщення їх оголошень, а статичні об’єкти лише один раз.

9)Конструктор не може видати повідомлення про помилку ініціалізації, в зв’язку з тим,що він не повертає значення. Для організації повідомлення про помилку з конструктора можна скористатися механізмом обробки виняткових ситуації.

Існує декілька правил використання деструкторів.

1)Деструктор не має аргументів, навіть типу void.

2) Деструктор не повертає значення, навіть типу void.

3)Деструктор не успадковується , при відсутності деструктора у класі, що успадковується він не передається з базового класу, а формується компілятором за замовчуванням.

4)Атрибут доступу деструктора за замовчуванням public.

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