Системне програмування на С і С++ - Робоча програма навчальної дисципліни (Силабус)

Реквізити навчальної дисципліни

Рівень вищої освіти Перший (бакалаврський)
Галузь знань 12 Інформаційні технології
Спеціальність 126 Інформаційні системи та технології
Освітня програма Інтегровані інформаційні системи
Статус дисципліни Навчальні дисципліни професійної та практичної підготовки (за вибором студентів)
Форма навчання очна(денна)/заочна/дистанційна
Рік підготовки, семестр 3 курс, осінній семестр (5)
Обсяг дисципліни 150 (5 кр) годин (36 годин – Лекції, 18 годин – Лабораторні, 96 годин – СРС))
Семестровий контроль/ контрольні заходи Залік робота, МКР
Розклад занять http://rozklad.kpi.ua
Мова викладання Українська
Інформація про керівника курсу / викладачів

Лектор: к.т.н., доцент Катін Павло Юрійович

katin.dino@gmail.com

моб. +38(098)202-08-11

к.т.н., доцент Катін Павло Юрійович

==

моб. ==

Розміщення курсу https://campus.kpi.ua

Програма навчальної дисципліни

Опис навчальної дисципліни, її мета, предмет вивчання та результати навчання

Опис дисципліни

Основною метою дисципліни є формування у студентів навичок розробки, налагодження і тестування системного програмного забезпечення (ПЗ) для POSIX сумісних (сертифікованих) операційних систем з використанням мови програмування С(С++). У тому числі на рівні ядра ОС Linux. Крім того розглядаються питання розробки прикладного програмного забезпечення, створення на базі бібліотек QT графічних інтерфейсів, файлів, баз даних і мережевих застосувань.

Предмет навчальної дисципліни

процес розробки, налагодження, тестування системного програмного забезпечення, мова програмування С(С++), модулі ядра Linux, бібліотеки QT.

Міждисциплінарні зв’язки

Дисципліна Системне програмування на С і С++ базується на дисциплінах:

Мета навчальної дисципліни

Підготовка висококваліфікованих спеціалістів, які здатні розробляти, налагоджувати і тестувати системне і прикладне програмне забезпечення на основі мови програмування С(С++)

Основні завдання навчальної дисципліни

Знання
  • синтаксису мови С (С++), стилів і парадигм програмування;
  • технологічного циклу розробки, налагодження і тестування системного програмного забезпечення з використання GCC (G++);;
  • технологічного циклу розробки, налагодження і тестування прикладного програмного забезпечення з використанням обраного IDE, наприклад Qt Creator;
  • основ POSIX сумісних (сертифікованих) операційних систем у контексті розробки ПЗ;;
  • технології і парадигм розробки модулів ядра для Linux.
Уміння
  • користуватися компілятором GCC (G++), обраним IDE, наприклад Qt Creator;
  • розробляти, налагоджувати і тестувати системне програмне забезпечення з використанням С (С++);
  • розробляти, налагоджувати і тестувати прикладне програмне забезпечення з використанням С (С++) і стандартних бібліотек Qt;
  • розробляти модулі ядра Linux.

Пререквізити та постреквізити дисципліни (місце в структурно-логічній схемі навчання за відповідною освітньою програмою)

Пререквізити

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

Постреквізити

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

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

Зміст навчальної дисципліни

Очна форма

Лекційні заняття

Тема 1. Технологія створення програмного забезпечення з використанням мови С (С++) і компілятора GCC Тема 2. Особливості системного програмування для POSIX операційних систем. Тема 3. Основи використання бібліотек Qt у парадигмі об'єктно-оріентованного програмування. Тема 4. Розробка програмних застосунків для роботи з базами даних на основі бібліотек Qt у парадигмі об'єктно-оріентованного програмування. Тема 5. Розробка файлових і мережевих застосунків у POSIX сумісних (сертифікованих) операційних системах. Тема 6. Базові технології розробки програмного забезпечення на рівні ядра операційної системи Linux. Тема 7. Основи розробки модулів ядра операційної системи Linux. Тема 8. Архитектура програмного застосунку на базі модуля ядра.

Лабораторні заняття

Лабораторна робота 1. Технології розробки системних програм для POSIX сумісних (сертифікованих) операційних систем. Лабораторна робота 2. Створення статичних і динамічних бібліотек для POSIX сумісних (сертифікованих) операційних систем. Лабораторна робота 3. Розробка графічного інтерфейсу з використанням бібліотеки Qt для стандартних потоків вводу-виводу. Лабораторна робота 4. Розробка графічного інтерфейсу для роботи з базами даних на основі бібліотек Qt . Лабораторна робота 5. Створення графічного інтерфейсу для мережевих застосунків з використанням бібліотек Qt . Лабораторна робота 6. Технології розробки модулів ядра для операційної системи Linux. Лабораторна робота 7. Розробка модуля модуля ядра Linux. Лабораторна робота 8. Графічний інтерфейс для модуля ядра Linux на основі бібліотеки Qt.

Заочна форма

Лекційні заняття

