Programmeerimise paradigma
Programmeerimisparadigmad on viis programmeerimiskeelte rühmitamiseks nende tööde järgi. Keeled võivad kuuluda rohkem kui ühte paradigmasse.
Mõned paradigmad vaatavad seda, kuidas koodi käivitatakse, näiteks lubavad kõrvalmõjusid või peavad asju tegema teatud järjekorras. Teised paradigmad vaatavad seda, kuidas kood on rühmitatud, näiteks koodi paigutamine ühte või kahte ossa (või hoopis paljudesse väikestesse tükkidesse). Mõned teised paradigmad vaatavad järjestust ja tükke, mis teevad programmi selliseks, nagu see on.
On kaks peamist paradigmade rühma, imperatiivsed ja deklaratiivsed. Keel võib olla korraga mõlemad.
Sisu
· 1 Imperatiivne programmeerimine
· 2 Deklaratiivne programmeerimine
· 3 Muud paradigmad
· 4 Ülevaade
· 5 Probleemid paradigmadega
· 6 Ajalugu
o 6.1 Masinakood
o 6.2 Protseduurilised keeled
o 6.3 Objektipõhine programmeerimine
o 6.4 Deklaratiivsed paradigmad
· 7 Seotud leheküljed
· 8 Viited
· 9 Muud veebisaidid
Imperatiivne programmeerimine
Imperatiivsetes programmides annavad programmeerijad arvutile hulga järjestatud samme, mida tuleb teha, et midagi teha. Kui keegi tahaks, et arvuti joonistaks kassi näo, siis võib ta anda juhiseid nagu "joonista siia üks ring, joonista sinna kaks väiksemat ringi, joonista kaks kolmnurka peale" jne. Imperatiivsetel programmidel on mõnikord palju kõrvalmõjusid.
On olemas kaks peamist imperatiivset paradigmat ja tihtipeale on keeles mõlemad:
- Struktureeritud - arvutile antakse juhised, mis on alati kindlas järjekorras. Sammud nagu "mine tagasi sammu 3 juurde" (tuntud kui goto-käsklused) ei ole lubatud.
- Protseduuriline - programm võimaldab programmeerijal anda korralduste loetelule nime, mis muudab need korraldused "protseduuriks", mida ta saab hiljem kasutada. Enamik struktureeritud keeli on samuti protseduurilised.
- Objektorienteeritud - ideed selgitatakse arvutile objektide abil, mis on kooditükid, millel on hulk korraldusi, mida neile saab anda, ja mingi teave nende kohta.
Deklaratiivne programmeerimine
Deklaratiivsete paradigmade puhul ütleb programmeerija arvutile, mida teha, mitte kuidas seda teha. Kui nad tahaksid, et arvuti joonistaks kassi näo, võiksid nad anda juhised nagu "Joonista nägu, joonista kaks silma, kaks kõrva ja suu".
Kõige tuntumad deklaratiivsed paradigmad on järgmised:
- Funktsionaalne - Suurema osa tööst teevad funktsioonid ilma kõrvalmõjudeta.
- Loogika - esitatakse hulk fakte ja seejärel esitatakse üks või mitu "küsimust".
- Sündmuspõhine - kooditükid on seatud käivituma, kui teatud asjad toimuvad (näiteks arvuti sisselülitamine).
Muud paradigmad
Mõningaid paradigmasid võib leida nii imperatiivsetes kui ka deklaratiivsetes keeltes. Need paradigmad esinevad tavaliselt koos mõne eespool nimetatud paradigmaga, selle asemel, et minna iseseisvalt.
Ülevaade
Programmeerimiskeeled on rühmitatud paradigmade järgi samamoodi nagu masinad võivad olla rühmitatud selle järgi, milleks neid kasutatakse.
Mõned keeled sobivad vaid ühte peamise paradigma alla, näiteks:
- Smalltalk (objektorienteeritud)
- Assamblee (imperatiivne, kuid mitte struktureeritud või objektorienteeritud)
- Haskell (funktsionaalne)
- Prolog (loogika)
Enamik keeli on aga rohkem kui ühes paradigmas. Mõned neist, mis paistavad silma selle poolest, et neil on rohkem kui üks, on järgmised:
- Scala (objektorienteeritud, funktsionaalne, paralleelne)
- Visual Basic (sündmusepõhine, objektorienteeritud)
- Common Lisp (protseduuriline, funktsionaalne, objektorienteeritud, meta)
- Skeem (funktsionaalne, protseduuriline, meta)
- Perl (funktsionaalne, protseduuriline, meta, objektorienteeritud, sündmuspõhine)
- Python (funktsionaalne, objektorienteeritud, protseduuriline)
- Ruby (funktsionaalne, objektorienteeritud, protseduuriline)
- Wolfram Language (funktsionaalne, protseduuriline, üldiselt deklaratiivne)
- Oz (loogiline, funktsionaalne, imperatiivne, objektorienteeritud)
- F# (funktsionaalne, imperatiivne, objektorienteeritud, meta)
Rohkem paradigmasid ei ole alati hea. Üks kord, kui vähem paradigmasid võib olla hea, on see, kui on olemas keel, mis on ainult funktsionaalne. Mõnikord teeb funktsioon ühes sellises keeles vähem tööd (näiteks läheb üle ainult need osad, mida ta tegelikult vajab), kui see oleks pidanud tegema, kui keel oleks ka protseduuriline.
Paljud programmeerimisparadigmad on tuntud nii nende asjade poolest, mida nad ei lase inimestel teha, kui ka nende poolest, mida nad lasevad inimestel teha. Üks kord, kus see kehtib, on funktsionaalsed keeled. Kui funktsionaalne keel on ainult või enamasti funktsionaalne, siis tavaliselt ei luba ta kõrvalmõjusid. Teine kord, kus see kehtib, on struktureeritud programmeerimine: see erineb tavalisest imperatiivsest keelest, sest see ei lase programmeerijatel kasutada "goto-avaldusi" (avaldused, mis ütlevad programmile, et ta peab minema varasemasse sammu). Selle ja muude põhjuste tõttu arvavad inimesed mõnikord, et uued paradigmad ei võimalda piisavalt asju. Mõnikord on aga okei, et arvuti ei lase inimestel asju teha: see võib aidata inimestel vältida probleeme oma koodiga ja lasta arvutil teha oletusi, et ta saaks koodi kiiremini käivitada või isegi kontrollida koodi probleemide suhtes enne koodi käivitamist!
Ülevaade erinevatest programmeerimisparadigmadest Peter Van Roy järgi
Probleemid paradigmadega
Mõnele programmeerimiskeeli uurivale inimesele ei meeldi, et programmeerimiskeelte rühmitamiseks kasutatakse paradigmasid, näiteks Harper ja Krishnamurthi. Need inimesed ütlevad, et paljusid programmeerimiskeeli ei saa lihtsalt paradigmadeks rühmitada, sest keeled laenavad asju ja ideid paljudest paradigmadest.
Ajalugu
Aja jooksul on loodud uusi paradigmasid ja inimesed on neid kas toona või tagantjärele vaadates esile toonud. Üks esimesi paradigmasid, mis tunnistati uueks programmeerimisviisiks, oli struktureeritud programmeerimine 1960ndatest aastatest. "Programmeerimisparadigma" idee pärineb aastast 1978, kui mitte varem, kui Robert W. Floyd kasutas seda õpetamisel. Sõna "paradigma" selles tähenduses, nagu Robert seda mõtles, kasutas esmakordselt Thomas Kuhn oma raamatus "The Structure of Scientific Revolutions" (1962).
Masinakood
Kõige madalama taseme (mis on kõige lähemal sellele, kuidas arvuti asjadest aru saab) ja vanim programmeerimisparadigma on masinkood, imperatiivne paradigma. Masinakoodi juhised on lihtsalt hulk numbreid teatud järjekorras. Assembleri keel on veidi vähem madala tasemega (ja veidi vähem vana). Assembleri keeles antakse arvutile juhised mnemonika (kergemini meeldejäävad nimed) ja mäluaadressidele (juhised, kuidas leida arvutis mingi informatsioon) võib anda nimed. Neid nimetatakse mõnikord esimese ja teise põlvkonna keelteks.
1960ndatel tehti assemblerikeeled paremaks, lisades uusi asju nagu raamatukogu COPY, makrosid ("erilise" koodi tükid, mis muudeti tavaliseks koodiks enne programmi käivitamist), jooksvaid protseduure (suundade kogumid, millele antakse nimi ja mis salvestatakse hilisemaks) ja muutujaid (elemendid, millele antakse nimi ja mis salvestatakse hilisemaks) väljastpoolt programmi. See võimaldas inimestel kasutada mõnda koodi rohkem kui ühes projektis ja ei pidanud muretsema riistvaraspetsiifiliste probleemidega (probleemid, mis esinevad ainult ühes kindlas arvutis) tänu käskudele (suundade nimed) nagu READ/WRITE/GET/PUT.
Assemblerit kasutati ja mõnikord kasutatakse ikka veel süsteemides, kus on oluline, et kood oleks kiire, ning seda kasutatakse palju ka manussüsteemides, sest see võimaldab kasutajal täpselt kontrollida, mida masin teeb.
Protseduurilised keeled
1960ndate lõpus hakkasid inimesed leiutama protseduurilisi keeli. Need kolmanda põlvkonna keeled (esimesed mõned neist, mida me nüüd nimetame kõrgetasemelisteks keelteks) olid seotud sõnadega, mida nad püüdsid lahendada. Näiteks,
- COmmon Business Oriented Language (COBOL) - kasutab selliseid sõnu nagu fail, move ja copy.
- FORmula TRANslation (FORTRAN) - kasutab matemaatilisi sõnu ja sümboleid ( kirjutamisel ja trükkimisel kasutatavad kujundid). See on välja töötatud peamiselt teaduse ja tehnika jaoks.
- ALGOrithmic Language (ALGOL) - tehtud algoritmide kirjutamiseks (sammude kogumid, mis ütlevad arvutile, mida teha). See kasutab matemaatilisi sõnu ja sümboleid, nagu FORTRAN.
- Programmeerimiskeel üks (PL/I) - pidi olema kasulik kõigile.
- Algaja üldotstarbeline sümboolne käsukood (BASIC) - tehtud selleks, et aidata algajatel programmeerida.
- C - programmeerimiskeel, mis on mõeldud paljude asjade tegemiseks. Dennis Ritchie töötas selle kallal 1969-1973 AT&T Bell Labsis.
Objektipõhine programmeerimine
Pärast seda, kui paljud inimesed olid hakanud kasutama protseduurilisi keeli, leiutati objektorienteeritud programmeerimiskeeled. Nendes keeltes pannakse andmed ja nende "meetodid" (viisid, kuidas andmetega manipuleerida) ühte "objekti". Mõned programmeerijad, näiteks Richard Stallman, ei nõustu sellega, et objektorienteeritud keeled on arvutile ideede selgitamiseks paremad kui protseduurilised keeled.
Kuna objektorienteeritud programmeerimine on paradigma, mitte keel, on inimesed teinud objektorienteeritud assemblerkeeled nagu HLA (High Level Assembly).
Deklaratiivsed paradigmad
Samal ajal tegid mõned inimesed deklaratiivseid programmeerimiskeeli. Üks keel, mis on hästi tuntud deklaratiivsuse poolest, on SQL (keel, millega saab lisada ja eemaldada asju tabelitest).
Seotud leheküljed
- Mõtteviis
- Tüübisüsteem
- Turingi täielikkus
Küsimused ja vastused
K: Mis on programmeerimisparadigma?
V: Programmeerimisparadigma on programmeerimiskeelte rühmitamine nende tööpõhimõtete järgi.
K: Millised on kaks peamist paradigmade rühma?
V: Kaks peamist paradigmade rühma on imperatiivsed ja deklaratiivsed.
K: Mille poolest erinevad imperatiivsed ja deklaratiivsed paradigmad?
V: Imperatiivsed paradigmad vaatavad seda, kuidas koodi käivitatakse, näiteks lubavad kõrvalmõjusid või peavad asju tegema teatud järjekorras, samas kui deklaratiivsed paradigmad vaatavad seda, kuidas kood on grupeeritud, näiteks koodi paigutamine ühte või kahte tükki (või hoopis paljudesse väikestesse tükkidesse).
K: Kas keel võib olla nii imperatiivne kui ka deklaratiivne paradigma?
V: Jah, keel võib olla samaaegselt nii imperatiivne kui ka deklaratiivne paradigma.
K: Kuidas programmeerimisparadigma keeled rühmitab?
V: Programmeerimisparadigmad rühmitavad keeli selle järgi, mida nad teevad. Nad vaatavad, kuidas koodi käivitatakse, kuidas see on rühmitatud ja millises järjekorras ja millistest osadest programm koosneb.
K: Kas peale imperatiivse ja deklaratiivse on olemas ka muud tüüpi programmeerimisparadigmad?
V: Jah, lisaks imperatiivsele ja deklaratiivsele on olemas ka muud tüüpi programmeerimisparadigmad. Näiteks mõned vaatavad seda, kuidas koodi käivitatakse (näiteks kõrvaltoimete lubamine), teised vaatavad seda, kuidas kood on rühmitatud (näiteks koodi paigutamine ühte või kahte ossa).
K: Kas iga keel kuulub ainult ühte tüüpi programmeerimisparadigma?
V: Ei, mitte iga keel ei kuulu ainult ühte tüüpi programmeerimisparadigmasse; mõned keeled võivad kuuluda rohkem kui ühte tüüpi paradigmasse.