Podczas rozmowy kwalifikacyjnej w tym tygodniu zostałem zapytany „jaka jest różnica pomiędzy Programowaniem Funkcjonalnym, Obiektowym i Proceduralnym” i szczerze mówiąc nie bardzo wiedziałem jak odpowiedzieć na to pytanie (i był to pierwszy raz kiedy usłyszałem o Programowaniu Proceduralnym…). Więc dzisiaj, postanowiłem zrobić trochę badań i (spróbować) zrozumieć jakie są główne różnice.
Zacznijmy od kilku definicji:
” Programowanie funkcyjne (FP) to paradygmat programowania – styl budowania struktury i elementów programów komputerowych – który traktuje obliczenia jako ocenę funkcji matematycznych i unika danych zmiennopozycyjnych i mutowalnych.” – Wikipedia
” Programowanie zorientowane obiektowo (OOP) to paradygmat programowania oparty na koncepcji „obiektów”, które mogą zawierać dane, w postaci pól, często znanych jako atrybuty; oraz kod, w postaci procedur, często znanych jako metody.” – Wikipedia
” Programowanie proceduralne to paradygmat programowania, wywodzący się z programowania strukturalnego, oparty na koncepcji wywołania procedury. Procedury, zwane również procedurami, podprogramami lub funkcjami, zawierają po prostu serię kroków obliczeniowych, które należy wykonać.” – Wikipedia
Ok, więc to jest wstęp, ale zagłębmy się w nieco więcej szczegółów.
Po pierwsze, co to jest paradygmat programowania? Jest to styl programowania, sposób myślenia o budowie oprogramowania. Paradygmat programowania nie odnosi się do konkretnego języka, ale raczej do sposobu programowania, metodologii. Niektóre języki ułatwiają pisanie w niektórych paradygmatach, a w innych nie. Więcej szczegółów można znaleźć w artykule w Wikipedii.
Zanurzmy się teraz w trzech paradygmatach programowania, które nas dzisiaj interesują:
Proceduralne programowanie (PP), znane również jako programowanie inline, przyjmuje podejście top-down. Polega na pisaniu listy instrukcji, które mówią komputerowi, co ma robić krok po kroku. Opiera się na procedurach lub rutynach.
Programowanie zorientowane obiektowo (OOP) polega na hermetyzacji danych i zachowań w obiektach. Aplikacja OOP będzie korzystać z kolekcji obiektów, które wiedzą, jak wykonywać pewne działania i jak współdziałać z innymi elementami aplikacji. Na przykład, obiektem może być osoba. Ta osoba miałaby imię (to byłaby właściwość obiektu), i wiedziałaby jak chodzić (to byłaby metoda). Metoda w OOP może być uważana za procedurę w PP, ale tutaj należy ona do konkretnego obiektu. Innym ważnym aspektem OOP są klasy. Klasa może być uważana za schemat obiektu.
Programowanie funkcjonalne (FP) polega na przekazywaniu danych z funkcji do funkcji, aby uzyskać wynik. W FP, funkcje są traktowane jako dane, co oznacza, że można ich używać jako parametrów, zwracać je, budować funkcje z innych funkcji i budować własne funkcje. Funkcje w FP muszą być czystymi funkcjami, powinny unikać współdzielonego stanu, a efekty uboczne i dane powinny być niezmienne. Czysta funkcja jest funkcją, która biorąc pod uwagę ten sam typ danych wejściowych zawsze zwróci to samo wyjście, nie jest zależna od stanu lokalnego lub globalnego. Stan współdzielony to stan, który jest współdzielony pomiędzy więcej niż jedną funkcją lub więcej niż jedną strukturą danych. Tak więc ze stanem współdzielonym, aby zrozumieć efekty funkcji, musisz znać wszystkie szczegóły każdej współdzielonej zmiennej. Dodaje to wiele złożoności i pozwala na mniejszą modularność.