Тема 1. Технологія створення програмного забезпечення з використанням мови С (С++) і компілятора GCC Тема 2. Основи використання бібліотек Qt у парадигмі об'єктно-оріентованного програмування. Тема 3. Основи розробки модулів ядра операційної системи Linux. Архитектура програмного застосунку на базі модуля ядра.

Лабораторні заняття

Три лабораторні з переліку за вибором. Лабораторна робота 1. Технології розробки системних програм для POSIX сумісних (сертифікованих) операційних систем. Лабораторна робота 2. Створення статичних і динамічних бібліотек для POSIX сумісних (сертифікованих) операційних систем. Лабораторна робота 3. Розробка графічного інтерфейсу з використанням бібліотеки Qt для стандартних потоків вводу-виводу. Лабораторна робота 4. Розробка графічного інтерфейсу для роботи з базами даних на основі бібліотек Qt . Лабораторна робота 5. Створення графічного інтерфейсу для мережевих застосунків з використанням бібліотек Qt . Лабораторна робота 6. Технології розробки модулів ядра для операційної системи Linux. Лабораторна робота 7. Розробка модуля модуля ядра Linux. Лабораторна робота 8. Графічний інтерфейс для модуля ядра Linux на основі бібліотеки Qt.

Навчальні матеріали та ресурси

Базова література

  1. Б.Керниган, Д.Ритчи, А.Фьюер. Язык программирования Си. Задачи по языку Си. М.: Финансы и статистика, 1985.— 320 с.: ил.
  2. http://www.opennet.ru/docs/RUS/zlp/.
  3. Marc Gregoire.Nicholas A. Solter.Scott J. Kleper. PROFESSIONAL C++.Second Edition. 2011 by John Wiley & Sons, Inc., Indianapolis, Indiana - 816 р.

Допоміжна література

  1. Програмування 3. Системне програмування [Електронний ресурс]: методичні рекомендації до виконання лабораторних робіт для студентів кафедри Автоматики та управління у технічних системах заочної форми навчання / НТУУ «КПІ» ; уклад. П. Ю. Катін. – 2-ге вид., випр. і доп. – Електронні текстові дані (1 файл: 432 Кбайт). – Київ : НТУУ «КПІ», 2015. – 73 с. – Назва з екрана. https://ela.kpi.ua/handle/123456789/11653
  2. Michael Kerrisk. ТHE LINUX PROGRAMMING INTERFACE. A Linux and UNIX® System Programming Handbook
  3. Scott Maxwell, Linux Core Kernel Commentary (Ядро Linux в комментариях),
  4. http://www.netlib.narod.ru/library/book0010/toc.htm .
  5. PUHAN, Janez, Operating Systems, Embedded Systems, and Real-Time Systems [Electronic source] / Janez Puhan Faculty of Electrical Engineering. - 1st ed. -El. book. - Ljubljana : FE Publishing, 2015
  6. https://doc-snapshots.qt.io/qt5-5.9/qtsql-sqlbrowser-example.html
  7. https://doc-snapshots.qt.io/qt5-5.9/qtexamples.html
  8. Linux System Programming by Robert Love Copyright © 2007 O'Reilly Media, Inc. All rights reserved. Printed in the United States of America.Published by O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472
  9. https://refactoring.guru/ru/design-patterns/cpp
  10. https://refactoring.guru/ru/design-patterns/state
  11. https://refactoring.guru/ru/design-patterns/strategy

Навчальний контент

Методика опанування навчальної дисципліни (освітнього компонента)

Очна форма

Лекційні заняття

Назва теми лекції та перелік основних питань (перелік дидактичних засобів, посилання на літературу та завдання на СРС)
1 Тема 1. Технологія створення програмного забезпечення з використанням мови С (С++) і компілятора GCC
Лекція 1. Загальна концепція і базова технологія системного програмування у POSIX сумісних (сертифікованих) операційних системах.
Лекція 2. Технології розробки системних програм для POSIX сумісних (сертифікованих) операційних систем.
2 Тема 2. Системне програмування для POSIX операційних систем.
Лекція 3. Особливості синтаксису мови програмування С (С++).
Лекція 4. Програмне управління багатопотоковістю і пам'яттю на системному рівні.
3 Тема 3. Основи використання бібліотек Qt у парадигмі об'єктно-оріентованного програмування.
Лекція 5. Особливості об'єктно-орієнтованого програмування мовою С++.
Лекція 6. Графічний інтерфейс на основі бібліотек Qt у парадигмі об'єктно-орієнтованого програмування.
4 Тема 4. Розробка програмних застосунків для роботи з базами даних на основі бібліотек Qt у парадигмі об'єктно-оріентованного програмування.
Лекція 7. Програмування з використанням парадигми об'єктно-орієнтованого програмування.
Лекція 8. Розробка програмних застосунків для роботи з базами даних на основі бібліотек Qt у парадигмі об'єктно-оріентованного програмування..
5 Тема 5. Розробка файлових і мережевих застосунків у POSIX сумісних (сертифікованих) операційних системах.
Лекція 9. Основи технології для роботи з файлами у POSIX сумісних (сертифікованих) операційних системах.
Лекція 10. Розробка файлових і мережевих застосунків у POSIX сумісних (сертифікованих) операційних системах.
6 Тема 6. Базові технології розробки програмного забезпечення на рівні ядра операційної системи Linux.
Лекція 11. Архітектурні особливості будови ядра.
Лекція 12. Технології розробки програмного забезпечення на рівні ядра операційної системи Linux.
7 Тема 7. Основи розробки модулів ядра операційної системи Linux.
Лекція 13. Загальна програмна інфраструктура модулів ядра операційної системи Linux.
Лекція 14. Розробка модулів ядра операційної системи Linux.
8 Тема 8. Архитектура програмного застосунку на базі модуля ядра.
Лекція 15. Архитектура програмного застосунку на базі модуля ядра з текстовим інтерфейсом користувача.
Лекція 16. Архитектура програмного застосунку на базі модуля ядра з графічним інтерфейсом користувача на основі.
9 МКР Модульна контрольна робота.

