You are on page 1of 37

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

програмування
Максим Михайлович Древаль
m.dreval@kpi.ua

Кафедра математичних методів системного аналізу (ММСА)


Інститут прикладного системного аналізу
НТУУ «КПІ ім. І.Сікорського»

Весняний семестр 2020/21


Старт курсу — 06 лютого 2021

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 1
Об’єктно-орієнтоване програмування

Рейтингова система оцінювання (РСО)

№ Вид роботи Бали Бали

1 Лабораторна робота 1 10 10
2 Лабораторна робота 2 10 10
3 Лабораторна робота 3 10 10
4 Лабораторна робота 4 10 10
5 Модульний тест 1 10 10
6 Модульний тест 2 10 10
7 Іспит (екзамен) – 40
8 Семестрова робота * 40 –
100 100

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 2
Основи теорії
обчислювальної складності

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 3
Складність

Складність

складність предметної області складність реалізації

➢ Принцип абстрагування (за Бучем) дозволяє виділити суттєві


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

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 4
Розробка алгоритму

Алгоритм — однозначно трактована процедура


розв’язання задачі, яка складається зі скінченої
послідовності точно визначених кроків (операцій),
для виконання кожної з яких вимагається
скінченний об’єм оперативної пам’яті і
скінченний час.

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 5
Розробка алгоритму
Вимоги до алгоритму

для кожної можливої ситуації задана


Однозначність
однозначно трактована послідовність дій, які
(детермінованість)
забезпечують однозначність результату

Фінітність алгоритм завершується після скінченної


(скінченність) кількості кроків

мінімізація об’єму проміжної інформації, яку


Мала зв’язність необхідно зберігати під час виконання
програми

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 6
Розробка алгоритму
Вимоги до алгоритму (продовження)

при деяких некоректних діях або помилках


Само-
алгоритм повинен мати відповідну перевірку і,
контрольованість
якщо можливо, корекцію

алгоритм повинен містити чітко визначені


фрагменти, які вирішують стандартні задачі
Структурованість або використовуються багаторазово, та
допускати звернення до цих фрагментів з
різними початковими даними

можливість застосування для вирішення будь-


Масовість якої задачі наданого типу чи класу

та інші…

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 7
Складність алгоритму

Приклад Створити алгоритм обчислення n-го числа послідовності


Фібоначчі:
𝐹𝑛−1 + 𝐹𝑛−2 , 𝑛>1
𝐹𝑛 = ቐ 1, 𝑛=1
0, 𝑛=0

• 𝐹30 > 106


• 𝐹100 має у своєму десятковому записі 21 цифру
• 𝐹𝑛 ≈ 20,694𝑛

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 8
Складність алгоритму
Приклад Створити алгоритм обчислення n-го числа послідовності
Фібоначчі:
𝐹𝑛−1 + 𝐹𝑛−2 , 𝑛>1
𝐹𝑛 = ቐ 1, 𝑛=1
0, 𝑛=0

функція Fib1(n):
якщо n=0: повернути 0;
якщо n=1: повернути 1;
повернути Fib1(n-1)+Fib1(n-2);

• Чи коректний цей алгоритм?


• Яким є час його роботи (в залежності від n)?
• Чи існує більш швидкий алгоритм?

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 9
Складність алгоритму

функція Fib1(n):
якщо n=0: повернути 0;
якщо n=1: повернути 1;
повернути Fib1(n-1)+Fib1(n-2);

• 𝑇 0 =1
• 𝑇 1 =2
• 𝑇 2 =3+𝑇 0 +𝑇 1 𝑇 𝑛 ≥ 𝐹𝑛 ≈ 20,694𝑛
• …
• 𝑇 𝑛 =3+𝑇 𝑛−1 +𝑇 𝑛−2

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 10
Складність алгоритму

функція Fib1(n):
якщо n=0: повернути 0;
якщо n=1: повернути 1;
повернути Fib1(n-1)+Fib1(n-2);

• Для обчислення 𝐹200 необхідно близько 2138 операцій


