Sissejuhatus programmeerimisse

hakk

Eessõna

Programmeerimise tulemustega: programmidega, puutub tänäpäeval kokku enamik inimestestest. Programmeerimisega aga puutub kokku oluliselt väiksem osa inimestes. Teatud osa jaoks on see tööalane pohitegevus, mingi hulk tegeleb sellega aeg ajalt, lahendades oma eriala mingeid ülesandeid ning on üsna palju neid, tegelevad programmeerimisega puht hobi korras: tehes näiteks mänge, arendades dünaamilisi veebi lehti jm.

Programmeerimiskeeled ja -süsteemid. Üldised programmeerimiskeeled ja -süsteemid: C, C++, C#, Java, Visul Basic, ... Skripimiskeeled: JavaScript, VBScript, PHP, ... Rakenduste arenduskeeled: koige tuntuim VBA - Visual Basic for Application.

Scratch - uus graafiline (visuaalne) programmeerimiskeel

Põhimõisted

Arvuti, programm, andmed

PAA

See kolmik moodustab omavahel tihedalt seotud alusmõistete süsteemi. Anda nendele lühidalt ammendavat määratlust on võimatu. Üritame täpsustada neid ja nendega seotud mõisteid järk järgult.

kiip

capo

Arvuti kohta esialgu ütleme niipalju, et see on programmjuhtimisega süsteem, millel on mälu, programmide ja andmete salvestamiseks ja säilitamiseks, protsessor, mis saab täita mingis programmeerimiskeeles (näiteks Scratch, VBA, Java vm) esitatud korraldusi. Arvutil on ekraan info kuvamiseks ning klavituur ja hiir info sisetamiseks.
Programm on käskude (korralduste, instruktsioonide, lausete) kogum, mis määrab miliseid tegevusi peab arvuti täitma andmete ja objektidega.
Programmide koostamiseks kasutatakse spetsiaalseid formaalseid keeli: programmeerimiskeeli. Igas keeles on piiratud valik käske ehk lauseid ning nende esitamiseks ja täitmiseks on määratletud kindlad reeglid. Programm võib koosneda mitmest üksusest (protseduurist, funktsioonist, skriptist). Erinevates keeltes kasutatakse erinevaid nimetusi.

pro_00

Tänapäeva arvutid saavad täita programme, mis on esitatud antud arvutitüübi jaoks ettenähtud masinakeeles. See koosneb kahendsüsteemis esitatud elementaarsetes käskudest. Programmide tõlkimiseks masinakeelde kasutatakse spetsiaalseid programme, mida nimetatakse translaatoriteks.

Andmed on informatsiooni esitus kujul, mis võimaldab seda kasutada, luua, säilitada, töödelda ja edastada programmjuhtimisega süsteemide (eeskätt arvutite) abil. Informatsiooni all siin mõistetakse suvalist teavet reaalsete ja abstraktste süsteemide kohta.

Informatsiooni esitamiseks nii tavaelus kui ka arvutis kasutatakse järgnisi viise ehk andmete liike:
  märkandmed
(arvud, tekstid, kuupäevad jm),
  graafika (pildid, joonised, graafikud jm),
  heli (kõne, muusika jm) ja
  liikumine (animatsioonid, videod jm).
Kõik andmed esitatakse arvuti mälus kodeerituna kahendarvude abil.
Näiteks märkandmete esituses vastab igale märgile (täht, number jm) kindel kahendarv. Arvud, millega tehakse matemaatilisi operatsioone, salvestatakse spetsiaalsetes vormingutes: nn püsipunktarvud (täisarvud) ja ujupunktarvud (reaalarvud).

graaf

lained

kass
andmed