Лабораторні заняття

Назва лабораторної роботи Кількість ауд. годин
1 Лабораторна робота 1. Технології розробки системних програм для POSIX сумісних (сертифікованих) операційних систем. 2
2 Лабораторна робота 2. Створення статичних і динамічних бібліотек для POSIX сумісних (сертифікованих) операційних систем. 2
3 Лабораторна робота 3. Розробка графічного інтерфейсу з використанням бібліотеки Qt для стандартних потоків вводу-виводу. 2
4 Лабораторна робота 4. Розробка графічного інтерфейсу для роботи з базами даних на остові бібліотек Qt. 2
5 Лабораторна робота 5. Створення графічного інтерфейсу для мережевих застосунків з використанням бібліотек Qt. 2
6 Лабораторна робота 6. Технології розробки модулів ядра для операційної системи Linux. 2
7 Лабораторна робота 7. Розробка модуля модуля ядра Linux. 2
8 Лабораторна робота 8. Графічний інтерфейс для модуля ядра Linux на основі бібліотеки Qt. 4

Заочна форма

Лекційні заняття

Назва теми лекції та перелік основних питань (перелік дидактичних засобів, посилання на літературу та завдання на СРС)
1 Тема 1. Технологія створення програмного забезпечення з використанням мови С (С++) і компілятора GCC
Лекція 1. Загальна концепція і базова технологія системного програмування у POSIX сумісних (сертифікованих) операційних системах.
Лекція 2. Технології розробки системних програм для POSIX сумісних (сертифікованих) операційних систем.
2 Тема 2. Основи використання бібліотек Qt у парадигмі об'єктно-оріентованного програмування.
Лекція 3. Особливості об'єктно-орієнтованого програмування мовою С++.
Лекція 4. Графічний інтерфейс на основі бібліотек Qt у парадигмі об'єктно-орієнтованого програмування.
3 Тема 3. Основи розробки модулів ядра операційної системи Linux.
Лекція 5. Загальна програмна інфраструктура модулів ядра операційної системи Linux.
Лекція 6. Розробка модулів ядра операційної системи Linux.

Лабораторні заняття

Назва лабораторної роботи Кількість ауд. годин
= Три лабораторних за вибором =
1 Лабораторна робота 1. Технології розробки системних програм для POSIX сумісних (сертифікованих) операційних систем. 2
2 Лабораторна робота 2. Створення статичних і динамічних бібліотек для POSIX сумісних (сертифікованих) операційних систем. 2
3 Лабораторна робота 3. Розробка графічного інтерфейсу з використанням бібліотеки Qt для стандартних потоків вводу-виводу. 2
4 Лабораторна робота 4. Розробка графічного інтерфейсу для роботи з базами даних на остові бібліотек Qt. 2
5 Лабораторна робота 5. Створення графічного інтерфейсу для мережевих застосунків з використанням бібліотек Qt. 2
6 Лабораторна робота 6. Технології розробки модулів ядра для операційної системи Linux. 2
7 Лабораторна робота 7. Розробка модуля модуля ядра Linux. 2
8 Лабораторна робота 8. Графічний інтерфейс для модуля ядра Linux на основі бібліотеки Qt. 4

Самостійна робота студента/аспіранта

Очна форма

