Функціональне програмування

Elective discipline
Навчальна дисципліна професійної підготовки
Обсяг освітнього компонента: 
• у кредитах ЄКТС — 6.0.
Кількість аудиторних занять: 
30 годин лекційних занять, 16 годин лабораторних занять.
Самостійна робота: 
складає 134 години.
Індивідуальна робота: 
• очна форма — розрахунково-графічна робота.
Семестровий контроль: 
Exam.
Освітню компоненту забезпечує: 
Анотація: 

Анотація навчальної дисципліни

Мета дисципліни:
вивчення можливостей та засобів функціонального програмування і розвиток навичок їх практичного застосування.

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

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

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

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

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

Л – лекційні заняття; ЛЗ – лабораторні заняття; СРС – самостійна робота здобувача вищої освіти; МКР – модульна контрольна робота; РГР – розрахунково-графічна робота; К – консультації.

Тематика та види навчальних занять

1    тиждень

Л1. Основні відомості про функціональне програмування.
ЛЗ1. Мова Haskell. Перші програми. 
СРС. К.

2    тиждень

Л2. Відмінності функціонального програмування від інших стилів.
СРС. К.

3    тиждень

Л3. Основні конструкції мови Haskell.
ЛЗ2. Робота з числами на мові Haskell. Розробити свою програму для роботи зі списками чисел в функціональному стилі.
СРС. К.

4    тиждень

Л4. Основні конструкції мови Haskell (продовження).
СРС. К.

5    тиждень

Л5. Приклади програм на мові Haskell

ЛЗ3. Просунуті можливості мови Haskell: лямбда-функції, pattern-matching, тип Maybe, типи Text і Sequence.
СРС. К.

6    тиждень

Л6. Вбудовані та стандартні типи мови Haskell.

СРС. К.

7    тиждень

Л7. Створення власних типів даних в Haskell.
ЛЗ3. Просунуті можливості мови Haskell: створювання і застосування власних типів даних.
СРС. К.

8    тиждень

Л8. Класи в Haskell
МКР1. СРС. К.

9    тиждень

Л9. Монади IO для опису дій з зовнішнім світом в Haskell.
ЛЗ4. Монади в мові Haskell: вбудовані монади для роботи з послідовностями дій та з файлами, а також свої монади IO.
СРС. К.

10    тиждень

Л10. Монади-список та монади Maybe в Haskell
СРС. К.

11    тиждень

Л11. Основи ELM.
ЛЗ5. Web-сторінки на мові ELM: програми, що доповнюють розглянуті на лекції перші три проекти 
СРС. К.

12    тиждень

Л12. ELM. Перші проекти.
СРС. К.

13    тиждень

Л13. Просунуті проекти в ELM.
ЛЗ5. Web-сторінки на мові ELM: програми, що доповнюють розглянуті на лекції останні два проекти
СРС. К.

14    тиждень

Л14. Розробка веб-застосування, що реалізує гру «Хрестики-нулики»
МКР2. СРС. К.

15    тиждень

Л15. Функціональне програмування в С++
ЛЗ6. Можливості функціонального програмування в С++: функції високих порядків, лямбда-визначення, захоплення змінних, std:function, bind, функтори, хвостова рекурсія. С++ починаючи з версії 11.
СРС. К.

Індивідуальна робота 

Виконується РГР. Мета виконання розрахунково-графічної роботи (РГР) складається в закріпленні, поглибленні й розширенні отриманих студентами знань в ході роботи на лекціях та лабораторних заняттях, в оволодінні практичними навичками функціонального програмування при розробці складних програм.

РГР передбачає розробку графічного редактору з власними типами даних (мова Haskell) та веб-застосування для гри «Хрестики-нулики» (мова ELM)  

12 тиждень

Одержання й уточнення завдання. Розробка програм

13 тиждень

Оформлення пояснювальної записки.

14 тиждень

Захист першої частини РГР.

15 тиждень

Захист другої частини РГР.

Процедура оцінювання
Модульні контрольні роботи №1 і №2 виконуються у письмовій формі. Максимальна оцінка за бездоганне виконання модульних контрольних робіт становить 30 балів.
Модульні контрольні роботи містять написання програм або їх фрагментів, а також відповіді на запитання. Для модульної контрольної роботи №1 бали по завданням розподіляються наступним чином: максимально – 5, 5, 10, 10 (всього – 30 балів). Для модульної контрольної роботи №2 бали по завданням розподіляються наступним чином: максимально – 5, 5, 5, 5, 10 (всього – 30 балів). 
Якщо відповідь на теоретичне питання правильна та повна, то ставиться максимальний бал; якщо правильна, але неповна, то знімається 1 або 2 бали в залежності від ступеня повноти; якщо відповідь невірна, то знімається 5 балів. 
Завдання практичної частини складаються в розробці комп’ютерних програм або їх фрагментів. Якщо студент розробив програму, що виконує і основні, і допоміжні функції, то він одержує 10 балів. Якщо студент розробив програму, що виконує основні свої функції, але допоміжні – ні, то знімається 2 бали. Якщо студент розробив програму, що виконує тільки допоміжні функції, а основні  – ні, то знімаються 5 балів. Якщо розроблена програма невірна, то знімається 10 балів.

