Логіка об'єктно-орієнтованого підходу. Опис класів и об'єктів. Основні елементи класу: поля, методи, вказівник this, конструктори, деструктори, операції. Дружні функції і класи. Вказівники на елементи класів.
ООП
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying
to produce bigger and better idiots. So far, the Universe is winning."
Rich Cook
2
Переваги і недоліки ООП
Переваги (при створенні великих програм):
використання при програмуванні понять, близьких до предметної галузі;
локалізація властивостей і поведінки об'єкту в одному місці, що дозволяє краще структурувати і відлажувати программу;
можливість створення бібліотеки об'єктів і створення програми з готових частин;
Виключення надлишкового коду за рахунок того, що повторювані дії можна не описувати;
порівняно проста можливість внесення змін в програму без зміни вже написаних частин, а в ряді випадків и без їх перекомпиляції.
Недоліки ООП:
певне зниження швидкодії програми, пов'язане з використанням віртуальних методів;
ідеї ООП не прості для розуміння, особливо практичного використання;
для ефективного використання існуючих ОО систем необхідний великий обсяг початкових знань.
3
Властивості ООП
Інкапсуляція - приховання деталей реалізації; об'єднаних даних і дій над ними.
Наслідування (успадкування) дозволяє створювати
ієрархію об'єктів, в якій об'єкти-нащадки успадковують всі властивості своїх предків. Властивості при наслідуванні повторно не описуються. Окрім успадкованих, нащадок має власні властивості. Об'єкт в C++ може мати скільки завгодно нащадків и предків.
Поліморфізм - можливість визначення єдиної за іменем дії, яку можна застосувати до всіх об'єктів ієрархії, причому
кожен об'єкт реалізує цю дію власним способом.
Клас (об'єкт) – інкпасульована абстракція з чітким протоколом доступу
4
Технологія розробки ОО програм
В процес проектування перед усіма іншими додається ще один етап - розробка ієрархії класів.
1.В предметній галузі виділяються поняття, які можна використовувати як класи. Крім класів з прикладної галузі, обов'язково з'являються класи, пов'язані з апаратною частиною і реалізацією.
2.Визначаються операції над класами, що вподальшому стануть методами класу. Їх можна розбити на групи:
-пов'язані з конструюванням і копіюванням об'єктів;
-для підтримки зв'язків між класами, що існують в прикладний галузі;
-дозволяючі представити роботу с об'єктами в зручному вигляді.
3.Визначаються функції, які будуть віртуальними.
4.Визначаються залежності між класами.
Процес створення ієрархії класів - ітераційний. Наприклад, можна в двох класах виділити загальну частину в базовий клас і зробити їх похідними.
Класи мають як можна ближче відповідати обєктам |
|
з предметної галузі, що моделюються. |
5 |
Опис класу
class <імя>{ [ private: ]
<опис прихованих елементів> public:
<опис доступних елементів>
};
Поля класу:
можуть мати довільний тип, крім типу цього ж класу (але можуть бути вказівниками або посиланнями на даний клас);
можуть буть описані з модифікатором const;
можуть бути описані с модифікатором static, але не як auto, extern и register.
Ініціалізація полів при описі не допускається.
Класи можуть бути глобальними і локальними. |
6 |
Локальні класи
всередині локального класу забороняється використовувати автоматичні змінні з області, в якій він описаний;
локальний клас не може мати статичних елементів;
методи цього класу можуть бути описані лише всередині класу;
якщо один клас вкладено в інший, вони не мають якихось особливих прав доступу до елементів один одного.
7
Приклад опису класу
class monstr{
int health, ammo;
public:
monstr(int he = 100, int am = 10)
{ health = he; ammo = am;} void draw(int x, int y, int scale, int position); int get_health(){return health;}
int get_ammo(){return ammo;}
};
void monstr::draw(int x, int y, int scale, int position)
{ /* тіло методу */ }
--------
inline int monstr::get_ammo(){return ammo;}
8
Описание объектов
monstr Vasia;
monstr Super(200, 300); monstr stado[100];
monstr *beavis = new monstr (10); monstr &butthead = Vasia;
Доступ до елементів об'єкту
int n = Vasia.get_ammo(); stado[5].draw;
cout << beavis->get_health();
9
Константні об'єкти і методи
Константний об'єкт:
const monstr Dead (0,0);
Константний метод:
int get_health() const {return health;}
Константний метод:
оголошується з ключовим словом const після списку параметрів;
не може змінювати значення полів класу;може викликати лише константні методи;
може бути викликаним для будь-яких (не лише |
|
константних) об'єктів. |
10 |
|