Paradigmă de programare | un mod de grupare a limbajelor de programare în funcție de ceea ce fac
Paradigmele de programare reprezintă o modalitate de grupare a limbajelor de programare în funcție de ceea ce fac. Limbajele se pot regăsi în mai multe paradigme.
Unele paradigme se referă la modul în care este executat codul, cum ar fi permiterea efectelor secundare sau necesitatea de a face lucrurile într-o anumită ordine. Alte paradigme analizează modul în care este grupat codul, cum ar fi gruparea codului în una sau două bucăți (sau, în schimb, în mai multe bucăți mici). Alte paradigme se uită la ordinea și la piesele care fac ca programul să fie așa cum este.
Există două grupuri principale de paradigme, imperative și declarative. Un limbaj poate fi ambele în același timp.
Programare imperativă
În programele imperative, programatorii oferă computerului un set de pași ordonați care trebuie parcurși pentru a face ceva. Dacă cineva ar dori ca computerul să deseneze o față de pisică, ar putea da instrucțiuni de genul "Desenează un cerc aici, desenează două cercuri mai mici acolo, desenează două triunghiuri deasupra" și așa mai departe. Programele imperative au uneori o mulțime de efecte secundare.
Există două paradigme imperative majore și, de cele mai multe ori, un limbaj le va avea pe amândouă:
- Structurat - Computerul primește instrucțiuni care sunt întotdeauna într-o anumită ordine. Nu sunt permiși pași de genul "întoarce-te la pasul 3" (cunoscuți ca instrucțiuni goto).
- Procedural - Programul permite programatorului să dea un nume unei liste de comenzi, ceea ce transformă aceste comenzi într-o "procedură" pe care o poate utiliza ulterior. Majoritatea limbajelor structurate sunt, de asemenea, procedurale.
- Orientată pe obiecte - Ideile sunt explicate computerului prin intermediul obiectelor, bucăți de cod care au un set de ordine care pot fi date și unele informații despre ele.
Programare declarativă
În paradigmele declarative, programatorul îi spune computerului ce să facă în loc să îi spună cum să facă. Dacă ar dori ca computerul să deseneze o față de pisică, ar putea da instrucțiuni de genul "Desenează o față, desenează doi ochi, două urechi și o gură".
Cele mai cunoscute paradigme declarative sunt:
- Funcțional - Cea mai mare parte a activității este efectuată de funcții fără efecte secundare.
- Logică - Se enunță un set de fapte și apoi se pun una sau mai multe "întrebări".
- Conduce la evenimente - Bucăți de cod sunt setate să ruleze atunci când se întâmplă anumite lucruri (cum ar fi pornirea computerului).
Alte paradigme
Unele paradigme pot fi găsite atât în limbajele imperative, cât și în cele declarative. Aceste paradigme se regăsesc, de obicei, împreună cu una dintre paradigmele de mai sus, în loc de a fi utilizate de sine stătător.
- Paralelă: Mai mult de o bucată de cod este executată în același timp.
- Meta: Lucrurile speciale din limbaj permit programatorului să schimbe modul în care acționează limbajul însuși.
Prezentare generală
Limbajele de programare sunt grupate pe paradigme în același mod în care mașinile pot fi grupate în funcție de scopul pentru care sunt folosite.
Câteva limbi se încadrează într-o singură paradigmă principală, cum ar fi:
- Smalltalk (orientată pe obiecte)
- Asamblare (imperativă, dar nu structurată sau orientată pe obiecte)
- Haskell (funcțional)
- Prolog (logică)
Majoritatea limbilor, însă, se regăsesc în mai multe paradigme. Unele dintre cele care se remarcă prin faptul că au mai mult de una singură sunt:
- Scala (orientată pe obiecte, funcțională, paralelă)
- Visual Basic (bazat pe evenimente, orientat pe obiecte)
- Common Lisp (procedural, funcțional, orientat obiect, meta)
- Schema (funcțională, procedurală, meta)
- Perl (funcțional, procedural, meta, orientat pe obiecte, orientat pe evenimente)
- Python (funcțional, orientat pe obiecte, procedural)
- Ruby (funcțional, orientat pe obiecte, procedural)
- Wolfram Language (funcțional, procedural, în general declarativ)
- Oz (logic, funcțional, imperativ, orientat pe obiecte)
- F# (funcțional, imperativ, orientat pe obiecte, meta)
A avea mai multe paradigme nu este întotdeauna un lucru bun. Un moment în care a avea mai puține paradigme poate fi un lucru bun este atunci când există un limbaj care este doar funcțional. O funcție într-un astfel de limbaj face uneori mai puțină muncă (cum ar fi să parcurgă doar părțile unui grup de lucruri de care are nevoie) decât ar fi trebuit să o facă dacă limbajul ar fi fost și procedural.
Multe paradigme de programare sunt la fel de bine cunoscute atât pentru lucrurile pe care nu le permit oamenilor să le facă, cât și pentru cele pe care le permit. Un caz în care acest lucru este adevărat este cel al limbajelor funcționale. Atunci când un limbaj funcțional este numai sau în mare parte funcțional, acesta nu permite, de obicei, efecte secundare. Un alt caz în care acest lucru este valabil este cel al programării structurate: este diferit de limbajele imperative normale deoarece nu permite programatorilor să folosească "instrucțiuni goto" (instrucțiuni care indică programului să treacă la o etapă anterioară). Din acest motiv și din alte motive, oamenii cred uneori că noile paradigme nu permit suficiente lucruri. Cu toate acestea, uneori este în regulă ca computerul să nu permită oamenilor să facă anumite lucruri: poate ajuta oamenii să evite problemele cu codul lor și poate lăsa computerul să facă presupuneri pentru a putea rula codul mai repede sau chiar să verifice dacă există probleme în cod înainte ca acesta să fie executat!
Prezentare generală a diferitelor paradigme de programare conform lui Peter Van Roy
Probleme cu paradigmele
Unele persoane care studiază limbajele de programare nu apreciază faptul că paradigmele sunt folosite pentru a grupa limbajele de programare, cum ar fi Harper și Krishnamurthi. Acești oameni spun că o mulțime de limbaje de programare nu pot fi grupate în paradigme, deoarece limbajele împrumută lucruri și idei de la o mulțime de paradigme.
Istoric
De-a lungul timpului au fost create noi paradigme, iar oamenii fie le-au subliniat la momentul respectiv, fie când au privit înapoi. Una dintre primele paradigme care a fost recunoscută ca un nou mod de programare a fost programarea structurată din anii 1960. Ideea de "paradigmă de programare" datează din 1978, dacă nu mai devreme, când Robert W. Floyd a folosit-o în timp ce preda. Cuvântul "paradigmă", în sensul în care Robert îl înțelegea, a fost folosit pentru prima dată de Thomas Kuhn în cartea sa, Structura revoluțiilor științifice (1962).
Cod mașină
Cea mai de jos nivel (cea mai apropiată de modul în care calculatorul înțelege lucrurile) și cea mai veche paradigmă de programare este codul mașinii, o paradigmă imperativă. Direcțiile din codul mașină sunt doar un set de numere într-o anumită ordine. Limbajul de asamblare este un pic mai puțin de nivel scăzut (și un pic mai puțin vechi). În limbajul de asamblare, direcțiile pentru calculator sunt date prin mnemotehnici (nume mai ușor de reținut), iar adresele de memorie (direcții pentru a găsi o informație în calculator) pot primi nume. Acestea sunt uneori numite limbaje de prima și a doua generație.
În anii 1960, limbajele de asamblare au fost îmbunătățite prin adăugarea de noi elemente, cum ar fi biblioteca COPY, macro (bucăți de cod "special" care se transformă în cod normal înainte ca programul să înceapă să ruleze), proceduri de execuție (seturi de instrucțiuni cărora li se dă un nume și care sunt salvate pentru mai târziu) și variabile (elemente cărora li se dă un nume și care sunt salvate pentru mai târziu) din afara programului. Acest lucru permitea oamenilor să folosească anumite coduri în mai multe proiecte și să nu fie nevoiți să se îngrijoreze de problemele specifice hardware-ului (probleme care apar doar la un singur tip de calculator) datorită comenzilor (nume pentru direcții) precum READ/WRITE/GET/PUT.
Assembly a fost și, uneori, încă mai este utilizat în sistemele în care este important ca codul să fie rapid și este, de asemenea, foarte utilizat în sistemele integrate, deoarece permite utilizatorului să aibă un control exact asupra a ceea ce face mașina.
Limbaje procedurale
La sfârșitul anilor 1960, oamenii au început să inventeze limbaje procedurale. Aceste limbaje de generația a treia (primele câteva din ceea ce numim acum limbaje de nivel înalt) aveau cuvinte legate de ceea ce încercau să rezolve. De exemplu,
- COmmon Business Oriented Language (COBOL) - utilizează cuvinte precum file, move și copy.
- FORmula TRANslation (FORTRAN) - utilizează cuvinte și simboluri matematice ( forme folosite în scris și la tastare). A fost dezvoltată mai ales pentru știință și inginerie.
- Limbajul ALGOL (ALGOrithmic Language) - creat pentru scrierea de algoritmi (seturi de pași care îi spun calculatorului ce trebuie să facă). Folosește cuvinte și simboluri matematice, la fel ca FORTRAN.
- Limbajul de programare unu (PL/I) - trebuia să fie util pentru toată lumea.
- Beginners All purpose Symbolic Instruction Code (BASIC) - creat pentru a ajuta începătorii să programeze.
- C - un limbaj de programare menit să facă multe lucruri. Dennis Ritchie a lucrat la el din 1969 până în 1973 la AT&T Bell Labs.
Programarea orientată pe obiecte
După ce mulți oameni au început să folosească limbaje procedurale, au inventat limbajele de programare orientate pe obiecte. În aceste limbaje, datele și "metodele" (modalitățile de manipulare a datelor) sunt plasate într-un singur "obiect". Unii programatori, cum ar fi Richard Stallman, nu sunt de acord cu faptul că limbajele orientate pe obiecte sunt mai bune pentru a explica idei unui computer decât limbajele procedurale.
Deoarece programarea orientată pe obiecte este o paradigmă, nu un limbaj, oamenii au creat limbaje de asamblare orientate pe obiecte, cum ar fi HLA (High Level Assembly).
Paradigme declarative
În același timp, unii oameni au creat limbaje de programare declarative. Un limbaj bine cunoscut pentru că este declarativ este SQL (un limbaj de adăugare și eliminare a unor elemente din tabele).
Pagini conexe
- Mentalitate
- Sistem de tip
- Completitudinea Turing
Întrebări și răspunsuri
Î: Ce este o paradigmă de programare?
R: O paradigmă de programare este o modalitate de grupare a limbajelor de programare în funcție de modul în care acestea funcționează.
Î: Care sunt cele două grupuri principale de paradigme?
R: Cele două grupuri principale de paradigme sunt imperative și declarative.
Î: Prin ce diferă paradigmele imperative și declarative?
R: Paradigmele imperative privesc modul în care este executat codul, cum ar fi permiterea efectelor secundare sau necesitatea de a face lucrurile într-o anumită ordine, în timp ce paradigmele declarative privesc modul în care este grupat codul, cum ar fi punerea codului în una sau două bucăți (sau, în schimb, în mai multe bucăți mici).
Î: Poate un limbaj să fie atât o paradigmă imperativă, cât și una declarativă?
R: Da, un limbaj poate fi atât o paradigmă imperativă, cât și una declarativă în același timp.
Î: Cum grupează o paradigmă de programare limbajele?
R: Paradigmele de programare grupează limbajele în funcție de ceea ce fac. Ele se uită la modul în care este executat codul, la modul în care este grupat și la ordinea și piesele care alcătuiesc programul.
Î: Există și alte tipuri de paradigme de programare în afară de cele imperative și declarative?
R: Da, există și alte tipuri de paradigme de programare în afară de cele imperative și declarative. De exemplu, unele se uită la modul în care este executat codul (cum ar fi permiterea efectelor secundare), în timp ce altele se uită la modul în care este grupat codul (cum ar fi punerea codului în una sau două bucăți).
Î: Fiecare limbaj aparține unui singur tip de paradigmă de programare?
R: Nu, nu toate limbajele aparțin unui singur tip de paradigmă de programare; unele limbaje pot face parte din mai multe tipuri de paradigme.