Накопичувальна частина дисципліни складається з поточного контрольного опитування на лекціях та лабораторних заняттях, виконання 6-и лабораторних робіт та РГР.
Виконання та захист кожної з 3х лабораторних робіт у першому семестровому модулі  оцінюється 5-ма балами, у другому семестровому модулі лабораторні роботи оцінюються  відповідно 3-ма балами, 4-ма балами і 3-ма балами.
Виконання та захист РГР у другому семестровому модулі оцінюється 5-ма балами.
На кожному з 8 лабораторних занять виконується поточне опитування. За семестр студент максимально одержує за це 10 балів,  за кожне – 1,43 балів.

Контрольне опитування проводиться в усній формі на лабораторних заняттях у вигляді відповідей на питання. 
Бездоганне виконання контрольного опитування оцінюється в 1.43 балів. Помилки зменшують кількість балів до 0.5. Відсутність відповіді – 0 балів.
Якщо студент не зміг відповісти на теоретичне питання, то знімається 0.5 бали, якщо відповів неповно або з помилками, то знімається 1 бал. 

Виконання лабораторних робіт та РГР – це розробка програм на комп’ютері, їх наладка і перевірка. Результати роботи оформляються у вигляді протоколу, який містить постановку задачі (задач), лістинг розроблених програм, результати їх роботи. 
При захисті студент розповідає про роботу, що виконана, по протоколу, а потім демонструє роботу програм на комп’ютері. При захисті необхідно відповісти на питання викладача щодо самої роботи, а також пов’язаних з нею теоретичних питань.
Бездоганне і своєчасне виконання та захист лабораторної роботи оцінюється максимальним балом, що встановлено за цю роботу.
Якщо студент запізнюється, то знімається по 1 балу за кожне минуле заняття.
Якщо студент розробив програму, що не виконується на комп’ютері, то знімаються всі бали.
Якщо студент не оформив протокол роботи по всім вимогам щодо оформлення, знімаються всі бали.
Якщо студент розробив програму, що виконує основні свої функції, але деякі допоміжні – ні, то знімається 1 бал.
Якщо студент не зміг відповісти на всі запитання викладача щодо захисту роботи, то знімаються всі бали.
Якщо студент не зміг відповісти на деякі запитання викладача щодо захисту роботи, то знімаються 1 або 2 бали в залежності від повноти знань студента.
Якщо студент не оформив протокол роботи по всім вимогам щодо оформлення, знімаються всі бали.
Якщо студент розробив програму, що виконує основні свої функції, але деякі допоміжні – ні, то знімаються 2 бали.
Якщо студент не зміг відповісти на деякі запитання викладача щодо захисту роботи, то знімаються 1, 2, 3, 4 або 5 балів в залежності від повноти знань студента та максимальної оцінки за роботу.
Для допуску до модульного контролю необхідно виконати і захистити принаймні перші дві з трьох лабораторних робіт модуля.

Підсумковим контролем з дисципліни є усний екзамен, білет до якого складається з теоретичної частини (2 запитання) та практичної частини (5 задач). За бездоганну відповідь на кожне теоретичне питання студент отримує – 20 балів. За бездоганне виконання кожного завдання практичної частини студент отримує – 12 балів. 
Максимальна оцінка за правильні відповіді на всі питання екзаменаційного білету становить 100 балів.

Семестровий модуль № 1
ЛЗ1- ЛЗ3. Оцінка за виконання – 20 балів. Термін виконання – 1-8 тиждень. 
МК1. Модульна контрольна робота – 30 балів (8 тиждень). Перескладання можливе протягом 9–11 тижнів за розкладом консультацій.

Семестровий модуль № 2
ЛЗ5- ЛЗ8. Оцінка за виконання – 15 балів. Термін виконання – 9-15 тиждень. 
МК2. Модульна контрольна робота – 30 балів (14 тиждень).
РГР. Оцінка за виконання – 5 балів. Термін надання 14-15 тиждень.

Умови допуску до підсумкового контролю

