În timpul unui interviu din această săptămână am fost întrebat „care este diferența dintre Programarea Funcțională, Orientată pe Obiecte și Programarea Procedurală” și, ca să fiu sincer, nu prea am știut ce să răspund la această întrebare (și era prima dată când auzeam despre Programarea Procedurală…). Așa că astăzi am decis să fac niște cercetări și să (încerc să) înțeleg care sunt principalele diferențe.
Să începem cu câteva definiții:
” Programarea funcțională (FP) este o paradigmă de programare – un stil de construire a structurii și elementelor programelor de calculator – care tratează calculul ca fiind evaluarea funcțiilor matematice și evită datele cu stare de schimbare și mutabile.” – Wikipedia
” Programarea orientată pe obiecte (OOP) este o paradigmă de programare bazată pe conceptul de „obiecte”, care pot conține date, sub formă de câmpuri, cunoscute adesea sub numele de atribute; și cod, sub formă de proceduri, cunoscute adesea sub numele de metode.” – Wikipedia
” Programarea procedurală este o paradigmă de programare, derivată din programarea structurată, bazată pe conceptul de apel de procedură. Procedurile, cunoscute și sub numele de rutine, subrutine sau funcții, conțin pur și simplu o serie de pași de calcul care urmează să fie executați.” – Wikipedia
Ok, deci aceasta este o introducere, dar haideți să intrăm puțin mai în detaliu.
În primul rând, ce este o paradigmă de programare? Este un stil de programare, un mod de a gândi despre construcția de software. O paradigmă de programare nu se referă la un limbaj specific, ci mai degrabă la un mod de a programa, o metodologie. Unele limbaje facilitează scrierea în anumite paradigme, dar nu și în altele. Pentru mai multe detalii, consultați articolul din Wikipedia.
Acum să ne scufundăm în cele trei paradigme de programare care ne interesează astăzi:
Programarea procedurală (PP), cunoscută și sub numele de programare în linie are o abordare de sus în jos. Este vorba despre scrierea unei liste de instrucțiuni pentru a spune calculatorului ce trebuie să facă pas cu pas. Se bazează pe proceduri sau rutine.
Programarea orientată pe obiecte (OOP) se referă la încapsularea datelor și a comportamentului în obiecte. O aplicație OOP va utiliza o colecție de obiecte care știe cum să efectueze anumite acțiuni și cum să interacționeze cu alte elemente ale aplicației. De exemplu, un obiect poate fi o persoană. Această persoană ar avea un nume (care ar fi o proprietate a obiectului) și ar ști cum să meargă (care ar fi o metodă). O metodă în OOP poate fi considerată ca o procedură în PP, dar aici ea aparține unui obiect specific. Un alt aspect important al POO sunt clasele. O clasă poate fi considerată ca o schiță pentru un obiect.
Programarea funcțională (FP) se referă la trecerea datelor de la o funcție la alta pentru a obține un rezultat. În FP, funcțiile sunt tratate ca date, ceea ce înseamnă că puteți să le folosiți ca parametri, să le returnați, să construiți funcții din alte funcții și să construiți funcții personalizate. Funcțiile în FP trebuie să fie funcții pure, trebuie să evite starea partajată, iar efectele secundare și datele trebuie să fie imuabile. O funcție pură este o funcție care, dat fiind același tip de intrare, va returna întotdeauna aceeași ieșire, nu depinde de o stare locală sau globală. O stare partajată este o stare care este partajată între mai multe funcții sau mai multe structuri de date. Astfel, în cazul unei stări partajate, pentru a înțelege efectele unei funcții, trebuie să cunoașteți toate detaliile fiecărei variabile partajate. Aceasta adaugă multă complexitate și permite mai puțină modularitate.
.