Professional Documents
Culture Documents
1 Алгоритми та їх складність, етапи та моделі програмування, класи
1 Алгоритми та їх складність, етапи та моделі програмування, класи
програмування
Максим Михайлович Древаль
m.dreval@kpi.ua
Об’єктно-орієнтоване програмування (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
Складність алгоритму
Об’єктно-орієнтоване програмування (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);
Об’єктно-орієнтоване програмування (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);
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 11
Складність алгоритму
Дерево рекурсивних викликів алгоритму Fib1:
𝐹𝑛
𝐹𝑛−1 𝐹𝑛−2
Об’єктно-орієнтоване програмування (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
Складність алгоритму
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 14
Складність алгоритму
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 15
Складність
Складність алгоритму
… поліноміальна … експоненційна …
𝑂(𝑛𝑘 ) 𝑂(2𝑃 𝑛 )
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 16
Складність
Теорія обчислювальної
складності
Об’єктно-орієнтоване програмування (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 21
Моделі процесу розробки ПЗ
Гнучкі методології
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
Опис класу
Специфікатори доступу
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 28
Основні поняття
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 29
Класифікація функцій-членів класу
Конструктори • Виконують початкову ініціалізацію полів
класу
➢ за замовчуванням • Ім’я конструктора = імені класу
➢ з параметрами • Не повертають значень
➢ копіювання
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 30
Класифікація функцій-членів класу
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 31
Конструктор за замовчуванням
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 32
Конструктор з параметрами
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 33
Конструктор копіювання
➢ Використовується для створення нових об’єктів як копії існуючих об’єктів.
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 34
Поверхневе копіювання
Об’єктно-орієнтоване програмування (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