3.3.1 Programmeerimiskeelte tüübid

iDevice ikoon 3.3.1 Programmeerimiskeelte tüübid

Programmeerimiskeelte põlvkonnad

Programmeerimise vajadus tekkis juba enne programmeeritavaid arvuteid. Nii on teada näiteks 18. sajandist kangasteljed, mis olid programmeeritavad puuliistude, kuhu oli tehtud õigetesse kohtadesse augud, abil.

Programmeerimise arengule andis hoo John von Neumanni poolt 1945. aastal avaldatud idee, kus ta kirjeldas arvutit, kus mälus hoitakse lisaks andmetele ka käske.

Esimese põlvkonna programmeerimiskeelteks nimetatakse masinkoodi keeli. Masinkood koosneb käskudest, mida arvuti (protsessor) täita oskab ( ning nende käskude juurde kuuluvatest andmetest). Masinkoodis programmeerimisel pidi programmeerija kirjutama oma programmi kahendkoodis, nii et see oleks protsessorile arvusaadav ja täidetav. Sisuliselt nõuab selline programmeerimine häid teadmisi ja arusaamist riistvarast, sest programmeerimise käigus peab teadma mida protsessor teha oskab, kus asuvad sisend-väljundseadmed (I/O- Input-Output) ning kuidas nendega suhelda tuleb ja kui kaua aega mingi tegevuse tarvis kulub. Niisiis on masinkood väga tugevasti seotud riistvaraga, mille peal vastav programm tööle hakkab. Masinkood ei ole tänapäeva arvutitest kuhugi kadunud, kogu tegevus madaltasemel (riistvara tasemel) toimub endiselt masinkoodis ehk siis ükskõik millises programmeerimiskeeles kirjutatud programm teisendatakse lõpuks ikkagi riistavarale arusaadavasse masinkoodi.

Teise põlvkonna programmeerimiskeeled on assembler-keeled. Kui masinkoodis programmeerimisel toimus kogu programmeerimine kahendkoodis ja selle lugemine ning silumine oli tänu sellele väga keeruline, siis assembler-keeles programmeerimisel on käsud inimesele sobivamal kujul. Kogu programmeerimine on üsna sarnane masinkoodis programmeerimisele, sest käsud on samad, mis masinkoodis (ainult teisel kujul, sõnadena). Assembler-keeles kirjutatud programm näeb välja tavaliselt midagi sarnast:

MOV AL,19

ADD AL, 4

OUT 2

Antud koodijupp paneb AL registrisse väärtuse 19 (tavaliselt on väärtused antud 16nd arvusüsteemi arvudena), liidab AL registris olevale väärtusele 4 ning saadab selle seejärel väljundliidesele 2. Selliselt kirjutatud programm tõlgitakse assembleri masinkoodi ning seejärel on võimalik protsessor seda masinkoodi täitma panna.

Masinkoodi- ja assembler-keeled on madaltaseme programmeerimiskeeled.

Kolmanda põlvkonna programmeerimiskeelteks nimetatakse juba kõrgtaseme programmeerimiskeeli. Sellised programmeerimiskeeled ei ole enam nii väga seotud riistvaraga. See tähendab, et programmeerija ei pea enam teadma väga täpselt riistvara ehitust ja omapära, vaid saab kirjutada programmi riistvarast võrdlemisi sõltumatult ning hiljem tõlgitakse kirjutatud programm mitmesuguste erinevate vahendite abil konkreetsele riistvarale arusaadavale kujule. Kuidas seda täpselt tehakse selgitame hiljem.

Kolmanda põlvkonna keelte hulka kuulub enamik tuntumaid ja kasutatavaid keeli, näiteks:

FORTRAN (The IBM Mathematical FORmula TRANslating System) - 1950ndatel aastatel loodud arvutuste ja teaduslikeks eesmärkideks loodud programmeerimiskeel

COBOL (COmmon Business Oriented Language) - 1959. aastal loodud objekt-orienteeritud programmeerimiskeel, peamiselt ärivajadusele suunatud rakenduste kirjutamiseks.

