Chociaż terminologia jest daleka od ustandaryzowanej, powszechnym sposobem jest kategoryzowanie głównych paradygmatów programowania
- Proceduralny
- Funkcjonalny
- Logiczny
- Obiektowy
- Ogólny
Wydaje się, że już wiesz, jak wygląda programowanie proceduralne.
W funkcjonalnych języków funkcje są traktowane jako obiekty najwyższej klasy. Innymi słowy, możesz przekazać funkcję jako argument do innej funkcji lub funkcja może zwrócić inną funkcję. Paradygmat funkcjonalny oparty jest na rachunku lambda, a przykładami języków funkcjonalnych są LISP, Schemat i Haskel. Co ciekawe, JavaScript obsługuje również programowanie funkcjonalne.
W programowaniu logicznym definiujesz predykaty, które opisują relacje między jednostkami, takimi jak president(Obama, USA)
lub president(Medvedev, Russia)
. Te predykaty mogą się bardzo skomplikować i obejmować zmienne, a nie tylko wartości literalne. Po określeniu wszystkich predykatów możesz zadawać pytania i uzyskać logicznie spójne odpowiedzi.
Wielkim pomysłem w logicznym programowaniu jest to, że zamiast mówić komputerowi, jak obliczać rzeczy, mówisz im, jakie są rzeczy. Przykład: PROLOG.
Paradygmat obiektowy jest w pewnym sensie rozszerzeniem programowania proceduralnego. W programowaniu proceduralnym masz swoje dane, które mogą być typami pierwotnymi, takimi jak liczby całkowite i zmiennoprzecinkowe, typy złożone, takie jak tablice lub listy, oraz typy zdefiniowane przez użytkownika, takie jak struktury. Masz również swoje procedury, które działają na danych. Natomiast w OO masz obiekty, które obejmują zarówno dane, jak i procedury. To pozwala mieć fajne rzeczy, takie jak enkapsulacja, dziedziczenie i polimorfizm. Przykłady: Smalltalk, C ++, Java, C #.
Programowanie ogólne zostało po raz pierwszy wprowadzone w Adzie w 1983 roku i stało się powszechne po wprowadzeniu szablonów w C ++. Jest to idea, że możesz pisać kod bez określania rzeczywistych typów danych, na których on działa, i kompilator musi to rozgryźć. Na przykład zamiast pisać
void swap(int, int);
void swap(float, float);
....
piszesz
void swap(T, T);
raz i T
niech kompilator wygeneruje określony kod dla tego, co może być, kiedy swap()
faktycznie jest używany w kodzie.
Programowanie ogólne jest obsługiwane w różnym stopniu przez C ++, Java i C #.
Należy zauważyć, że wiele języków, takich jak C ++, obsługuje wiele paradygmatów. Prawdą jest również to, że nawet jeśli mówi się, że język obsługuje określony paradygmat, może nie obsługiwać wszystkich jego cech. Nie wspominając o tym, że istnieje wiele sporów co do tego, które funkcje są wymagane dla danego paradygmatu.