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

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

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

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

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

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

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

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

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

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

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

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 або 1/3 від максимального балу в залежності від ступеня повноти; якщо відповідь невірна, то знімаються всі бали. 
Завдання практичної частини складаються в розробці комп’ютерних програм або їх фрагментів. Якщо студент виконав розрахунок вірно, то він одержує максимальний бал; якщо виконав не весь розрахунок, то знімається 3/4, 1/2 або 1/3 від максимального балу в залежності від ступеня повноти; якщо відповідь невірна, то знімаються всі бали. 

За результатами виконання лабораторних робіт та захисту протоколів студент може отримати до 15 балів за перший модуль та 10 балів за другий модуль, тобто 25 балів за семестр.
За результатами опитувань протягом лабораторних занять студент може отримати до 5 балів за кожний модуль, тобто 10 балів за семестр.
За результатами виконання РГР та захисту протоколів студент може отримати до 5 балів за другий семестр.
Якщо студент виконав лабораторну роботу, РГР  або відповів на опитування бездоганно та своєчасно, то ставиться максимальний бал; якщо правильно, але неповно, то знімається 1/2 або 1/3 від максимального балу в залежності від ступеня повноти; якщо невірно, то знімаються всі бали. 

Максимальна оцінка, яку може отримати здобувач за всі виконані види робіт – 100 балів. 

Підсумковим контролем з дисципліни є залік. Залік виставляється за підсумками модульних контрольних робіт та накопичувальної частини дисципліни

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

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

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

Здобувач зобов’язаний своєчасно та якісно виконувати всі отримані завдання, відвідувати консультації викладача з метою з’ясування всіх незрозумілих під час самостійної та індивідуальної роботи питань. Такий підхід сприяє формуванню академічної культури та академічної доброчесності, здобуттю навичок самостійної роботи і формування відповідних компетентностей як для успішного навчання на відповідному освітньому рівні, так і для майбутньої професійної діяльності.
Викладач на першому аудиторному занятті надає повну інформацію щодо усіх складових дисципліни, роз’яснює кількісне та якісне наповнення змістовних модулів, рекомендує відповідну фахову літературу, інформує щодо критеріїв оцінювання рівня навчальних досягнень здобувача з усіх видів та форм навчання та термінів контрольних заходів.
Викладач зобов’язаний здійснювати консультації відповідно до затвердженого завідувачем кафедри графіка консультацій.
Всі види завдань, які виконано після встановлених графіком навчального процесу та викладачем термінів вважаються «не зарахованими» та отримують, відповідно, оцінку «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).

2021 рік