BASIC (Beginner's All-purpose Symbolic Instruction Code) - 1963. aastal väljatöötatud programmeerimiskeel, mis algselt loodi selleks, et inseneride oleks võimalik teostada arvutitel erinevaid simulatsioone.

Pascal - 1970ndatel loodud programmeerimiskeel, mis loodi programmeerimise õpetamiseks.

C - nimi tuleneb sellest, et keel baseerus paljuski B nimelisel programmeerimiskeelel, loodi operatsioonisüsteemide kirjutamiseks (paljud Unixi -laadsed operatsioonisüsteemid on enamikus kirjutatud C keeles), pikka aega üks populaarsemaid programmeerimiskeeli.

C++ - objektorienteeritud C.

Java - C++ põhjal arendatud programmeerimiskeel

Visual Basic, Delphi, Python, C# jne on kõik kolmanda põlvkonna programmeerimiskeeled. Paljud kolmanda põlvkonna programmeerimiskeeled on nooremad (uuemad) kui mitmed neljanda ja viienda põlvkonna programmeerimiskeeled.

Neljanda põlvkonna programmeerimiskeeled on loodud eesmärgiga lihtsustada nende õppimist ja kasutamist. Neljanda põlvkonna programmeerimiskeeled on tavaliselt mitte-protseduurilised ja ühe rakenduse kesksed. Üheks neljanda põlvkonna programmeerimiskeeleks on näiteks SQL (Structured Query Language). Seal öeldakse pigem "mida" teha ning vähem, "kuidas" teha.

Viienda põlvkonna programmeerimiskeeled on loodud tehisintelligentsete süsteemide loomiseks ja tehisintelligentsusega seotud probleemide lahendamiseks.

Programmeerimiskeelte põhitüübid

Erinevalt programmeerimiskeelte põlvkondadest kirjeldavad põhitüübid kuidas on võimalik mingite keelte abil programmeerida. Peamised põhitüübid on: protseduurilised, funktsionaalsed ja objektorienteeritud programmeerimiskeeled.

Protseduurilistes programmeerimiskeeltes kirjeldatakse programmeerimiskeeltes tegevused ja nende täitmise kord ja jagatakse need tegevused gruppidesse (alamprogrammideks). Protseduuridest kujunevad omamoodi koodi struktuurid, mida on võimalik korduvalt kasutada.

Funktsionaalsetes programmeerimiskeeltes kirjeldatakse kogu lahendus funktsioonide abil.

Objektorienteeritud programmeerimiskeeltes teostatakse lahendus klassides (class) kirjeldatud funktsioonide ja andmestruktuuride abil. Igast klassist on võimalik moodustada objekte, millel on mingi hulk omadusi ja/või meetodeid.

Omadused on väärtused, mida objekt suudab hoida ja mis võivad mõjutada objekti käitumist. Näiteks klassi „konsooliaken" põhjal saab moodustada objekti „konsool1" mis kasutajale paistab lihtsalt ühe konsooliaknana. Sellel objektil on mitmeid omadusi (nähtav, mittenähtav, laius, kõrgus, teksti värv konsooliaknas, taustavärv jne), neid omadusi muutes muutub konkreetsel juhul objekti välimus.

Sama näite puhul on sellel objektil ka mitmeid meetodeid, nii saab vastava meetodi poole pöördudes kirjutada konsooliaknasse mingi teksti, lugeda muutujasse kasutaja poolt sisestatud teksti jne.

Teiseks näiteks võib tuua tekstimuutuja, luues tekstimuutuja klassi baasil objekti „MingiTekst", loome ühe tekstimuutuja, mille peamine omadus on hoitav tekstiline väärtus, kuid tegelikult on omadusi sellisel objektil rohkem (näiteks hoitava testilise väärtuse pikkus). Ning samuti on tekstimuutjas ilmselt kirjeldatud mingi hulk meetodeid (muuda hoitav väärtus väiketähtedeks, suurtähtedeks, eemalda teatud sümbolid jne).

Selliselt klasse kirjeldades ning objektidega manipuleerides on võimalik koostada väga keerulisi programme ja täita mitmesuguseid tegevusi.

Interpreteeritavad ja kompileeritavad keeled

Enne seda kui arvuti saab kõrgkeeles kirjutatud programmi täita, tuleb see „tõlkida" talle arusaadavasse keelde e. masinkoodi. Seda tõlkimisprotsessi nimetatakse transleerimiseks ja tõlkeprogrammi translaatoriks. Translaatorid jagunevad kahte klassi: kompilaatorid ja interpretaatorid.

Kompileerimine seisneb selles, et masinkoodis programm (nimetatakse kompilaatoriks) teisendab mingis programmeerimiskeeles kirjutatud programmi masinkoodi. Seejärel täidetakse saadud masinkoodis programm. Näidetena kompileeritavatest keeltest võib nimetada C, Fortran, Pascal..

Interpreteerimine seisneb selles, et masinkoodis programm (interpretaator) loeb sisemällu programmifaili ja asub seda rida-realt täitma. Näitena võib tuua vana BASIC-keele.

Programmi interpreteerimine on ca 10-200 korda aeglasem, kui kompileeritud koodi täitmine. Vastukaaluks on interpreteeritava programmi silumine (vigade eemaldamine programmist) reeglina lihtsam kui transleeritava programmi korral. Sobivates oludes ning abivahendite olemasolul võivad aga need vahed ka märgatavalt väiksemad olla. Heaks näiteks on Java oma vahetasemele kompileeritud ja optimeeritud koodiga, mida siis käivitamise ajal Just-In-Time kompilaator veel omakorda konkreetse riistvaraga kohandab.

Põhimõtteliselt saab igas keeles kirjutatud programme nii interpreteeritult täita kui kompileerida.