Při jednom pohovoru tento týden jsem dostal otázku „jaký je rozdíl mezi funkčním, objektově orientovaným a procedurálním programováním“ a upřímně řečeno jsem nevěděl, jak na tuto otázku odpovědět (a o procedurálním programování jsem slyšel poprvé…). Proto jsem se dnes rozhodl trochu zapátrat a (pokusit se) pochopit, jaké jsou hlavní rozdíly.
Začněme několika definicemi:
“ Funkcionální programování (FP) je programovací paradigma – styl výstavby struktury a prvků počítačových programů – které považuje výpočet za vyhodnocování matematických funkcí a vyhýbá se datům s měnícím se stavem a mutovatelným datům.“ – Wikipedia
“ Objektově orientované programování (OOP) je programovací paradigma založené na konceptu „objektů“, které mohou obsahovat data v podobě polí, často označovaných jako atributy, a kód v podobě procedur, často označovaných jako metody.“ – Wikipedia
“ Procedurální programování je programovací paradigma, odvozené od strukturovaného programování, založené na konceptu volání procedur. Procedury, známé také jako rutiny, podprogramy nebo funkce, jednoduše obsahují řadu výpočetních kroků, které mají být provedeny.“ – Wikipedie
Ok, tak to je úvod, ale pojďme se tomu věnovat trochu podrobněji.
Předně, co je to programovací paradigma? Je to styl programování, způsob uvažování o konstrukci softwaru. Programovací paradigma neodkazuje na konkrétní jazyk, ale spíše na způsob programování, metodiku. Některé jazyky umožňují psát v některých paradigmatech, ale v jiných ne. Další podrobnosti najdete v článku na Wikipedii.
Nyní se ponoříme do tří programovacích paradigmat, která nás dnes zajímají:
Procedurální programování (PP), známé také jako inline programování, využívá přístup shora dolů. Jde o psaní seznamu instrukcí, které počítači krok za krokem říkají, co má udělat. Spoléhá se na procedury nebo rutiny.
Objektově orientované programování (OOP) spočívá v zapouzdření dat a chování do objektů. Aplikace OOP bude používat kolekci objektů, která ví, jak provádět určité akce a jak komunikovat s ostatními prvky aplikace. Objektem může být například osoba. Tato osoba by měla jméno (to by byla vlastnost objektu) a věděla by, jak chodit (to by byla metoda). Metodu v OOP lze považovat za proceduru v PP, ale zde patří konkrétnímu objektu. Dalším důležitým aspektem OOP jsou třídy. Třídu lze považovat za plán objektu.
Funkční programování (FP) je o předávání dat z funkce do funkce, aby se získal výsledek. V FP se s funkcemi zachází jako s daty, což znamená, že je můžete používat jako parametry, vracet je, vytvářet funkce z jiných funkcí a vytvářet vlastní funkce. Funkce v FP musí být čisté funkce, měly by se vyhýbat sdílenému stavu a vedlejší efekty a data by měly být neměnné. Čistá funkce je funkce, která při stejném typu vstupu vrátí vždy stejný výstup, není závislá na lokálním nebo globálním stavu. Sdílený stav je stav, který je sdílen mezi více než jednou funkcí nebo více než jednou datovou strukturou. U sdíleného stavu tedy k pochopení účinků funkce potřebujete znát všechny podrobnosti o každé sdílené proměnné. To zvyšuje složitost a umožňuje menší modularitu
.