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

Функціонально-орієнтоване програмування (англ. Feature-oriented programming) — загальна парадигма компонування програм у ряд програмних продуктів.

Функціонально-орієнтоване програмування виникло з шарового дизайну та рівнів абстракції в мережевих протоколах і розширюваних баз даних в кінці 1980-х років. Програму було представлено стосом шарів. Кожен шар додавав функціональність до попередніх, а різне комбінування цих шарів давало на виході різні програми. Не дивно, що постала потреба у створенні компактної мови для вираження таких проектів. Елементарна алгебра було саме те, що треба: кожен шар був функцією (перетворення програми), який додавав код в наявну програму для створення нової, дизайн програми було модельовано виразом, наприклад, компонуванням перетворень (шарів).

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

Подальший прогрес у ФОП пов'язано з визнанням наступних фактів: кожна програма має декілька представлень (наприклад, сирці, файли збирання Makefile, документація і т.д.) і додавання функціональності в програму може торкнутися кожного з цих представлень, щоб в кінці процесу всі вони були узгоджені. Крім того, деякі з цих представлень можуть бути походити від інших представлень.

Прикладом математик останніх поколінь ФОП можуть слугувати GenVoca, AHEAD і FOMDD.