• Суперкомп’ютеру, який виконує 40 трильйонів операцій на секунду,
знадобиться близько 292 секунд
• Час роботи алгоритму зростає експоненційно зі збільшенням n

експоненційний алгоритм 𝑇 𝑛 ≥ 1,6𝑛

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 11
Складність алгоритму
Дерево рекурсивних викликів алгоритму Fib1:

𝐹𝑛

𝐹𝑛−1 𝐹𝑛−2

𝐹𝑛−2 𝐹𝑛−3 𝐹𝑛−3 𝐹𝑛−4

𝐹𝑛−3 𝐹𝑛−4 𝐹𝑛−4 𝐹𝑛−5 𝐹𝑛−4 𝐹𝑛−5 𝐹𝑛−5 𝐹𝑛−6

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 12
Складність алгоритму

функція Fib2(n):
якщо n=0: повернути 0; поліноміальний алгоритм
якщо n=1: повернути 1;
створити масив f[0…n];
f[0] ← 0; f[1] ← 1;
для i від 2 до n:
f[i] ← f[i-1] + f[i-2];
повернути f[n];

• 𝑇 0 =1
𝑇 𝑛 ≈𝑛
• 𝑇 1 =2
• 𝑇 2 =3
• …
• 𝑇 𝑛 =𝑛+1

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 13
Складність алгоритму

Часова складність алгоритму — функція розміру


(довжини) вхідних даних, яка характеризує час
роботи алгоритму.

➢ Кількість елементарних операцій

➢ Кожна елементарна операція — фіксований час виконання

➢ Кількість часу та кількість елементарних операцій відрізняються постійним


множником (O-символіка)

➢ Зазвичай розглядається найгірший випадок складності — максимальний


час при вхідних даних заданого розміру

➢ Рідше — складність алгоритму в середньому

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 14
Складність алгоритму

Просторова складність алгоритму — функція


розміру (довжини) вхідних даних, яка характеризує
необхідні обчислювальні ресурси (найчастіше —
кількість RAM).

➢ Пам’ять для зберігання програмного коду алгоритму

➢ Пам’ять для зберігання вхідних даних

➢ Пам’ять для зберігання вихідних даних

➢ Пам’ять для зберігання проміжних даних

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 15
Складність

Складність алгоритму

… поліноміальна … експоненційна …

𝑂(𝑛𝑘 ) 𝑂(2𝑃 𝑛 )

➢ Алгоритм, обидві функції складності якого поліноміальні, вважається


алгоритмом поліноміальної складності

➢ Алгоритм, хоча б одна функція складності якого є експоненційною,


вважається алгоритмом експоненційної складності

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 16
Складність

➢ Задача, для розв’язання якої існує


алгоритм поліноміальної складності,
вважається легко розв’язною задачею
(клас складності P).

➢ Задача, для розв’язання якої не існує


алгоритму поліноміальної складності,
вважається важко розв’язною
задачею. До важко розв’язних задач
належать алгоритмічно нерозв’язні
задачі (граничний випадок
експоненційної складності).

Теорія обчислювальної
складності

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 17
Цікава література

Sanjoy Dasgupta,
Christos Papadimitriou,
Umesh Vazirani —
Algorithms
https://book.huihoo.com/pdf/
algorithms/all.pdf

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 18
Процес розробки
програмного забезпечення

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 19
Етапи розробки програмного забезпечення
Каскадна модель
• Постановка задачі
Аналіз вимог
• Специфікація програмного забезпечення

• Побудова математичної моделі


Проектування
• Розробка алгоритму
• Первинна перевірка коректності алгоритму
• Первинний аналіз складності алгоритму

• Вибір технології, парадигми програмування


Програмування
• Реалізація алгоритму: створення програми

• Перевірка стійкості, самоконтрольованості


Тестування
• Оптимізація програмного продукту

• Інтеграція програмних компонентів


Системна інтеграція
• Інтеграція даних

Документація Експлуатація Супровід


Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 20
Моделі процесу розробки ПЗ

Моделі процесу розробки ПЗ

каскадна ітеративна спіральна

водоспадна інкрементальна Баррі Боем


1980-ті
послідовна еволюційна

Вінстон Ройс Том Ґілб


