You are on page 1of 31

Об'є́ктно-орієнто́ ване

програмува́ ння
Лекція 4
Основні властивості ООП
План лекції
1. Історія розвитку об’єктно-орієнтованого
підходу у програмуванні
2. Уява про алгоритмічну і ОО декомпозицію
3. Основні визначення
4. Основні властивості ООП
5. Абстрагування
6. Інкапсуляція
7. Протокол опису класу
1. Історія розвитку об’єктно-орієнтованого підходу у
програмуванні
Уява про різні парадигми програмування
Імперативні та декларативні мови програмування.
Загальна тенденція розвитку програмування полягає в
зміщенні акцентів від програмування окремих деталей до
програмування крупніших компонентів, перехід від
імперативних мов (ті, що вказують комп’ютеру, що робити)
до декларативних (ті, що описують ключові абстракції
проблемної області).
Від обчислення формул до створення загальних
алгоритмів, від рознесення понять данні і алгоритми роботи з
цими даними до створення окремих функцій, що ці
алгоритми реалізують і механізму передачі параметрів і
нарешті об’єднання наборів функцій в окремі модулі.
❑ Література: Граді Буч. Объектно-ориентированный анализ и
проектирование с примерами приложений на С++
Об’єкти належать певним класам.
Об’єкти обробляють повідомлення у відповідності до
методів, заданих в описі класу. Об’єкти також мають змінні
стану, які визначені в описі класу.
Ці змінні можуть мати однакові чи різні значення в різних
екземплярах об’єктів даного класу.
Об'є́ктно-орієнто́ ване програмува́ ння —
одна з парадигм програмування, яка розглядає
програму як множину «об'єктів», що взаємодіють
між собою.
Основу ООП складають чотири основні
концепції: інкапсуляція, успадкування,
поліморфізм та абстракція. Однією з переваг
ООП є краща модульність програмного
забезпечення. Вікіпедія
Основна ідея полягає у тому, що об'єкт зберігає
інформацію як про свою структуру, так і про свою
поведінку, тобто про те які дії він може виконати і
як саме він буде їх виконувати, коли отримає
відповідне повідомлення.
Отже, об'єкт — це об'єднання даних і алгоритмів,
що обробляють ці дані.
3. Основні визначення
Об’єкт – це інкапсульована абстракція, яка включає
інформацію про стан і чітко визначену множину протоколу
доступу (повідомлення, які обробляє об’єкт).
Повідомлення – це спеціальний символ, ідентифікатор або
ключове слово з або без параметрів, яке представляє виконувану
об’єктом дію.
Клас – представляє певний тип об’єктів і задається за
допомогою опису класу, яке визначає змінні стану і протокол
доступу до об’єктів даного класу. Класи організуються
ієрархічно, при цьому підкласи наслідують властивості
батьківських класів. В деяких ОО мовах класи – це також і об’
єкти.
Екземпляр об’єкта. Об’єкт належить до якого-небудь класу і
властивості екземпляра об’єкта визначені описом класу.
Метод. Існує для кожного повідомлення, визначеного для
деякого класу. Метод визначає реакцію об’єкта на повідомлення.
Може складатися з ряду виразів і використовувати протокол
іншого класу.
В С++ кожна функція – член має тип значення, що
повертається. Це може бути клас, С-тип, або вказівник на
кожний з цих типів.
Всередині функції – члена завжди є посилання на приймач
повідомлення – this (self в інших ОО мовах) – це
вказівник на даний об’єкт.
4. Основні властивості ООП
Основні складові об’єктно-орієнтованого
підходу наступні:
✔ Абстрагування
✔ Інкапсуляція
✔ Ієрархічність
✔ Поліморфізм
Без жодної з цих властивостей систему не
можна вважати об’єктно-орієнтованою.
Опис абстракцій
В мовах програмування конкретним втіленням певної
концепції (абстракції) є тип. Наприклад, тип float
разом з операціями +, -,*,/ – втілення математичної
концепції дійсного числа.
Метою введення концепції класів було надання
програмісту засобів створення нових типів, які так само
зручні в використанні, як і вбудовані.
Програми, типи в яких відповідають концепціям
предметної області, для якої вони розробляються, легше
розуміти і зручніше використовувати.
Насправді задати новий, користувацький тип можна
не тільки за допомогою класу, можна скористатись
засобом typedef, enum, struct в С++, пізніше ви
познайомитись з інтерфейсами й іншими конструкціями
суто об’єктно-орієнтованих мов програмування.
Приклад. Визначимо абстракцію Дата.
class Date{
//представлення
int day,month,year;
public:
//інтерфейс
void init_date(int dd,int mm,int yy);
void add_year (int n); // додати n років
void add_month (int n); // додати n місяців
void add_day (int n); // додати n днів
void show_date();
};
Така конструкція називається визначенням або оголошенням
класу, оскільки вона утворює новий тип.
Повний опис класу складається з трьох частин:
(1) оголошень полів даних,
(2) прототипів функцій-членів
(3) визначень функцій-членів.
7. Протокол опису класу
Поля даних – екземпляри змінних стану, їх
оголошують всередині класу, вони характеризують об’єкт
класу, всі екземпляри об’єктів даного класу будуть мати
одну й ту ж саму множину змінних стану.
Функції-члени – це методи, які обробляють
повідомлення, що передаються об’єктам класів.
Прототипи (оголошення) цих функцій повинні
знаходитись всередині опису класу, визначення (опис) їх
може бути і всередині і за межами класу. Оскільки різні
класи можуть мати функції-члени з однаковими назвами,
при описі їх за межами класу необхідно вказати ім’я класу
і скористатись оператором дозволу області видимості,
наприклад, так:
void Date:: init_date(int dd,int mm,int yy){
day=dd; month=mm; year=yy; }
В оголошенні класу використовують мітки public,
private та protected, які визначають права доступу до
відповідних розділів класу (відкритий, закритий,
захищений).
Поля даних та функції-члени в закритому розділі
доступні тільки об’єктам даного класу (і друзям класу), в
захищеному – для об’єктів даного класу та його нащадків,
у відкритому – і для інших функцій.
Порядок розташування та кількість поміток public,
private або protected в описі класу – довільна, але для
зручності сприйняття опис класу ділять на три (або дві)
відповідні частини. За умовчанням тип доступу private.
В структурі за умовчанням – public.
Звернутися до закритого поля класу напряму не
дозволить компілятор, тому: помилк
Date d; d.add_day(5); d.day=5; а
правильн
о
Статичні члени є частиною класу, а не об’єкту.
Існує лише одна копія статичної змінної одразу для всіх
об’єктів (кожний об’єкт має свою копію об’єктних
змінних).
Статичні функції-члени працюють тільки із статичними
членами класу (нестатичні функції-члени можуть
змінювати статичні члени класу) .
Приклад оголошення:
class Date{
int d, m, y;
static Date today;
public:
Date (int dd = 0, int mm = 0, int yy = 0);

static void set_today(int, int, int);
}
Date Date:: today (16, 12, 1770);
Деструктори
Конструктори ініціалізують об’єкт, тобто створюють
середовище, в якому працюють функції-члени. Інколи
це означає захоплення певних ресурсів (пам’ять, файл)
– які мають бути звільнені після їх використання. Тобто
деяким класам необхідна функція, яка б гарантувала
знищення об’єкту. Вона називається деструктором.
Синтаксис оголошення деструктора:
~TClassName([список параметрів]);
На відміну від конструкторів деструктор в класі
може бути лише один (або жодного, якщо влаштовує
той, що надається за умовчанням).
На відміну від конструкторів, деструктор явно не
викликають, він буде викликаний автоматично.

You might also like