Запорізький національний технічний університет
Методичні вказівки
до лабораторних робіт з дисципліни
для студентів спеціальності 125 "Кібербезпека",
усіх форм навчання

2018
Методичні вказівки до лабораторних робіт з дисципліни "Технології програмування (ООП)" для студентів спеціальності 125 "Кібербезпека", усіх форм навчання /Укл.: Неласа Г.В. – Запоріжжя: ЗНТУ, 2018. – 26 с.
Укладачі: Г.В. Неласа, доцент каф. захисту інформації, к.т.н.
Рецензент: Л.М.Карпуков, зав. каф. захисту інформації, д.т.н.
Затверджено:
на засіданні кафедри
захисту інформації
протокол № 7
від 15.02.2018
ЗМІСТ
Вступ 4
1 Лабораторна робота №1 Введення в класи 5
1.1 Порядок виконання лабораторної роботи 5
1.2 Індивідуальні завдання 5
1.3 Контрольні запитання 7
2 Лабораторна робота №2 Динамічні класові типи 9
2.1 Порядок виконання лабораторної роботи 9
2.2 Індивідуальне завдання 9
2.3 Контрольні запитання 13
3 Лабораторна робота № 3 Спадкування 15
3.1 Порядок виконання лабораторної роботи 15
3.2 Індивідуальне завдання 15
3.3 Контрольні запитання 17
4 Лабораторна робота № 4 Перевантаження операцій 18
4.1 Порядок виконання лабораторної роботи 18
4.2 Індивідуальне завдання 18
4.3 Контрольні запитання 22
5 Лабораторна робота № 5 Віртуальні функції 23
5.1 Порядок виконання лабораторної роботи 23
5.2 Індивідуальне завдання 23
5.3 Контрольні запитання 24
6 Лабораторна робота № 6 Обробка виняткових ситуацій 25
6.1 Порядок виконання лабораторної роботи 25
6.2 Індивідуальне завдання 25
6.3 Контрольні запитання 25
ПЕРЕЛІК ЛІТЕРАТУРИ 26
Додаток А Титульний аркуш 27
Вступ
Метою даного курсу є вивчення теоретичних основ та практичних аспектів об'єктно-орієнтованого програмування. Дисципліна “ Технології програмування (ООП)” спрямована на отримання студентом базових знань та практичних навичок з основ сучасної технології створення складних програмних продуктів на базі ідей і принципів об'єктно-орієнтованого методу. Такі знання призначені для використання у розробках програмного забезпечення інформаційних технологій у проектуванні з урахуванням сучасних вимог у відношенні до надійності, якості інтерфейсу та ефективності програмних продуктів, які створюються. Отримані знання та практичні навички мають служити базою для опанування у подальшому сучасними технологіями системного програмування, Веб-програмування та різноманітних криптографічних бібліотек, що базуються на принципах ООП.
Зміст звіту з лабораторної роботи:
Титульний аркуш.
Мета роботи
Текст програми.
Результати роботи програми.
Висновки.
Відповіді на контрольні питання.
В якості інструментальної мови програмування для виконання лабораторних робот рекомендовано використовувати мову програмування С++. Головною вимогою для використання компілятора є підтримка стандарту ISO/IEC 14882 “Standard for the C++ Programming Language”.
Мета роботи – навчитись будувати класи та використовувати їх при створенні програм.
Застосувавши конспект лекцій та додаткову літературу, вивчити основні принципи створювання класів.
Виконати індивідуальне завдання відповідно до номера варіанта, застосувавши мову програмування С++. При виконанні програм слід використовувати конструктори та деструктори.
Оформити звіт.
Зробити висновки.
Варіант 1. Створити клас для роботи з трьох вимірними векторами. Передбачити функції для виконання наступних операцій: консольне введення і виведення значень вектора; ініціалізація вектора; складання та віднімання векторів; обчислення довжини вектора.
Варіант 2. Створити клас Person. Змінна типу Person повинна вміщувати наступну інформацію про деяку людину: прізвище, ім’я та по–батькові; адреса; рік народження; телефон; зріст, вага, стать. Передбачити функції для виконання наступних операцій: консольне введення і виведення значень типу Person; ініціалізація. Створити динамічний масив, що містить інформацію про деяку групу людей. Підрахувати кількість людей за статтю (friend-функція).
Варіант 3. Створити клас Alfa таким чином, щоб при створенні першого і знищенні останнього об’єкта цього типу на екран видавалися відповідні повідомлення. Вказівка: застосувати статичні компоненти класу.
Варіант 4. Створити клас Beta таким чином, щоб при знищенні останнього об’єкта на екран видавалося повідомлення про найбільшу кількість об’єктів типу Beta, що існували та час існування популяції об’єктів. Вказівка: застосувати статичні компоненти класу.
Варіант 5. Створити клас Delta таким чином, щоб кожний об’єкт вміщував свій персональний номер (дескриптор об’єкта) та функцію, яка повертає його значення. Дескриптор об’єкта – унікальне для об’єктів даного типу ціле число.
Варіант 6. Створити клас таким чином, щоб він відстежував кількість існуючих у даний момент об’єктів та об’єм оперативної пам’яті, який вони займають. Вказівка: застосувати статичні компоненти класу.
Варіант 7. Створити клас для виконання операцій з комплексними числами. Передбачити операції: складання та віднімання; множення та ділення; обчислення модулю; консольне введення та виведення; ініціалізацію.
Варіант 8. Створити клас Organization. Змінна типу Organization повинна вміщувати наступну інформацію: назва; адреса; директор; телефон. Передбачити функції для виконання наступних операцій: консольне введення і виведення значень типу Organization; ініціалізація. Створити каталог організацій міста (динамічний масив) та відсортувати за назвою (friend-функція).
Варіант 9. Створити клас Book. Зміна типу Book повинна містити наступні поля: назва; кількість авторів; автори; рік видання; кількість сторінок. Передбачити функції для виконання наступних операцій: ініціалізація книги, додавання авторів, консольне введення/виведення інформації про книгу. Створити каталог книг (динамічний масив), впорядкувати елементи по назві (friend-функція).
Варіант 10. Створити клас Film. Зміна типу Film повинна містити наступні поля: назва; рік створення; режисер; кількість акторів; актори. Передбачити функції для виконання наступних операцій: ініціалізація інформації, додавання акторів, консольне введення/виведення інформації про стрічку. Створити каталог стрічок (динамічний масив), впорядкувати елементи по назві (friend-функція).
Варіант 11. Створити клас House. Зміна типу House повинна містити наступні поля: вулиця; номер; кількість квартир, поверхів, під’їздів, кількість квартир на поверсі; дата початку будівництва; дата закінчення будівництва; назва будівничої фірми. Передбачити функції для виконання наступних операцій: ініціалізація інформації, консольне введення/виведення інформації про будинок, розрахунок кількості квартир у під’їзді, у будинку з використанням friend-функцій.
Варіант 12. Створити клас Train. Зміна типу Train повинна містити наступні поля: номер; кількість зупинок; кількість вагонів; час відправлення; час прибуття. Передбачити функції для виконання наступних операцій: ініціалізація інформації, консольне введення та виведення інформації про потяг, розрахунок часу, що витрачається на маршрут. Створити реєстр потягів (динамічний масив).
Варіант 13. Створити клас вибірка Sample розмірності N. Передбачити функції для виконання наступних операцій: консольне введення/виведення значень вибірки, розрахунок середнього, дисперсії, розмаху, середньоквадратичного відхилення. Розробити дружню функцію для розрахунку критерію Кохрена (G=Smax / ∑ Si).
Варіант 14. Скласти опис класу багаточленів від однієї змінної, що задаються ступенем багаточлена і масивом коефіцієнтів. Передбачити методи для обчислення значення багаточлена для заданого аргументу, операції складання, віднімання та множення багаточленів з отриманням нового об’єкта – багаточлена, виведення на екран опису многочленна.
Варіант 15. Створити клас вибірка Sample розмірності N. Передбачити функції для виконання наступних операцій: консольне введення/виведення значень вибірки, розрахунок середнього, дисперсії, розмаху, середньоквадратичного відхилення. Розробити дружню функцію для розрахунку критерію Фішера (F=σ1/ σ2).
Чим відрізняються поняття класу та структури у С++? Дайте загальне визначення класу?
Наведіть загальну структуру класу.
Що таке інтерфейс класу та його реалізація?
У чому полягає роль конструкторів та деструкторів у класі?
Які способи можна застосувати для ініціалізації об’єкта класу? Як для цього застосовуються конструктори?
Чим відрізняються функції – члени класу від функцій, не пов’язаних з будь-яким класом?
Що означає об’єкт класу?
Уява об’єкта у пам’яті.
Чи можливо перевантажувати функції-члени класу?
В чому полягає особливість статичних елементів класу?
Які області видимості використовують для створення класів?
В чому різниця між inline-функціями та іншими функціями-членами класу?
Коли використовують дружні функції?
Чи можна присвоювати значення одного об’єкта іншому.
Яки специфікатори видимості для членів класу ви знаєте?
Чи можливо створювати масиви об’єктів?
Для чого використовується покажчик this?
Чи можливо передавати об’єкти як аргументи функціям?
Чи можливо щоб функція повертала значення типа клас?
Мета роботи – навчитись використовувати динамічні класи при створенні програм.
Застосувавши конспект лекцій та додаткову літературу, вивчити основні принципи роботи з динамічними класовими типами.
Виконати індивідуальне завдання відповідно до номера варіанта застосувавши мову програмування С++. Клас, що розроблюється, повинен містити конструктор копіювання.
Оформіти звіт.
Зробити висновки.
Варіант 1. Створити динамічний клас Catalog, що базується на зв’язаному списку, де кожний елемент списку – структура типа Book. Клас повинен містити наступні операції:
add_book() – додавання книги у каталог;
del_book() – видалення книги з каталогу;
find_by_autor() – пошук книги у каталозі за автором;
show_cataloque() - відображення каталогу книг.
Варіант 2. Створити динамічний клас Book, що містить динамічний масив Authors, де інформація про автора містить (П.І.Б., кількість книжок, рік народження), а також всю необхідну інформацію про книжку. Клас повинен містити наступні операції:
add_author() – додавання авторів;
del_author() – видалення авторів;
count_authors() – підраховує кількість авторів.
Також потрібно реалізувати масив книжок та friend-функції введення/виведення інформації в каталог.
Варіант 3. Створити динамічний клас University, що базується на зв’язному списку, де кожний елемент списку містить інформацію про факультети: назву факультету, прізвище декана, кількість груп на факультеті, загальну кількість студентів у групах. Клас повинен містити наступні операції:
add_group() – додавання групи;
del_group() – видалення групи;
calc_stud() – підрахунок кількості студентів на факультеті.
Варіант 4. Створити динамічний клас Train, де елементи типа Carriage (вагон) зв’язані структурою типа двозв’язний список. Клас повинен містити наступні операції:
add_carriage() – додавання вагонів;
del_carriage() – вилучення вагонів;
calc_places() – підрахунок кількості місць у потягу.
Варіант 5. Створити динамічний клас Route на основі двозв’язного списку, де кожний елемент типа stop (зупинка). Клас повинен містити наступні операції:
add_stop() – додавання зупинки;
len_route() – розрахунок довжини маршруту;