1970 1970-ті

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 21
Моделі процесу розробки ПЗ

Гнучкі методології

Agile RAD V-Model

Lean DSDM FDD

Scrum RUP TDD

Kanban XP BDD

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 22
Особливості постановки задачі

Коректно сформульована задача


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

• Можливі підходи до розв’язання?


• Чи вистачає вхідних даних?
• Зайві дані?
• Припущення?

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 23
Особливості постановки задачі
Good requirements should have the following individual characteristics:
➢ Unambiguous
➢ Testable (verifiable)
➢ Clear (concise, terse, simple, precise)
3 Criteria to the set of
➢ Correct
requirements:
➢ Understandable
➢ Consistent
➢ Feasible (realistic, possible)
➢ Nonredundant
➢ Independent
➢ Complete
➢ Atomic
➢ Necessary
➢ Implementation-free (abstract)

Good Requirements

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 24
Ну коли нарешті будемо
програмувати?

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 25
Основні поняття

Клас — це спосіб опису сутності, що визначає її


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

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 26
Основні поняття

Об’єкт (екземпляр класу) — це окремий


представник класу, який має визначений стан і
поведінку та цілком підпорядковується опису класу.

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 27
Опис класу
Специфікатори доступу

доступ відкритий для всіх, хто може досягти


public
визначення класу

доступ відкритий для класів, які є похідними


protected
(класами-нащадками)

доступ відкритий для функцій-членів цього


private
класу та друзів (friend-класи та friend-функції)

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 28
Основні поняття

Інтерфейс класу — це набір методів класу, через


які відбувається взаємодія з іншими класами.

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 29
Класифікація функцій-членів класу
Конструктори • Виконують початкову ініціалізацію полів
класу
➢ за замовчуванням • Ім’я конструктора = імені класу
➢ з параметрами • Не повертають значень
➢ копіювання

• Відповідає за коректне знищення об’єкта та


Деструктор вивільнення пам’яті
• Ім’я деструктора — ~[Ім’я класу]

Селектори Забезпечують коректний доступ до закритих


(private) полів об’єкта без їхньої зміни
= геттери (get)

Модифікатори Забезпечують зміну стану об’єкта шляхом


встановлення коректних значень його полів
= сеттери (set)

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 30
Класифікація функцій-членів класу

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 31
Конструктор за замовчуванням

➢ Конструктор за замовчуванням автоматично викликається при створенні


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

➢ Якщо в описі класу конструктори відсутні, компілятор C++ автоматично


ґенерує конструктор за замовчуванням (параметри відсутні, тіло
порожнє).

➢ Автоматично зґенерований конструктор за замовчуванням встановлює


значення усіх полів об’єкта значеннями за замовчуванням для
відповідних типів даних.

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 32
Конструктор з параметрами

➢ Конструктор з параметрами може мати будь-яку кількість параметрів.

➢ В одному класі може бути декілька конструкторів з параметрами, які


відрізняються списком параметрів.

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 33
Конструктор копіювання
➢ Використовується для створення нових об’єктів як копії існуючих об’єктів.

➢ Першим параметром такого конструктора є посилання на об'єкт того ж


типу, що й тип об’єкта який ми конструюємо.

➢ Конструктор копіювання зазвичай використовується для створення


«реальних», а не побітових копій об’єктів класу. Це принципово, якщо:
• передаємо об’єкт як параметр у функцію;
• функція повертає об’єкт в результаті своєї роботи;
• один об’єкт класу ініціалізується іншим об’єктом класу.

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 34
Поверхневе копіювання

➢ Конструктор поверхневого копіювання використовується, якщо клас не


має жодної динамічно розподіленої пам’яті.

сatA Murzik catB


name name
age age
Heap
breed breed

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 35
Глибоке копіювання
➢ Конструктор глибокого копіювання виділяє окрему ділянку пам’яті для
об’єкта-копії. Зміни, внесені у стан об’єкта-прототипу не впливатимуть на
стан об’єкта-копії.

Murzik catB
catA
name
name
age
age
breed
breed Murzik

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 36
Далі буде… ☺

Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 37

You might also like