Sisu
- 1 Programmeerimiskeelte tüübid
- 1.1 Kõrgetasemeline vs. madalatasemeline
- 1.2 Deklaratiivne vs. imperatiivne programmeerimine
- 1.3 Funktsionaalne vs. protseduuriline
- 1.4 Stack-põhine
- 1.5 Objektipõhine
- 1.6 Voolule orienteeritud
- 2 Reeglid ja sünntaks
- 3 Objektipõhine programmeerimine
- 4 Näited
- 4.1 Visual Basici näide
- 4.2 Pythoni näide
- 4.3 C# näide
- 4.4 Haskelli näide
- 5 Seotud leheküljed
Programmeerimiskeel on teatud tüüpi kirjakeel, mis ütleb arvutitele, mida nad peavad tegema, et töötada. Programmeerimiskeeli kasutatakse kõigi arvutiprogrammide ja arvutitarkvara koostamiseks. Programmeerimiskeel on nagu juhiste kogum, mida arvuti järgib, et midagi teha.
Programmeerija kirjutab programmide loomiseks lähtekoodi teksti programmeerimiskeeles. Tavaliselt kasutatakse programmeerimiskeeles mõnede käskude jaoks reaalseid sõnu, et keel oleks inimesele lihtsamini loetav. Paljud programmeerimiskeeled kasutavad kirjavahemärke nagu tavaline keel. Paljud programmid on nüüd "kompileeritud". See tähendab, et arvuti tõlgib lähtekoodi mõnda teise keelde (näiteks assembler- või masinakeelde), mis on arvutile palju kiirem ja lihtsamini loetav, kuid inimesele palju raskemini loetav.
Arvutiprogrammid tuleb kirjutada väga hoolikalt. Kui programmeerija teeb vigu või programm püüab teha midagi, mida programmeerija ei ole kavandanud, võib programm "kokku kukkuda" või lõpetada töötamise. Kui programmis tekib probleem selle tõttu, kuidas kood on kirjutatud, nimetatakse seda "veaks". Väga väike viga võib põhjustada väga suurt probleemi. Seetõttu kasutatakse testimist, versioonihaldust ja tõrkeotsingut (debugging), et vigu leida ja parandada.
Programmeerimiskeelte tüübid
- Kõrgetasemeline vs. madalatasemeline
Kõrgetasemelised keeled (nt Python, Java, C#) on inimestele loetavamad ja abstraktsemad — neid on lihtsam õppida ning nendes kirjutatud kood on tavaliselt lühem ja hooldatavam. Madalatasemelised keeled (nt assembler, masinakeel) annavad arendajale suurema kontrolli riistvara ja mälu üle, kuid on keerukamad ning hermeetikulisemad.
- Deklaratiivne vs. imperatiivne programmeerimine
Imperatiivne programmeerimine keskendub samm-sammulistele juhistele: kuidas midagi teha (nt C, Java). Deklaratiivne programmeerimine kirjeldab, mida tuleks saavutada, mitte kuidas (nt SQL, mõned osad Haskellist või funktsionaalsed DSL-id).
- Funktsionaalne vs. protseduuriline
Funktsionaalsed keeled (nt Haskell, Erlang) rõhutavad puhtaid funktsioone, muutumatust ja kõrgetasemelisi abstraktsioone. Protseduurilised keeled (nt C, Pascal) on üles ehitatud protseduuride või funktsioonide jadale, kus üldjuhul muudetakse programmi seisundit.
- Stack-põhine
Stack-põhised keeled (nt Forth) ja virtuaalmootorid kasutavad toimingute jaoks virna (stack), kuhu pannakse argumendid ja käskude tulemused. Need keeled sobivad kergekaaluliseks ja madala tasemega programmeerimiseks.
- Objektipõhine
Objektipõhised või objektorienteeritud keeled (nt Java, C#, C++, Python osaliselt) kasutavad klasse ja objekte, et mudeldada reaalmaailma entiteete, soodustades kapseldamist, pärimist ja polümorfismi.
- Voolule orienteeritud
Voolule orienteeritud (flow-based) keeled ja raamistikud keskenduvad andmevoogude ja töötlemisüksuste ühendamisele, sobivad suuremahuliste andmetöötlus- ja reaktiivsete süsteemide modelleerimiseks.
Reeglid ja sünntaks
- Sünntaks — keelereeglid, mis määravad, kuidas kirjutada korrektset koodi (nt kuidas on defineeritud muutujad, laused, funktsioonide deklaratsioonid).
- Semantika — mida konkreetne sünktaks tegelikult teeb (näiteks operatsioonide tähendus ja tulemused).
- Tüübikontroll — kas keel on staatiliselt tüübitud (nt Java, C#) või dünaamiliselt tüübitud (nt Python, JavaScript) — see mõjutab vigade avastamist ja arenduse käitumist.
- Jäätmehaldus — mälu- ja ressursside haldamine (manuaalne, automaatne garbage collection või kombinatsioon).
- Standardteegid — valmis funktsioonide ja klasside kogu, mis lihtsustab tavapäraste ülesannete lahendamist (failisüsteem, võrgundus, andmestruktuurid jpm).
- Konventsioonid ja stiil — koodi lugemise ja koostöö hõlbustamiseks on kehtestatud soovitused (nimed, taandarv, kommentaarid).
Objektipõhine programmeerimine
Objektipõhine programmeerimine (OOP) põhineb mõistetel klass ja objekt. Klass kirjeldab objektide struktuuri ja käitumist (andmed ja meetodid), objekt on selle klassi konkreetne eksemplar. Peamised OOP põhimõtted:
- Kapseldamine — andmete ja nendega seotud meetodite ühendamine ning juurdepääsu piiramise võimaldamine.
- Pärimine — ühe klassi omaduste ja käitumise pärimine teisele, mis soodustab taaskasutust.
- Polümorfism — sama liidese kaudu erinevate objektitüüpide erinev käitumine.
OOP aitab hallata suuri tarkvaraprojekte, jagada vastutust ja teha koodi korduvkasutatavaks ning laiendatavaks.
Näited
Alljärgnevalt on lihtsad näited, mis demonstreerivad keelte põhikäitumist. Need näited on mõeldud illustratsiooniks ja ei kata kõiki keelte omadusi.
4.1 Visual Basici näide
Dim message As String message = "Tere, maailm!" Console.WriteLine(message) 4.2 Pythoni näide
def tervita(nimi): return f"Tere, {nimi}!" print(tervita("maailm")) 4.3 C# näide
using System; class Program { static void Main() { string message = "Tere, maailm!"; Console.WriteLine(message); } } 4.4 Haskelli näide
tervita :: String -> String tervita nimi = "Tere, " ++ nimi ++ "!" main = putStrLn (tervita "maailm") Seotud leheküljed
- Algoritmid ja andmestruktuurid
- Versioonihaldus (näiteks Git)
- Tarkvaraarhitektuur ja disainimustrid
- Tõrkeotsing ja testimine
Kui soovite, võin lisada käesolevatele sektsioonidele rohkem näiteid, sügavamaid seletusi tüübikontrollist, võrdlusi kompileeritud ja tõlgitavate keelte vahel või näited konkreetsete keelte puhul (nt JavaScript, Rust, Go).