До екзамену допускаються здобувачі вищої освіти, які виконали всі види навчальних елементів навчальної дисципліни на не менш, ніж на 60 %.

Екзамен відбувається за всіма тематичними (змістовними) модулями дисципліни.

Політика освітнього процесу

Здобувач зобов’язаний своєчасно та якісно виконувати всі отримані завдання, відвідувати консультації викладача з метою з’ясування всіх незрозумілих під час самостійної та індивідуальної роботи питань. Такій підхід сприяє формуванню академічної культури та академічної доброчесності, здобуттю навичок самостійної роботи і формування відповідних компетентностей як для успішного навчання на відповідному освітньому рівні, так і для майбутньої професійної діяльності.
Викладач на першому аудиторному занятті надає повну інформацію щодо усіх складових дисципліни, роз’яснює кількісне та якісне наповнення змістовних модулів, рекомендує відповідну фахову літературу, інформує щодо критеріїв оцінювання рівня навчальних досягнень здобувача з усіх видів та форм навчання та термінів контрольних заходів.
Викладач зобов’язаний здійснювати консультації відповідно до затвердженого завідувачем кафедри графіка консультацій.
Всі види завдань, які виконано після встановлених графіком навчального процесу та викладачем термінів вважаються «не зарахованими» та отримують, відповідно, оцінку «0».
Відсутність здобувача на МКР відповідає оцінці «0». Складання/перескладання контрольних робіт відбувається за встановленим деканатом розкладом.
Під час контрольних робіт користуватися телефонами заборонено. Заборонено використання будь-яких літературних джерел, конспектів лекцій, шпаргалок під час проходження модульних контролів з дисципліни.

Документи (файли), що додаються: Робоча програма навчальної дисципліни.

Література

Базова
1. Денис Шевченко. О Haskell по-человечески / Книга вільно розповсюджується на умовах ліцензії CC BY-NC 4.0, видання 2.0 – 147с. – 2016. – Електронний примірник www.ohaskell.guide
2. Антон Холомьев. Учебник по Haskell / Книга зареєстрована під ліцензією Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Generic license (CC BY-NC-ND 3.0) – 329 с. -  2012. - Електронний примірник
 https://anton-k.github.io/ru-haskell-book/files/ru-haskell-book.pdf
3. Душкин Р. В. Функциональное программирование на языке Haskell. М.:  ДМК Пресс,
2008 – 604с. – Електронний примірник
https://litportal.ru/avtory/roman-dushkin/kniga-funkcionalnoe-programmir...

Додаткова
4. Н. А. Роганова Функциональное программирование: Учебное пособие для студентов высших учебных заведений — М.: ГИНФО, 2002. — 260 с.
5. Миронов А. М. Теория функциональных программ. Часть 1. М.: ИПИ РАН, 2013. – 160с. – Електронний примірник http://is.ifmo.ru/verification/2013/mironov-functional.pdf
6. Hal Daum´e III. Yet Another Haskell Tutorial – 2006. – p.192 – Електронний примірник http://users.umiacs.umd.edu/~hal/docs/daume02yaht.pdf

Методична
7. Методичні вказівки до лабораторних робіт з дисципліни «Функціональне  програмування” для студентів спеціальності 121 – Інженерія програмного забезпечення / Уклали В.М. Рувінська, Л.С. Жиро. – Одеса: ОНПУ. 2018. –25 с. – (ел. версія, рег. МВ09899 (№6200-РС-2018) від 23.10.2018).
8. Методичні вказівки до розрахунково- графічної роботи з дисципліни «Функціональне  програмування” для студентів спеціальності 121 – Інженерія програмного забезпечення / Уклали В.М. Рувінська, Л.С. Жиро. – Одеса: ОНПУ. 2019. –15 с. – (ел. версія, рег. МВ11186 (№71936200-РС-2019) від 20.12.2019).
9. Методичні вказівки до практичних занять з дисципліни “Функціональне програмування ” для студентів спеціальності 121 – Інженерія програмного  забезпечення /Укл.: В.М. Рувінська, Л.С .Жиро. – Одеса: ОНПУ, 2020 . – с. 31– (ел. версія, рег. МВ11238 (№7424-РС-2020 від 24.06.2020).
10. Методичні вказівки до виконання контрольних завдань з дисципліни “Функціональне програмування” для студентів спеціальності 121 – Інженерія програмного  забезпечення заочної форми навчання /Укл.: В.М. Рувінська. – Одеса: ОНПУ, 2020. – с. 24 – (ел. версія, рег. МВ11237 (№7464-РС-2020) від 24.06.2020).

2020