Märkandmed voivad olla programmis kasutusel üksikväärtustena ehk skalaarandmetena voi neist moodustatakse mitmesuguseid andmekogumike: tabelid, massiivid, failid jm.
Graafikaandmete esitamiseks kasutatakse erinevaid viise ja vorminguid. Graafika loomiseks ja redigeerimiseks on hulgaliselt spetsiaalseid programme, graafikaandmeid kasutatakse aga ka paljudes programmides näiteks tulemuste visualiseerimiseks, animatsioonide ja mängude programmeerimiseks jm. Graafiline kujutis (joonis, pilt jmt) luuakse vahetult antud programmi täitmisel voi teise programmiga tehtud kujutis imporditakse antud programmi keskkonda. Graafikaandmete salvestamiseks kasutatakse erineva vorminguga faile, mille määramiseks kasutatakse tüübitunnuseid: PNG, JPEG (JPG), GIF, BMP, SVG, DWG, DXF jne. Graafilisi kujutisi (faile) väga sageli sängitatakse teistesse dokumentidesse (failidesse). Seda voib lugeja näha ka antud dokumendis. Animatsiooni voib vaadelda kui graafikaandmete erikäsitlust: liikuvad kujutised.
Heliandmed salvestatakse samuti erinevate vormingutega failides (WAV, MP3, MID) ning heliklippe saab sängitada teiste dokumentidesse nagu ka videoandmeid, mis praktiliselt kujutavad nö multimeedia andmed. Enim kasutatavad failivormingud om AVI ja MPEG4.

Tänapäeva rakendusprogrammides andmed tüüpiliselt kujutavad endast nö integreeritud andmekogumike, mida tavaliselt nimetatakse dokumentideks. Näiteks teksti-, tabeli- ja joonestamisprogrammide dokumendid. Ühes dokumendis on reeglina kasutusel erinevat liiki (tekst, arvud, graafika jne) ja organisatsiooniga (tabelid, massiivid jne) andmed. Dokumente säilitakse failides. Paljude rakendusprogrammide juurde kuuluvad programmeerimisvahendid, mille abil saab manipuleerida dokumentidega ja nende osadega.



Heli- ja videofailide vormingud:

Skalaarandmed: üksikväärtused

Struktuurandmed: tabelid, massiivid, failid, dokumendid

Objektid. Omadused, tegevused (operatsioonid, meetodid), sündmused. Klassid?

Näide "Kolmnurga karakteristikud ja skeem". Scratch

Üritame nüüd süvendada ja laiendada pohimoisted, tuginedes näidetele, mis on esitatud eeinevates keeltes. Vaatame koigepealt Scratch'i programmi. Näidet voib näha ja proovida allpool toodud apletil.
Programm voimaldab leida kaateti väärtuste järgi täisnurkse kolmnurga hüpotenuusi ümbermoodu, pindalala ja siseringi raadiuse ning teeb ka vastava joonise.

Programmi tööga saate tutvuda korvaloleval apletil.

Programmi saate laadida ka oma arvutisse, kui klõpsate linki
Scratch'i näide.

Esinevad koik andmete liigid: märkandmed, graafika, heli ja liikumine.

Skeem1

Ruutvorrand ja ruutparabool.

Programmi saate laadida ka oma arvutisse, kui klõpsate linki
Ruutvorrand.

Visual Basic, JavaScript

Excel, Word

 

Objektideks võivad näiteks olla ekraanil nähtavad graafilised kujundid (pildid), vormid, tabelid jm, andmed kujutavad endast arve, tekste jm.

Näide "Pall"

Põhimõistetega tutvumiseks vaatleme näiteks ühe mängutaaolise asja programme, mis on tehtud kahes erinevas keeles: Scratch ja VBA. Põhitähelepanu on pööratud Scratch'ile. VBA on toodud peasjalikult võrdluseks ja selgitused on siin võrdlemisi üldisel kujul. Scratch'i programme vaatleme põhjalikumalt, kuid ka siin päris kõike detaile ei puuduta.

Scratch'i programmi tööd võite näha kõrvaloleval appletil. Selle saab käivitada, klõpsates nuppu Start, peatada saab nupuga Stopp või punase nupuga ülemises servas.

Programmi saate laadida ka oma arvutisse, kui klõpsate linki
Scratch'i näide.

Exc_juh

VBA programmi kasutajaliides Excelis näeb välja sarnaselt. Kui Teie arvutis on olemas Excel, võite vaadata ka VBA programmi tööd, klõpsates linki
VBA näide.

Imiteeritakse sellist stseenaariumi. Juku ja Kraps loobivad palli, püüdes tabada väljaku keskel asuvat, ütleme, liivakasti. Programm loendab visete arvu, tabamuste ja mööda läinud visete arvu. Kui pall tabab kasti, muudab see korraks värvi. Kraps ja Juku teevad mõned hüpped, Kraps kräunub ja Juku "ütleb" "Tubli". Scratch'is on kasutajaliidese põhiosaks lava (stage), VBA's - Exceli tööleht (worksheet).

