Розробники та рецензенти
Заклад вищої освіти:

Компанія-рецензент 1:

Компанія-рецензент 2:
Валідація:
Розробник навчальної програми:
Валентин Любченко - кандидат технічних наук, доцент кафедри "інформатики"
Базова інформація
Шифр та назва спеціальності:
122 - Комп'ютерні наукиНазва освітньо-наукової програми
ІнформатикаНазва дисципліни
Об'єктно-орієнтоване програмуванняВид дисципліни
ОсновнаБлок дисципліни
Алгоритмізація і програмуванняКількість студентів
59Курс/Семестр
2Загальна інформація про дисципліну
Анотація
Курс охоплює основи об'єктно-орієнтованого програмування (ООП) на мові C++, включаючи ключові парадигми: інкапсуляцію, наслідування, поліморфізм. Студенти навчаться працювати з класами та об'єктами, використовувати конструктори, деструктори, абстрактні класи, інтерфейси та механізми перевантаження. Окрему увагу приділено шаблонній бібліотеці STL. Розглядаються основні контейнери (vector, list, set, map) та алгоритми STL, а також ефективне використання ітераторів і шаблонів. Також курс включає введення в патерни проєктування.Анотація
Формування компетентностей щодо теоретичних і практичних знань в області об'єктно-орієнтованого програмування на мові C++. Студенти навчаються основним принципам ООП (інкапсуляція, наслідування, поліморфізм), розробці алгоритмів і програм на основі цього підходу, створенню класів та їх застосуванню для розв'язання задач. Вони також отримають практичні навички розробки програмного забезпечення з використанням сучасних інтегрованих середовищ розробки та стандартної бібліотеки шаблонів (STL).Анотація
Лекції, лабораторні роботи, самостійна робота. Підсумковий контроль – іспитРозподіл часу
Загальний обсяг (кредитів): 5; Лекції (занять): 15; Лабораторні (занять): 6; Практичні (занять): 3; Самостійна робота (годин): 80
Попередні дисципліни
-Матеріально-технічне та програмне забезпечення дисципліни
Компілятор С++ (IDE): Clion, Visual Studio, xcode, dev-c++ тощоСтруктура дисципліни
| Теоретична складова Назва, перелік питань або анотація лекції | Годин | Практична складова Опис та приклад завдання, а також посилання на методичні матеріали | Годин | Інструменти, засоби та технології | ||||||||||||||
|
||||||||||||||||||
| Основні поняття об’єкту, на прикладі рядків мови С++. Рядки мови С++ std::string: будова, основні методи. Ідея застосування об’єкту на прикладі рядка string. | 2 | Знайти та замінити усі цифрові символи на символ ‘*’ Перевірити скільки слів складається тільки з цифр. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Потокові класи ostream, istream: методи форматування, методи обміну з потоками, маніпулятори. Створення власних маніпуляторів. Перевантаження потоків для власних типів | 2 | Нехай у масиві структур зберігатиметься інформація про успішність студентів, яку необхідно вивести на екран у зручному для користувача вигляді Petrov........._____3.500 Sidorov........_____1.667 Створити власний маніпулятор | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Файлові (ifstream, ofstream) та рядкові потоки (stringstream): текстові та бінарні файли, створення потоку в оперативній пам’яті. | 2 | Підрахувати скільки символів/слів/рядків у файлі. Запис та читання структури Point з двома полями x та y в текстовий та бінарний файл. Створити функцію запису та читання в потік, застосувати її для файлового та рядкового потоку. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
|
||||||||||||||||||
| Основні постулати ООП: інкапсуляція, успадкування, поліморфізм. Поняття класу в С++, як реалізація ООП. Загальний синтаксис. Поля та методи класу. Специфікатори доступу. Статичні поля, статичні методи. | 2 | Приклад класу TData з полями year, month, day. Реалізація інкапсуляції: створення методів геттери та сеттери. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Конструктори, деструктори. Представлення об'єкта в пам'яті, прихований покажчик this | 2 | Розширення класу TData усіма видами конструкторів, деструктором. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Перевантаження унарних операції, перевантаження бінарних операцій. Перевантаження операції присвоєння, індексації, приведення до типу, операція () | 2 | Клас MyInt з полем data. Перевантажити префіксну і постфіксну операцію ++ методами класу. Перевантажити префіксну і постфіксну операцію – зовнішніми функціями. Клас Tarr, який зберігає динамічний масив. Перевантажити операцію присвоїти, індексацію. Перевантажити приведення до типу, як середнє арифметичне | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
|
||||||||||||||||||
| Просте та множинне успадкування. Віртуальне успадкування. Порядок виклику конструкторів та деструкторів при успадкуванні. Передача параметрів конструктору базового класу. | 2 | Створення базового класу Base з усіма типами конструкторів. Створення класу Delivered з явним викликом деструкторів базового класу. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Поліморфізм. Віртуальні методи класу. Абстрактні класи. Раннє та пізнє зв’язування. Механізм реалізації пізнього зв’язування | 2 | Розробити клас Monstr з полями life та power, з методом hit (з перевіркою, що монстр не може бити себе), чисто віртуальними методами draw. Реалізувати класи нащадки Rabbit та Dragon. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Множинне успадкування. Порядок створення та видалення об'єктів і виклики конструкторів. | 1 | Розробити базові класи Animal та Pet, а також реалізувати клас-нащадок Dog, який об'єднує функціональність обох базових класів. Клас Dog представляє собою домашнього улюбленця, який має загальні властивості і поведінку тварин. | Clion/ Visual Studio/ xCode | |||||||||||||||
| Агрегація, композиція. Дружні функції і класи. | 1 | Реалізувати клас Point. LineComposition, який включає два об'єкти Point. LineAgregation який агрегує два об'єкти Point. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Шаблонні класи (template). Спеціалізація шаблонного класу. Наслідування від шаблонного класу | 2 | Реалізувати шаблонний клас Data, який зберігає довільний дип. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
| Оператори приведення типів мови С++ (static_cast dynamic_cast, const_cast, reinterpret_cast). Динамічна ідентифікація типу typeid | 2 | Приклади застосування static_cast для стандартних типів та неполіморфних класів. Приклади застосування const_cast для зняття обмеження константності покажчика/посилання. Перетворення адреси long у вказівник на структуру кольору за допомогою reinterpret_cast. Реалізувати ієрархію класів Animal, Cat, Dog. Реалізувати безпечне приведення до типів за допомогою dynamic_cast. Перевірка типу переданого об’єкту у функцію за допомогою typeid. | на лекції | Clion/ Visual Studio/ xCode | ||||||||||||||
|
||||||||||||||||||
Поняття патернів проєктування.
Огляд патернів:
|
Singleton: Приклад клас Log, який забезпечує збереження та запис логів додатка і гарантує, що існує лише один екземпляр цього класу в програмі. Factory Method: Приклад генерація різних типів документів: TextDocument, SpreadsheetDocument, PresentationDocument. Реалізувати фабричний метод для створення екземплярів документів в залежності від типу, переданого в параметрах методу фабрики. Observer: Приклад системи для моніторингу погоди, що включає клас WeatherStation для визначення погодних умов і класи підписників (DisplayCurrentConditions, DisplayForecast, DisplayStatistics), які автоматично оновлюються про зміни у WeatherStation. Strategy: Приклад системи для обробки платіжних транзакцій, яка включає клас PaymentProcessor. Приклад реалізації різних стратегій обробки платежів: кредитною карткою, PayPal, банківським переказом, як окремі класи. Застосування патерну Strategy для можливості динамічного вибору стратегії оплати під час виконання програми. Command: Приклад системи управління замовленнями в онлайн-магазині, яка включає клас Order. Реалізовані команди для створення нових замовлень, видалення та оновлення статусу існуючих замовлень. Кожна команда реалізована як окремий клас, що виконує інтерфейс Command. Використано паттерн Command для можливості обробки команд як об'єктів, здатних до передачі, зберігання та скасування в системі управління замовленнями. | |||||||||||||||||
|
||||||||||||||||||
| Послідовний контейнер vector, list, deque, структура, основні методи. Ітератори: потокові, вставки | Створити вектор/список/чергу з довільними об’єктами. Приклади запису та читання через ітератор. Приклад застосування і тератора вставки при копіюванні з одного контейнера в інший. | на лекції | Clion/ Visual Studio/ xCode | |||||||||||||||
| Асоціативні контейнери map, multimap set, multiset, biset. | Підрахувати частоту повторення слів у файлі 1, за винятком слів вказаних у файлі 2 | на лекції | Clion/ Visual Studio/ xCode | |||||||||||||||
| Алгоритми STL: Не модифікуючі, модифікуючі, зв’язані з сортуванням | Приклади застосування алгоритмів, відповідно до лабораторного завдання | на лекції | Clion/ Visual Studio/ xCode | |||||||||||||||
Теми та завдання для самостійної роботи
| ЗАВДАННЯ ДО ЛАБОРАТОРНИХ РОБІТ | ||||||||||||||||||
| Потокові класи та рядки мови С++ | 4 | Варіант 1
Виконати варіанти завдань лабораторної роботи за умови, що вхідні дані зберігаються в рядковому потоку std::stringstream.На один об’єкт відводиться один рядок. Поля відділені крапка з комою (‘;’). Кожне завдання реалізувати у вигляді функції. Реалізувати перевантаження потоку.Результати обробки вхідних даних необхідно зберегти в текстовий файл результатів.Кожне завдання оформити у вигляді окремою функцією. Всі об’явлення винести в окрему іменовано область.Настроювання потоку організувати у вигляді власних маніпуляторів.Необхідно зчитати вхідні дані, вивести їх на екран і в файл у форматованому вигляді: текстове поле структури повинне бути вирівняне по лівому полю і займати 15 знакомісць, числове поле повинне бути вирівняне по правому полю і займати 8 знакомісць. Символ заповнювач «.», наприклад:
Сидоров................................3
Максименко.............................5
Варіант 1
Описати структуру з іменем WORKER, яка містить наступні поля: прізвище та ініціали робітника; назва посади; рік зайняття посади. Написати програму, яка виконує наступні дії:
|
Clion/ Visual Studio/ xCode | |||||||||||||||
| Основи розробки класів на мові С++ | 4 | Завдання 6 Розробити клас, що представляє студента. Студент характеризується ім'ям, прізвищем, групою і набором іспитів, які він складав. Іспит характеризується назвою предмета, оцінкою студента по ньому і датою складання (рік, семестр). Група характеризується курсом і факультетом. Розробити методи які дозволяють: 1. дізнатися повне ім'я студента (ім'я + прізвище) і його курс 2. дізнатися, чи вчиться він на заданому факультеті 3. дізнатися найвищу оцінку серед усіх іспитів з даного предмету 4. додати йому оцінку за іспит (назва передається як параметр) 5. видалити для нього оцінку за іспит (назва передається як параметр) 6. дізнатися число іспитів, які він склав зі вказаною оцінкою 7. дізнатися його середній бал за вказаний семестр | Clion/ Visual Studio/ xCode | |||||||||||||||
| Наслідування, поліморфізм, інкапсуляція, виключення | 4 | Виконати варіант завдання з лабораторної роботи 2, створивши шаблонний базовий абстрактний клас у якому реалізовані створення та операції з динамічним шаблонним масивом, об’явлені чисто віртуальні методи вводу виводу. У класі нащадку, який створений успадкуванням до заданого типу (відповідної структури), винести решту методи. Продемонструвати роботу з конструкторами базового та успадкованого класів | Clion/ Visual Studio/ xCode | |||||||||||||||
| Патерни проєктування | 4 | Створити програму відповідного варіанту лабораторної роботи з використанням патернів проєктуванняю
Варіант 1
Створити програму до управління бібліотекою, яка включає такі функції:
|
Clion/ Visual Studio/ xCode | |||||||||||||||
| Контейнери та алгоритми стандартної бібліотеки С++ | 4 | Створити контейнер об'єктів класів, реалізованих в лабораторній роботі 5 (студентів, гуртожитків, викладачів і т.д.) Контейнер реалізувати як вектор. Провести певні дії з цим контейнером. Не застосовувати цикли, використовувати тільки відповідні стандартні алгоритми. Перетворити класи для вирішення даного завдання. Варіант 1 Необхідні завдання такі: 1. забезпечити для контейнера можливість зчитування з файлу і запису в файл з використанням ітераторів потоків. 2. забезпечити для контейнера сортування за прізвищем студента (це повинно бути сортування за замовчуванням), а також сортування за його середнім балом за останню сесію. 3. винести в окремий вектор всіх студентів, починаючи зі студента із середнім балом вищим, ніж 4 4. зберегти всі середні бали студентів з вектора з кроку 3 в окремому векторі 5. дізнатися, скільки в векторі з кроку 4 значень середнього бала вище заданого 6. знайти середній бал для всіх студентів з використанням accumulate () 7. перевірити, чи входить вектор, отриманий на кроці 3, у вихідний вектор як підпослідовність. | Clion/ Visual Studio/ xCode | |||||||||||||||
| Асоціативні контейнери | 4 | Варіант 1 Розробити програму, яка зчитує текст і підраховує число повторень кожного слова, за винятком слів, зазначених у списку. Слова в тексті розділяються пробілами. Підрахунок числа повторень слова реалізовувати за допомогою асоціативного масиву, список слів для виключення реалізовувати за допомогою множини. Кожен раз, коли зустрілося слово зі списку, виводити повідомлення. Створити набір функцій для виведення результатів і винести їх в окремий файл. Оголошення функцій винести в заголовний (header) файл. Вихідні дані зчитати з файлу і вивести в файл. | Clion/ Visual Studio/ xCode | |||||||||||||||
| ТЕМИ ТА ЗАВДАННЯ ДЛЯ САМОСТІЙНОЇ РОБОТИ | ||||||||||||||||||
| № | Назва та опис завдання | Методи контролю та критерії оцінювання | Годин | |||||||||||||||
| 1 | Опрацювати тему: Потокові класі мови С++ | Виконання лабораторної роботи. Опитування в рамках захисту лабораторної роботи | 10 | |||||||||||||||
| 2 | Опрацювати тему: Клас, як реалізація ООП в С++ | Виконання лабораторної роботи. Опитування в рамках захисту лабораторної роботи | 20 | |||||||||||||||
| 3 | Опрацювати тему : Успадкування | Виконання лабораторної роботи. Опитування в рамках захисту лабораторної роботи | 20 | |||||||||||||||
| 4 | Опрацювати тему : Стандартна бібліотека шаблонів класів (STL) | Виконання лабораторної роботи. Опитування в рамках захисту лабораторної роботи | 30 | |||||||||||||||
Проєкт
Непередбачено
Рекомендовані джерела інформації та навчальні матеріали
| Основні | ||||||||||||||||||
| № | Назва | До теми (вказати номер) | ||||||||||||||||
| 1 | Основи програмування мовою С++: Навчальний посібник /Є.П. Путятін, В.А. Любченко, О.А. Кобилін, Д.О. Руденко, Д.С. Пелешенко — Х.: ТОВ «Компанія СМІТ», 2018. — 260 с | 2,3 | ||||||||||||||||
| 2 | C/C++ Programmer's Reference by Herbert Schildt (Fourth Edition) | 1, 2, 3, 4 | ||||||||||||||||
| 3 | The C++ Programming Language (4th Edition) Bjarne Stroustrup | 1, 2, 3, 4 | ||||||||||||||||
| 4 | Бублик В. В. Об’єктно-орієнтоване програмування : підручник. К.: ІТкнига, 2015. 624 с. | 1, 2, 3, 4 | ||||||||||||||||
| 5 | Lafore R. Object-Oriented Programming in C++. 4th ed. Sams Publishing; 2002. 1040 pages. | 1, 2, 3, 4 | ||||||||||||||||
| 6 | ||||||||||||||||||
| 7 | ||||||||||||||||||
| 8 | ||||||||||||||||||
| 9 | ||||||||||||||||||
| 10 | ||||||||||||||||||
| Додаткові | ||||||||||||||||||
| № | Назва | До теми (вказати номер) | ||||||||||||||||
| 1 | Effective Modern C++ (2014) By Scott Meyers | 3,4 | ||||||||||||||||
| 2 | Balagurusamy, E. Object-Oriented Programming with C++. 4th ed., McGraw-Hill Education, 2008. 608 pages. | 1, 2, 3, 4 | ||||||||||||||||
| 3 | Farrell, Joyce. Object-Oriented Programming Using C++, Cengage Learning, 2008, 816 pages | |||||||||||||||||
| 4 | Gamma, Erich, et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994. | |||||||||||||||||
Контрольні заходи
| Назва та опис | Методи контролю та критерії оцінювання | |||||||||||||||||
| Оцінка лабораторних робіт | З кожної лабораторної роботи студент оформлює звіт, що містить завдання, результати його виконання та висновки. Максимальна оцінка по 10 балів 6*10 = 60 | |||||||||||||||||
| Тестування | Тест в системі dl.nure : максимальний бал 40 | |||||||||||||||||
| Комбінаційний іспит | Письмовий іспит. Оцінка 100 балів | |||||||||||||||||
Результати навчання
Підсумкова оцінка складається 60% від успішності у семестрі + 40% від письмового іспиту
Зв'язок з ринком праці
Спеціальність/професія, підготовці до діяльності в якій читається курс:
С++ DeveloperПосилання на вакансії (понад 3),
- https://www.work.ua/jobs/5362493/
- https://www.work.ua/jobs/4939220/
- https://www.work.ua/jobs/2969995/
- https://jobs.dou.ua/companies/visonic-a-tyco-international-company/vacancies/170857/
- https://jobs.dou.ua/companies/ozzylogik-ltd/vacancies/267211/
Перелік компетентностей із вказаних як вимоги до вакансії, які набувають студенти, в процесі проходження дисципліни.
Основи ООП в мові С++ Навички роботи з бібліотекою шаблонів STL Застосування алгоритмів STLІнструменти оцінювання результатів навчання за дисципліною
| Об'єкт оцінювання (знання методів та принципів, практичні навички, командна робота тощо) | Методи контролю (тести, виконання поточних практичних завдань та їх форма: написання коду, створення діаграми Гантта, створення прототипу тощо) | Інструмент оцінювання (доступ до результатів тесту, гостьова лекція, посилання на виконані завдання, посилання на проєкт, присутність на захисті проєктів, доступ до запису захисту тощо) |
| Лабораторні роботи | Написання коду на С++, відповідно до завдання | Захист лабораторних робіт |
| Тестування | Відповіді на запитання | Результати тестування в dl.nure Приклад тесту за посиланням https://docs.google.com/document/d/1JqESPeMTl3FqphK6N8n9URBQywQ3QoG7/edit?usp=sharing&ouid=101968586042068355797&rtpof=true&sd=true |
| Комбінаційний іспит | Написання коду, відповіді на теоретичні запитання | Виконати (письмово) та захист завдання Приклад завдання на іспит https://drive.google.com/file/d/1frPCdkFwcaI8epn_j_8xjnMFVlbQnwzY/view?usp=sharing |