Назва теми, що виноситься на самостійне опрацювання Кількість годин СРС
1 Глобальні та локальні змінні. Концепція вкладеного циклу. Типи даних користувача (структури, об'єднання), масиви. Масиви. Властивості масивів. Зв'язок масивів і покажчиків. C-рядки, особливості масивів символів. Поняття архітектури операційної системи. Ядро і системне програмне забезпечення. Привілейований режим і режим користувача. Монолітна архітектура. Багаторівнева архітектура. Мікроядрова архітектура. 12
2 Права і користувачі. Загальний опис структури ОС Linux. Створення і керування користувачами. Опис і завдання прав доступу користувачів. Основні групи користувачів.Файлові системи і загальні принципи організації файлового простору. Опис стандартної структури каталогів UNIX-систем. Призначення основних каталогів. Монтування файлових систем. Права доступу до файлів. Мультипрограмування. Процес і поток. Моделі процесів і потоків. Потоки ядра і потоки користувача. Керування потоками, планування. Опис процесів і потоків: керуючий блок, образ, дескриптор і контекст. Стани потоків. Створення процесів 11
3 Оголошення, опис і виклик функції(методів). Параметри функції (методів) та типи значення що повертає. Скалярні величини як параметри функцій (методів). Структури та рядки як параметри функцій (методів). Масиви як параметри функцій (методів). Покажчики і посилання як параметри функції (методів). Загальний огляд стандартної бібліотеки С++. Рядки, потоки вводу-виводу, локалізація, виключення, математичні утиліті, часові утиліти, випадкові числа, кортежі, регулярні вирази, стандартна бібліотека шаблонів, стандартні бібліотечні алгоритми. 10
4 Неявне перетворення об’єктів похідного класу до базового. Спадкування у конструюванні програмного забезпечення. Складне спадкування. Перетворення покажчиків базового класу у покажчики на похідний клас.Перевизначення елементів базового класу у похідному класі. Відкриті, захищені та закриті базові класи. Безпосередні та непрямі базові класи. Використання конструктора і деструктора у похідному класі. Механізми абстракції і реалізація інтерфейсів у мові програмування С++. 10
5 Виклик віддалених процедур Remote Procedure Call (RPC). Налаштування і управління периферійними пристроями МПС на прикладі СОМ порту. Дослідження сигналу лінії TxD. Запис і читання інформації СОМ порту у синхронному режимі. 10
6 Види тестування за запуском коду на виконання: статичне, динамічне. За доступом до коду та архітектури додатка: вlack box, White box, Gray box. 10
7 Патерни проектування що породжують. Загальний опис патернів: Абстрактна фабрика, будівельник, фабричний метод, прототип. Докладний розгляд патерну одинак. Структурні патерни проектування. Загальний опис патернів: Адаптер, Міст, Компонувальник. Докладний опис патерну Декоратор. 15
8 Логічна і фізична адресація пам'яті. Віртуальна пам'ять. Динамічний розподіл пам'яті. Пули пам'яті. Куча за замовчуванням. Створення додаткового пулу пам'яті. Виділення та звільнення пам'яті в кучі. Перевірка коректності даних, які розміщені в кучі. Отримання інформації про захист сторінок пам'яті. 5
9 Організація протоколів прикладного рівня. Архітектура мережної підтримки Windows та Linux. Завдання керування введенням-виведенням. Фізична організація пристроїв введення-виведення. Контролери, регістри. Організація програмного забезпечення введення-виведення. 5

Заочна форма

Назва теми, що виноситься на самостійне опрацювання Кількість годин СРС
1 Глобальні та локальні змінні. Концепція вкладеного циклу. Типи даних користувача (структури, об'єднання), масиви. Масиви. Властивості масивів. Зв'язок масивів і покажчиків. C-рядки, особливості масивів символів. Поняття архітектури операційної системи. Ядро і системне програмне забезпечення. Привілейований режим і режим користувача. Монолітна архітектура. Багаторівнева архітектура. Мікроядрова архітектура. 12
2 Права і користувачі. Загальний опис структури ОС Linux. Створення і керування користувачами. Опис і завдання прав доступу користувачів. Основні групи користувачів.Файлові системи і загальні принципи організації файлового простору. Опис стандартної структури каталогів UNIX-систем. Призначення основних каталогів. Монтування файлових систем. Права доступу до файлів. Мультипрограмування. Процес і поток. Моделі процесів і потоків. Потоки ядра і потоки користувача. Керування потоками, планування. Опис процесів і потоків: керуючий блок, образ, дескриптор і контекст. Стани потоків. Створення процесів 11
3 Оголошення, опис і виклик функції(методів). Параметри функції (методів) та типи значення що повертає. Скалярні величини як параметри функцій (методів). Структури та рядки як параметри функцій (методів). Масиви як параметри функцій (методів). Покажчики і посилання як параметри функції (методів). Загальний огляд стандартної бібліотеки С++. Рядки, потоки вводу-виводу, локалізація, виключення, математичні утиліті, часові утиліти, випадкові числа, кортежі, регулярні вирази, стандартна бібліотека шаблонів, стандартні бібліотечні алгоритми. 10
4 Неявне перетворення об’єктів похідного класу до базового. Спадкування у конструюванні програмного забезпечення. Складне спадкування. Перетворення покажчиків базового класу у покажчики на похідний клас.Перевизначення елементів базового класу у похідному класі. Відкриті, захищені та закриті базові класи. Безпосередні та непрямі базові класи. Використання конструктора і деструктора у похідному класі. Механізми абстракції і реалізація інтерфейсів у мові програмування С++. 10
5 Виклик віддалених процедур Remote Procedure Call (RPC). Налаштування і управління периферійними пристроями МПС на прикладі СОМ порту. Дослідження сигналу лінії TxD. Запис і читання інформації СОМ порту у синхронному режимі. 10
6 Види тестування за запуском коду на виконання: статичне, динамічне. За доступом до коду та архітектури додатка: вlack box, White box, Gray box. 10
7 Патерни проектування що породжують. Загальний опис патернів: Абстрактна фабрика, будівельник, фабричний метод, прототип. Докладний розгляд патерну одинак. Структурні патерни проектування. Загальний опис патернів: Адаптер, Міст, Компонувальник. Докладний опис патерну Декоратор. 15
8 Логічна і фізична адресація пам'яті. Віртуальна пам'ять. Динамічний розподіл пам'яті. Пули пам'яті. Куча за замовчуванням. Створення додаткового пулу пам'яті. Виділення та звільнення пам'яті в кучі. Перевірка коректності даних, які розміщені в кучі. Отримання інформації про захист сторінок пам'яті. 15
9 Організація протоколів прикладного рівня. Архітектура мережної підтримки Windows та Linux. Завдання керування введенням-виведенням. Фізична організація пристроїв введення-виведення. Контролери, регістри. Організація програмного забезпечення введення-виведення. 15

Політика та контроль

Політика навчальної дисципліни (освітнього компонента)

Система вимог, які ставляться перед студентом:

  • відвідування лекційних та лабораторних занять є обов’язковою складовою вивчення матеріалу;
  • на лекції викладач користується власним презентаційним матеріалом; відпрацьовує практичну частину на віртуальній машині з встановленою відповідною РСУБД; використовує гугл-диск для викладання матеріалу поточної лекції, додаткових ресурсів, лабораторних робіт та інше; викладач відкриває доступ до певної директорії гугл-диска для скидання електронних лабораторних звітів та відповідей на МКР;
  • на лекції заборонено відволікати викладача від викладання матеріалу, усі питання, уточнення та ін. студенти задають в кінці лекції у відведений для цього час;
  • лабораторні роботи захищаються у два етапи – перший етап: студенти виконують завдання на допуск до захисту лабораторної роботи; другий етап – захист лабораторної роботи. Бали за лабораторну роботу враховуються лише за наявності електронного звіту;
  • модульні контрольні роботи пишуться на лекційних заняттях без застосування допоміжних засобів (мобільні телефони, планшети та ін.); результат пересилається у файлі до відповідної директорії гугл-диску;
  • заохочувальні бали виставляються за: активну участь на лекціях; участь у факультетських та інститутських олімпіадах з навчальних дисциплін, участь у конкурсах робіт, підготовка оглядів наукових праць; презентацій по одній із тем СРС дисципліни тощо. Кількість заохочуваних балів не більше 10;
  • штрафні бали виставляються за: невчасну здачу лабораторної роботи. Кількість штрафних балів не більше 10.

Види контролю та рейтингова система оцінювання результатів навчання (РСО)

  • студент отримує позитивну оцінку за результатами роботи у семестрі, якщо має підсумковий рейтинг за семестр не менш ніж 60 балів і виконав умови допуску, був присутній на заліку і не був видалений;
  • якщо студент виконав умови допуску РСО і має підсумковий рейтинг за семестр менш ніж 60 балів, або хоче підвищити оцінку, то він виконує залікову контрольну роботу або проходить залікову співбесіду, у день заліку. Питання (програма) заліку у Додатку 1;
  • лабораторні роботи захищаються у два етапи – перший етап: студенти виконують завдання на допуск до захисту лабораторної роботи; другий етап – захист лабораторної роботи. Бали за лабораторну роботу враховуються лише за наявності електронного звіту, вихідного коду, що не містить помилок, вихідний код (проект) розміщується на GitHub, або іншій аналогічній системі, за узгодженням з викладачем у відкритому вигляді або приватно;
  • модульні контрольні роботи пишуться на лекційних заняттях із застосуванням всіх доступних матеріалів;
  • заохочувальні бали виставляються за: активну участь на лекціях; участь у факультетських та інститутських олімпіадах з навчальних дисциплін, участь у конкурсах робіт, підготовка оглядів наукових праць; презентацій по одній із тем СРС дисципліни тощо. Кількість заохочуваних балів на більше 10;
  • штрафні бали виставляються за: невчасну здачу лабораторної роботи, затримка більше ніж 3 тиждня. Кількість штрафних балів на більше 10.

Система рейтингових балів та критерії оцінювання

Для позитивної оцінки знання синтаксису мов програмування С(С++) є обов'язковою.
Модульні контрольні роботи (Дозволяється об'єднувати дві модульні контрольні роботи у одну, оцінка у такому випадку збільшуються у двічі):
  • «відмінно» – 2,5 балів, повна відповідь (не менше 90% потрібної інформації), відрізняти процедурне і ООП рішення, вміння користуватися знаннями для практичного програмування на рівні навичок, вміння вирішити завдання у декілька варіантів, визначити перевагу і недоліки різних варіантів рішення, вміння читати і використовувати шаблонний вихідний код, розробляти власні шаблони і нестандартні рішення, розробляти і знати технологічний цикл рішення для модуля ядра і прикладних ООП рішень;
  • «дуже добре» – 2 бала, відрізняти процедурне і ООП рішення, достатньо повна відповідь (не менше 75% потрібної інформації) або повна відповідь з незначними недоліками; вміння користуватися вихідним кодом та знаннями для практичного програмування, наявність твердих навичок програмування, рішення у одному з варіантів, вміння читати і використовувати шаблонний вихідний код для рішення завдання, мати розуміння про типові шаблони, розробляти і знати технологічний цикл рішення для модуля ядра і прикладних рішень;
  • «добре» – 1,5 бала, відрізняти процедурне і ООП рішення, неповна відповідь (не менше 60% потрібної інформації) та незначні помилки, знання технології практичного програмування, вміння читати і використовувати вихідний код для рішення завдання, розробляти і знати технологічний цикл прикладних ООП рішень, розробляти рішення для модулів ядра з використанням додаткової літератури і ресурсів;
  • «задовільно» – 1 бал, відрізняти процедурне і ООП рішення, неповна відповідь (не менше 50% потрібної інформації), помилки, що вимагають допомоги викладача, наявність слабких практичних навичок програмування, вміння вирішувати задачу з використанням шаблонного відхідного коду і додаткової літератури (ресурсів), розробляти і знати технологічний цикл прикладних рішень, мати загальне розуміння про розробку модулів ядра.
  • «незадовільно» – 0 балів, відповідь не відповідає вимогам до «задовільно»/
Лабораторні роботи (Для позитивної оцінки наявність знань синтаксису мов програмування С(С++) є обов'язковим)
  • «відмінно» – 10 балів, повна відповідь (не менше 90% потрібної інформації), відрізняти процедурне і ООП рішення, вміння користуватися знаннями для практичного програмування на рівні навичок, вміння вирішити завдання у декілька варіантів, визначити перевагу і недоліки різних варіантів рішення, вміння читати і використовувати шаблонний вихідний код, розробляти власні шаблони і нестандартні рішення, розробляти і знати технологічний цикл рішення для модуля ядра і прикладних рішень;
  • «дуже добре» – 7,5 бала, відрізняти процедурне і ООП рішення, достатньо повна відповідь (не менше 75% потрібної інформації) або повна відповідь з незначними недоліками; вміння користуватися вихідним кодом та знаннями для практичного програмування, наявність твердих навичок програмування, рішення у одному з варіантів, вміння читати і використовувати шаблонний вихідний код для рішення завдання, розробляти і знати технологічний цикл рішення для модуля ядра і прикладних рішень;
  • «добре» – – 5 балів, відрізняти процедурне і ООП рішення, неповна відповідь (не менше 60% потрібної інформації) та незначні помилки, знання технології практичного програмування, вміння читати і використовувати вихідний код для рішення завдання, розробляти і знати технологічний цикл прикладних рішень, розробляти рішення для модулів ядра з використанням додаткової літератури і ресурсів;
  • «задовільно» – – 2,5 бала, відрізняти процедурне і ООП рішення, неповна відповідь (не менше 50% потрібної інформації), помилки, що вимагають допомоги викладача, наявність слабких практичних навичок програмування, вміння вирішувати задачу з використанням шаблонного відхідного коду і додаткової літератури (ресурсів), розробляти і знати технологічний цикл прикладних рішень, мати загальне розуміння про розробку модулів ядра.
  • «незадовільно» – 0 балів, відповідь не відповідає вимогам до «задовільно»/

За кожне заняття запізнення з поданням лабораторної роботи до захисту від встановленого терміну оцінка знижується на 1 бал. Викладач, що веде лабораторні роботи може внести свою корекцію у оцінку ЛР.

Залік

Студенти, які виконали всі умови допуску (не мають заборгованостей з обраної кількості лабораторних робіт, наявні усі електронні звіти) та набрали протягом семестру необхідну кількість балів, можуть здавати залік або погоджуватися з результатами поточного контролю; На заліку студенти виконують або письмову контрольну роботу або співбесіду, у залежності від способу навчання, у віддаленому варіанті співбесіда, у аудиторному варіанті за вибором викладача; білет містить 3 питання, що включають практичну і теоретичну складові. Перше питання має охоплювати технологію і особливості системного програмування, друге питання - загальні поняття про процедурне програмування на С, 3 питання - прикладне ООП з використанням С++. Програма надана у додатку 1.

  • «відмінно», повна відповідь (не менш ніж 90% потрібної інформації) – 9-10 балів;
  • «добре», достатньо повна відповідь (не менш ніж 75% потрібної інформації), або повна відповідь з незначними помилками – 7-8 балів;
  • «задовільно», неповна відповідь (але не менш ніж 60% потрібної інформації) та незначні помилки – 5-6 бали;
  • «незадовільно», незадовільна відповідь (неправильний розв’язок задачі), потребує обов’язкового повторного написання в кінці семестру – 0-4 балів.
Заохочувальні бали
  • за виконання творчих робіт з кредитного модуля (наприклад, участь у факультетських та інститутських олімпіадах з навчальних дисциплін, участь у конкурсах робіт, підготовка оглядів наукових праць тощо); за активну роботу на лекції (питання, доповнення, зауваження за темою лекції, коли лектор пропонує студентам задати свої питання) 1-2 бали, але в сумі не більше 10;
  • презентації по СРС – від 1 до 5 балів.

Сума набраних балів RD або балів за залікову роботу переводиться до залікової оцінки згідно з таблицею:

Таблиця 1. Переведення рейтингових балів до оцінок за університетською шкалою
Кількість балів Оцінка
100-95 Відмінно
94-85 Дуже добре
84-75 Добре
74-65 Задовільно
64-60 Достатньо
Менше 60 Незадовільно
Не виконані умови допуску Не допущено

Додаткова інформація з дисципліни (освітнього компонента)

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

Робочу програму навчальної дисципліни (Силабус):

Складено доцент, к.т.н., Катін Павло Юрійович

Ухвалено кафедрою ІСТ(протокол № 1 від 30.08.2021 р.)

Погоджено Методичною комісією факультету[1] (протокол № 1 від 30.08.2021 р.)

Додаток 1 - Розрахунок балів і оцінювання для 2021 року

Кількість лабораторних робіт 7, максимальна оцінка 10 балів за 1 ЛР. Відповідність балам оцінки за одну лабораторну роботу: задовільно 2,5; добре 5; дуже добре 7,5; відмінно 10.
Максимальна кількість балів за лабораторні роботи за поточний контроль 70 балів. Мінімальна кількість балів за лабораторні роботи за поточний контроль при умові, що всі лабораторні роботи виконані 35 балів. У тому випадку, коли здані всі лабораторні роботи і не набрано 35 балів надається студенту можливість за рахунок детального обговорення лабораторних робіт набрати додаткові бали. У загальній сумі не більше 35. За одну МКР 2,5 бала, максимальна кількість 5 балів, допускається об'єднувати МКР у одну, що оцінюється у 5 балів максимально. Максимальна кількість балів за поточний контроль - 75 балів. При наборі додаткових балів у тому разі, коли не набрано з початку потрібна кільність балів до допуску, максимальна кількість балів за поточний контроль не може перевищувати 60 балів. Умова допуску до заліку 35 балів, при умові, що захищені всі лабораторні роботи. На заліку максимально можливо отримати 25 баллов. 8,5 балів за 2 перших запитання. 8 балів за трете запитання.

Додаток 2 - Перелік теоретичних питань на залік

Приклад білету

  1. Основи стандарту POSIX сумісних ОС на прикладі Linux. Базові команди оболонки ОС для системного програмування. Теорія і практичне завдання.
  2. Функції мови С. Оголошення, описання, виклик. Передача змінних у функцію по значенню. Навести приклади функцій для управління периферійними пристроями. Теорія і практичне завдання.
  3. Оголошення конструктора, перевантаження конструктра і методів.  Практичні приклади використання у стилі С++. Теорія і практичне завдання.

І. Основи системного програмування

  1. Основи стандарту POSIX сумісних ОС на прикладі Linux. Базові команди оболонки ОС для системного програмування.
  2. Автоматична збірка з використанням Makefile. Основи синтаксису і макроси.
  3. Статичні і динамічні бібліотеки мови С (С++). Особливості роботи. Розробка з використанням Makefile.
  4. Процесс у операційній системі на прикладі POSIX сумісних ОС. Змінні оточення процесу і програмний доступ до них.
  5. Процесс у операційній системі у контексті багатозадачності на прикладі POSIX сумісних ОС. Програмне управління процесами. Управління процесами з оболонки ОС.
  6. Ядро операційної системи на прикладі Linux. Особливості розробки ядра операційной системи, технологія, програмні бібліотеки, стиль коду. Програмні архітектурні особливості ядра ОС.
  7. Планувальник процесів, багатопоточність і механізми штучної синхронізації процесів у програмному коді.
  8. Узагальнена архітектура POSIX сумісних ОС. Системні виклики.
  9. Програмні структури даних ядра Linux. Списки, черга бінарне дерево. Алгоритми.
  10. Програмний механізм обробки переривань системного рівня.
  11. Таймери і механізми часової синхронізації ядра ОС.
  12. Віртуальна файлова система.
  13. Драйвери пристроїв у Linux як модулі ядра.
  14. Технологія програмної розробки модулів ядра.
  15. Драйвери символьних пристроїв. Технологія розробки, стиль коду, завантаження і вивантаження.
  16. Драйвери символьних пристроїв. Технологія налагодження.
  17. Переривання і обробка переривань в контексті драйверу символьного пристрою.
  18. Управління памяттю на рівні ядра і на рівні користувача.
  19. Стандартні потоки I/O у стилі С (С++).
  20. Файли у POSIX сумісних операційних системах. Програмне управління файлами у стилі С (С++).
  21. Управління пам'яттю у стилі С та С++.
  22. Технологія розробки програм з використанням текстового редактору системного рівня.

ІІ. Процедурна парадигма С

  1. Функції мови С. Оголошення, описання, виклик. Передача змінних у функцію по значенню. Навести приклади функцій для управління периферійними пристроями.
  2. Функції мови С. Оголошення, описання, виклик. Передача змінних у функцію по покажчику, повернення значення з функції. Передача (повернення) у функцію масиву. Навести приклад функції – сортування масиву методом «бульбашка».
  3. Передача змінних у функцію через покажчик, повернення значення з функції.
  4. Функції мови С. Оголошення, описання, виклик. Передача у функцію структури. Передача (повернення) у функцію структури.
  5. Структури. Створення екземплярів структур. Передача структури у функцію і повернення з функції. Структура у стеку і на купі пам'яті.
  6. Об’єднання у мові С. Загальні риси структур і об’єднань. Різниця між структурами і об’єднаннями.
  7. Відкриття файлу, запис у файл, зчитування інформації з файлу, закриття файлу.
  8. Директиви препроцесора. Створення багатофайлових додатків. Використання умовної компіляції під час створення програм.
  9. Функції стандартного вводу мови С. Привести приклад використання функцій на прикладі сортування двовимірного масиву.
  10. Управління пам'яттю в стилі Сі malloc , calloc , realloc , free
  11. Етапи розробки програми з використанням компілятору GCC.
  12. Особливості препроцессінгу. Директиви препроцесору та умовна компіляція.
  13. Налагодження програмного забезпечення з використанням дебагеру gdb.
  14. Особливості тестування програм виконаних мовою С. Забезпечення надійності програм.

ІІІ. Теорія ООП.

1. Класи, конструктори, деструктори, константний метод,  синтаксис оголошення, приклади використання. Практичні приклади використання у стилі С + +. 2.  Оголошення конструктора, перевантаження конструктра і методів.  Практичні приклади використання у стилі С++. 3. Загальні правила перевантаження операторів приклади використання.  Практичні приклади використання у стилі С++. 4. Синтаксіс наслідування в С++. Приклади використання. Застосування наслідування. Типи успадкування.  Специфікатори доступу при спадкуванні. Практичні приклади використання у стилі С++. 5  Синтаксіс наслідування в С++. Приклади використання. Конструктори і деструктори при спадкуванні.  Приклади використання одиночного наслідування. Практичні приклади використання у стилі С++. 6. Статичні члени класу ( статичні змінні - члени , методи - члени ) в С++. Практичні приклади використання у стилі С++. 7. Виділення та очищення пам'яті. Практичні приклади використання у стилі С++. 8. Дінамічне створення екземплярів класу. Використання операторів new , new [] , delete , delete [].Практичні приклади використання у стилі С++. 9. Повернення масивів з функції. Варіанти реалізації приклади. Практичні приклади використання у стилі С++. 10.  Стандартна бібліотека шаблонів ( STL ). Основні поняття STL (контейнер, ітератор, алгоритм, функтор, предикат, аллокатор). Структура, стек, черга. Практичні приклади використання у стилі С++. 11.  Стандартна бібліотека шаблонів ( STL ). Основні поняття STL (контейнер, ітератор, алгоритм, функтор, предикат, аллокатор). Пов'язані списки. Двусвязний список. Практичні приклади використання у стилі С++. 12.  Стандартна бібліотека шаблонів ( STL ). Основні поняття STL (контейнер, ітератор, алгоритм, функтор, предикат, аллокатор). Бінарне дерево. Практичні приклади використання у стилі С++. 13. Шаблони функцій, шаблони класів, вкладений клас. Практичні приклади використання у стилі С++. 14. Реалізація інтерфейсів у стилі С++. Практичні приклади використання. 15. Введення в обробку виняткових ситуацій.  Ключове слово try.  Ключове слово catch. Ключове слово throw. Практичні приклади використання у стилі С++. 16. Робота з потоками в мові С + +. Поняття потоку.  Введення-виведення в мові С + +. Файловий ввід - висновок із застосуванням потоків. Практичні приклади використання у стилі С++. 17. Простори имен. Практичні приклади використання у стилі С++. Приклад. 18. Реалізація патернів ООП у стилі С++. 19. Особливості тестування програм виконаних мовою С++. Забезпечення надійності програм. Бібліотеки для тестування програм С++. 20. Принципи SOLID на прикладі С++.

Спрямованість практичних завдань

  1. Основи синтаксису Makefile. Коментарі, макроозначення і цільові зв'язки (або просто зв'язки). Написати приклад Makefile для різних умов і у різних шаблонах.
  2. Поняття репозіторія. Розділення на основний код і динамічні бібліотеки у репозіториях. Показати приклад файлового складу репозіторія.
  3. Написати функцію за обраним завданням. Показати процедурний варіант програми з її використанням.
  4. Написати клас за обраним завданням. Показати приклад використання класу.
  5. Прочитати вихідний код у ООП варіанті. Прорахувати результат роботи програми.
  6. Прочитати вихідний код у процедурному варіанті. Прорахувати результат роботи програми.
  7. Написати програму у ООП варіанті, що складається з декількох класів.
  8. Прочитати вихідний код у процедурному варіанті, що складається з декількох функцій і містить типи даних користувача. Прорахувати результат роботи програми.
  9. Прочитати вихідний код у ООП варіанті, що складається з декількох класів. Прорахувати результат роботи програми.
  10. Написати приклад коду, що являє собою патерн у процедурному варіанті.
  11. Написати приклад коду, що являє собою патерн у ООП варіанті.
  12. Написати приклад коду, що демонструє роботу директив препроцесора.
  13. Прочитати приклад коду, що демонструє роботу директив препроцесора.
  14. Написати приклад коду, що демонструє роботу механізму виключень у ООП.
  15. Прочитати приклад коду, що демонструє роботу механізму виключень у ООП.
  16. Прочитати приклад коду, що демонструє механізм роботи темплейтів.
  17. Написати приклад коду, що демонструє механізм роботи темплейтів.
  18. Продемонструвати приклад створення і технологію роботи з модулями ядра операційної системи.
  19. Продемонструвати приклад роботи з оболонкою операційної системи.

[1] Методичною радою університету – для загальноуніверситетських дисциплін.