Mõlemas programmis kasutatakse mitut objekti. Põhiobjektideks on neli graafilist kujundid: pall (ring), kast (ristülik), Kraps ja Juku (pildid). Omaette objektide liigiks on käsunupud Start ja Stopp, mida kasutatakse programmide käivitamiseks ja seiskamiseks. Scrartch'is nimetatakse kõike taolisi objekte spraitideks (sprite), VBA's - kujunditeks (shape).
Mõlemal kasutajaliidesel on veel midagi. Scratch'i aknas on kuvatud nn näidikud ehk monitoorid (monitor), mis peegeldavad muutujate (viskeid, sees, mööda) jooksvaid väärtusi: iga "viske" järel muutub ühe võrra muutuja viskeid ja kas muutuja sees või mööda väärtus. Muutujate väärtusi säilitatakse ja muudetakse skripti poolt arvuti mälu pesades.
VBA's kasutatakse loendurite väärtuste kuvamiseks Exceli töölehe lahtreid. Need kujutavad endast ka objekte. Protseduur muudab täitmise ajal vastavate lahtrite omadust väärtus (value), tänu millele muutub vastav väärtus ka ekraanil.

Tegevuste määramiseks objektidega ja väärtustega, kasutatakse programmeerimiskeeltes kindla tähendusega korraldusi ehk käske. Nende abil saab muuta objektide omadusi (näiteks asukoht, värvus, suurus jm), muuta andmeelementide väärtusi, juhtida tegevuste (korralduste) täitmist: korrata teatuid tegevusi, täita tegevusi valikuliselt, sõltuvalt tingimustest ja olukorrast.
Scratch'is esitatakse käsud graafiliste kujundite abil, mille sees on ka käsu otstarvet näitav tekst (liigu, pööra, võta, muuda, korda jmt) ja neid nimetatakse plokkideks. Paljudes plokkides on kohad (pesad ehk slotid), kuhu saab paigutada või valida ploki sisemenüüst vajalike väärtusi ja või nimesid.
VBA's, nagu ka teistes nö tavalistes tekstipohistes programmeerimiskeeltes, nimetatakse korraldusi lauseteks. Need koosnevad kindla tähendusega võtmesõnadest (Sub, Set, Do, If jmt), nimedest, väärtustest jm.

Korraldustest moodustatakse tavaliselt teatud programmiüksused.
Scratch'is nimetatakse selliseid üksusi skriptideks. Need pannakse kokku plokkidest hiire abil nn kasutajaliidese skriptide alas. Plokidel on spetsiaalsed ühendamise elemendid (süvendid ja nukid), mis ei lase neid ühendada valesti. See välistab nn süntaksivigade tekket, mis on üsna tüüpilised tavalistes programmeerimiskeeltes.
VBA's ja teistes keeltes nimetatakse taolisi üksusi protseduurideks ja/või funktsioonideks ning öeldakse, et protseduur (või funktsioon) koosneb lausete jadast. Keele reeglitega on protseduuride jaoks määratud kindel struktuur. Näiteks VBA nn Sub-protseduur peab alati algama Sub-lausega, milles näidatakse protseduuri nimi, ning lõppema End Sub-lausega. Protseduuril peab alati olema nimi. VBA protseduurid salvestatakse moodulitesse, mis asuvad Exceli töövihiku spetsiaalses osas nn VBA projekt.

Saades ühel või teisel viisil korralduse hakkab arvuti täitma skripti või protseduuri käske. Käske täidetakse järjest, selles järjekorras nagu nad on esitatud. Kuid vastavad juhtimiskäsud võimaldavad määrata teatud tegevuste (käskude) kordamist ja valikulist täitmist. Skript või protseduur võib vahepeal pöörduda (vastavate käskude abil) ka teiste skriptide või protseduuride poole.

Allpool on kõrvuti toodud Scratch'i skript ja VBA protseduur. Need muudavad palli asukohta, muutes selle koordinaate x ja y juhuslike arvude abil, kontrollivad kas pall sattus kasti ning muudavad vastavate loendurite väärtusi.

