Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / 3. Об'єктно-орієнтоване програмування, 1.4.ppt
Скачиваний:
24
Добавлен:
30.05.2020
Размер:
108.03 Кб
Скачать

Логіка об'єктно-орієнтованого підходу. Опис класів и об'єктів. Основні елементи класу: поля, методи, вказівник 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