Vaatleme kõigepealt Scratch'i peamist skripti. Iga skript on alati seotud kindla spraidi või lavaga. Praegu on tegemist spraidi pall skriptiga. Oma skriptid on ka teistel spraitidel. Ühel spraidil voib olla mitu skripti ning nende käivitamiseks saab kasutada erinevaid viise.
Vaadeldav skript käivitub siis, kui saabub teade nimega start, viimase saadab spraidi (nupu) Start skript käsuga teavita (broadcast).
Kõigepealt käskudega võta (set), võetakse muutujate viskeid, sees ja mööda värtuseks 0. Seejärel algab lõputu kordus, mis on määratud käsuga (plokiga) lõputult (forever): kõikide selle ploki sees olevaid plokke (käske) täidetakse jälle ja jälle. Peatada saab täitmise, klõpsates nuppu Stopp või punast nuppu lava ülemises servas. Ploki igal täitmisel kõigepealt uuendatakse käsuga muuda (change) muutuja viskeid ühe võrra ning muudetakse palli koordinaate (x ja y) juhuarvude abil. Tuletame meelde, et lava vasak serv on -240, parem 240, alumine -180 ja ülemine 180 tingühikut.
Seejärei käsu kui...muidu (if...else) abil kontrollitakse, kas pall puudutab kasti või mitte. Kui spraitidel on ühisosa tagastab viiteplokk puudutab kast? (touching kast?), mille abil on siin esitatud tingimus, väärtuse tõene (true), vastupidisel juhul - väär (false).
Kui pall tabas kasti täidetakse kui-harus olevad plokid (käsud): käsuga mine (go to) viiakse pall kasti keskkohta, suurendatakse muutuja sees väärtust ühe võrra ning täidetakse käsk teavita tabas ja oota (broadcast tabas and wait), vastupidisel juhul täidetakse muidu-harus olev käsk muuda, mis suurendab muutuja mööda väärtust ühe võrra.
Käsu teavita ... ja oota täitmisel, peatatakse antud skripti töö ja käivitatakse kõik skriptid, mis algavad päiseplokiga kui saabub teade tabas. Kui taolisi skripte on mitu (näiteks praegu on neid 3, vt allpool), täidetakse neid paralleelselt. Peale seda, kui need kõik on täidetud, antakse täitmisjärg tagasi skriptile, kust toimus väljakutse. Selle täitmist jätkatakse käsust, mis järgneb pöördumiskäsule. Antud juhul on selleks käsk oota 0.5, mis järgneb kui...muidu-plokile, see tekitab pausi pikkusega 0,5 sekundit (et "visked" ei toimuks liiga tihti).
Muide, on olemas ka käsk (plokk) teavita teade (broadcast teade), mis käivitab selle teatega algavad skriptid ja kohe jätkatakse antud skripti täitmist ning tagasipöördumist ei toimu.

Pall. Tegevuste skript, kui teade "start"Jusk1
Sub Lenda() ' VBA protseduur
  Set pall = Shapes("pall")
  Set kast = Shapes("kast")
   [viskeid] = 0
   [sees] = 0
   [mööda] = 0
  
Do
      [viskeid] = [viskeid] + 1
      pall.
Left = 400 * Rnd()
      pall.
Top = 300 * Rnd()
     
If On_Puude(pall, kast) Then
         mine pall, kast
         [sees] = [sees] + 1
        
Hyppa Shapes("Kraps"), 2, 30
         
Hyppa Shapes("Juku"), 3, 40
         värvi kast
     
Else
         [mööda] = [mööda] + 1
     
End If
      oota 0.5
  
Loop
End Sub

Nüüd aga tutvume VBA peaprotseduuriga Lenda, millest algab programmi täitmine. Lisaks sellele, on kasutusel mitu nn alamprotseduuri. Kui võrrelda Scratch'i skripti ja VBA protseduuri, võib märgata üsna suurt sarnanust, vaatamata erinevatele esitusviisidele.

Märgime aga kohe ära olulised erinevused. Kõigepealt VBA ühes protseduuris, erinevalt Scratch'i skriptist, saab määrata tegevusi mitme objektiga (kas või kõikidega), kusjuures objektideks, näiteks Excel'is, on ka töölehed ja nende lahtrid, töövihikud jm. Siit tekkib ka vajadus omada vahendeid viitamiseks erinevatele objektidele.
Graafikaobjektidele, mis on Scratch'i spraitide analoogideks, saab viidata taolise konstruktsiooniga Shapes("nimi"). Kus nimi on objekti nimi, mis enamasti esitatakse programmis tekstkonstandina. Näiteks: Shapes("pall"), Shapes("Juku") jne. Lihtsamaks viisiks viitamiseks Exceli lahtrile on nurksulgudes paigutatud lahtri nimi: [viskeid], [sees] jmt.
Lausega Set, saab siduda objekti muutujaga ja edaspidi kasutada viitamiseks objektile muutuja nime. See lihtsalt võimaldadab lühendada programmi teksti. Näiteks vaadeldavas protseduuris kasutatakse kahte Set-lauset: 
  Set pall = Shapes("pall"):  Set kast = Shapes("kast")
,
mis seovad objektid pall ja kast, millele viidatakse protseduuris korduvalt, vastavate muutujatega.

Kuna Scratch on orienteeritud animatsioonide ja mängude loomisele, kus suurel määral kasutatakse graafikat ja liikumist, on siin olemas ka spetsiaalsed käsud (plokid) vastavate tegevuste määramiseks. Näiteks võib tuua grupi Liikumine (Motion) plokid, mis koos grupide Jutimine (Control) ja Andurid (Sensing) plokidega võimaldavad lühidalt ja lihtsalt kirjeldada taolisi asju.
VBA on üldotstarbeline programmeerimisvahend ning sellepärast siin sellist rikkalikku eriotstarbeliste käskude (lausete) valikut ei ole. Kuid siin, nagu ka teistes nö tavalistes programmeerimiskeeltes, on võimalus luua erineva otstarbega, suhteliselt universaalseid protseduure, funktsioone või klasse, mida saab kasutada korduvalt erinevates programmides. Taoliste asjade kasutamiseks tavaliselt ei pea teadma, kuidas näiteks kasutatav protseduur voi funktsioon on tehtud ja töötab.
Peab teadma mida see teeb, milline on nimi ja, ka väga sageli, milised on vajalikud argumendid: väärtused voi objektid, mida kasutab protseduur.
Argumente kasutatakse ka mitmetes Scratch'i plokides, näiteks plokis ruut on 13 argument, mille ruutuur leitakse, selle asemele voib panna teise väärtuse, sellel kohal voib olla ka muutuja voi avaldis. Plokis oota on argumendiks konstant 0.5, plokis liikumine on argumendiks konstant 10, ka neis voib kasutada suvalisi väärtusi, muutujaid voi avaldisi. Plokis xy on kaks argumenti: x ja y väärtused, mis voivad olla esitatud konstantide, muutujate ja avaliste abil. Plokis puudutab on argumendiks objekt kast (täpsemalt objekti nimi).



 

Kraps. Tegevused, kui saabub teade "tabas"
kass1

Juku. Tegevused, kui saabub teade "tabas"
juks

 Kast. Tegevused, kui saabub
teade "tabas"
kast

Neid skripte täidetakse samaaegselt (paralleelselt). Peale viimase töö loppu, antakse täitmisjärg tagasi spraidi pall skriptile, kust toimus pöördumine.

 Sub Hyppa(kuju, n, h)
  Dim i
  For i = 1 To n
     kuju.IncrementTop -h
     oota 0.2
     kuju.IncrementTop h
     oota 0.2
  Next i
 End Sub
 Sub värvi(kuju)
   Dim värv
   värv = kuju.Fill.ForeColor.SchemeColor
   kuju.Fill.ForeColor.SchemeColor = 70 * Rnd()
   oota 0.3
   kuju.Fill.ForeColor.SchemeColor = värv
 End Sub
 
 Sub mine(kuju1, kuju2)
   kuju1.Left = kuju2.Left + kuju2.Width / 2 - kuju1.Width / 2
   kuju1.Top = kuju2.Top + kuju2.Height / 2 - kuju1.Height / 2
 End Sub
 


 

 

 

Objektid ja klassid

 

Muutujad