s

Programmeerimise põhimõisted

hakk

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 ning 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, ning tavaliselt loob kasutajaliidese ja tagab selle töö.
Programmide koostamiseks kasutatakse spetsiaalseid programmeerimiskeeli ja -süsteeme. 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. Erinevates keeltes kasutatakse nende jaoks erinevaid nimetusi: protseduur, funktsioon, skript.

pro_00

Programmi (rakenduse) kasutajaliides sisaldab vahendeid, mille abil kasutaja saab suhelda antud programmiga: näha tulemusi, muuta, kui on ettenähtud, algandmeid, anda vajalike korraldusi jm. Kasutajaliides tavaliselt tehakse programmi loomise faasis. Programmeerimissüsteemid sisaldavad spetsiaalseid vahendeid liideste loomiseks.
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. On kahte liiki kompilaatorid ja interpretaatorid. Kompilaator tõlgib (transleeerib) terve programmi masinakeelde enne täitmist. Iterpretaator tõlgib programmi täitmise ajal. Millist transleerimise viisi kasutatakse sõltub keelest. Translaator on programmeerimissüsteemi üheks peamiseks osaks.
Programmeerimissüsteem on reeglina orienteeritud kindlale programmeerimiskeelele ja arvuti arhitektuurile (protsessori tüübile). Lisaks translaatorile sisaldab see tavaliselt spetsiallset redaktorit, mille abil sisestatakse ja redigeeritakse programme, vahendeid kasutajaliideste loomiseks, silumise ja testimise vahendeid jm.
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 abstraktsete süsteemide kohta.

Informatsiooni esitamiseks nii tavaelus kui ka arvutis kasutatakse järgmisi viise ehk andmete liike:
  märkandmed
(arvud, tekstid, kuupäevad jm),
  graafika (pildid, joonised, graafikud jm),
  heli (kõne, muusika jm) ja
  liikumine (videod, animatsioonid 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 võivad olla programmis kasutusel üksikväärtustena ehk skalaarandmetena (konstandid ja muutujad) või neist moodustatakse mitmesuguseid andmekogumike: tabelid, massiivid, dokumendid, failid, andmebaasid 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 või teise programmiga tehtud kujutis imporditakse antud programmi keskkonda, kas antud programmi loomisel voi täitmisel. Programm võib täitmise muuta imporditud graafikaobjekti omadusi.
Graafikaandmete salvestamiseks kasutatakse erineva vorminguga faile, mille tähistamiseks kasutatakse tüübitunnuseid: PNG, JPEG (JPG), GIF, BMP, SVG, DWG, DXF jne. Graafilisi kujutisi (faile) sageli sängitatakse teistesse dokumentidesse (failidesse). Seda võib lugeja näha ka antud dokumendis.

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. Animatsiooni võib vaadelda kui graafikaandmete erikäsitlust: liikuvad kujutised.

Tänapäeva rakendusprogrammides andmed tüüpiliselt kujutavad endast nö integreeritud andmekogumike, mida tavaliselt nimetatakse dokumentideks. Näiteks teksti-, tabeli- ja joonestamisprogrammide dokumendid aga ka lugeja ees olev nn veebi dokument. Ü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 arendusvahendid, mille abil saab manipuleerida dokumentidega ja nende osadega.

Tänapäeval kasutatakse programmide ja rakenduste loomiseks laialdaselt nn objektorienteeritud lähenemisviisi, mille keskseteks mõisteteks on objekt ja klass.
Kitsamas tähenduses on objekt lihtsalt teatud andmeüksus, millega programm saab täita mingeid tegevusi. Üheks tüüpiliseks objekti näiteks on graafiline kujutis ehk graafikaobjekt.
Laiemas tähenduses on objekt tarkvara üksus, milles on ühendatud andmed ja protseduurid (programmid), mis määravad tegevusi nendega. Iga objektiga on seotud teatud valik atribuute ehk omadusi (näiteks graafikaobjekti jaoks nimi, mõõtmed ja asukoht ekraanil jm) ja meetodeid, mille abil määratakse tegevusi (operatsioone) antud tüüpi objektiga (näiteks graafikaobjekti jaoks ümberpaigutamine ekraanil, pööramine, värvuse muutmine jm). Objekt võib reageerida teatud sündmustele (näiteks hiire klõps, kokkupuude teise objektiga jm).
Klass on üldistus ehk abstraktsioon, määrab määratleb (kirjeldab) antud klassi kuuluvate objektide olemuse ja kasutamise. See fikseerib objektide omaduste valiku, mis on ühesugune kõikidel antud klassi kuuluvatel objektidel, sisaldab protseduure meetodite realiseerimiseks ning malli, mille alusel luuakse uus antud klassi objekt.

Järgnevalt üritame süvendada ja laiendada teadmisi põhimõistetest, tuginedes näidetele, mis on esitatud erinevates programmeerimiskeeltes.

Näide "Kolmnurk". Scratch ja Visual Basic

Üldised põhimõtted. Ülesande püstitus

Vaatame kõigepealt paralleelselt Scratch'i ja Visual Basic'u programme. Hiljem on vaadeldud sama ülesande realisatsioone VBA abil Excelis ja Word'is ning JavaScripti abil.
Scratch'i näol on tegemist uue, unikaalse graafilise programmeerimissüsteemiga, mis on mõeldud mängude, animatsioonide jmt loomiseks ning programmeerimise põhitõdede kiireks omandamiseks.
Visual Basic esindab nö "tavalisi" tekstipõhiseid üldotstarbelisi programmeerimissüsteeme, mida laialdaselt kasutatakse nö tööstusliku tarkvara loomiseks.
Exceli ja Word'i rakendused illustreerivad nn dokumendipõhiste VBA-toega rakenduste loomise ja kasutamise põhimõtteid. JavaScripti realisatsioon tutvustab veidi veebirakenduste mõningaid elemente.
Programm võimaldab leida kaatetite väärtuste järgi täisnurkse kolmnurga hüpotenuusi ümbermõõdu, pindala ja siseringi raadiuse ning teeb ka vastava joonise.
Et demonstreerida erinevate andmeliikide kasutamist ning ja mõningaid juhtimisega seotud tegevusi, on programmidesse lisatud mõningaid ülesande lahendamise seisukohast mittevajalike elemente: animatsioone ja Scratcis ka heliefekte jm.
Scratch'i programme saab täita selle enda keskkonnas, kus täitmist korraldab vastav interpretaator. Programmi saab sängitada apletina veebi dokumenti nagu on tehtud ka antud näitega. Apleti täitmist korraldab operatsioonisüsteemi juurde kuuluv nn Java virtuaalarvuti. Kui Teie arvutis on instaleeritud Scratch, võite allalaadida vaadeldava näite programmi ja uurida lähemalt selle ehitust ning tööd. Scratch'i programm.

Scratch'i aplett

Proovige slaiderite abil muuta algandmeid ja vaadake kuidas programm toimib.

Programmi käivitamiseks võib klõpsata rohelist lippu või vajutada tühiku klahvi.

.

 

 

Visual Basic on ettenähtud autonoomsete (stand alone) ptogrammide loomiseks. Taoline programm on transleeritud masinakeelde ja selle kasutamiseks pole enam vaja Visual Basic'ut. Klõpsatest järgnevat linki VB programm, saate allaladida programmi nn EXE-failina ja käivitada selle. Allpool on toodud ka kasutajaliidese pilt juhuks, kui näiteks mingil põhjusel ei õnnestu programmi laadida alla.

vblii

Scratch'i kasutajaliides

Scratch'is paigutatakse liidese elemendid lavale. Eriti suurt valikud siin ei ole, kuid arvestas programmide eesmärke, pole ka vaja. Alati saab kasutada standardseid nuppe programmide käivitamiseks (roheline lipp) ja peatamiseks (punane nupp). Saab kasutada käsunuppe, nagu siin heli sisse- ja väljalülitamise nupp.
Korralduse andmiseks võib ettenäha hiireklõpse teatud objektidel (spraitidel). Näiteks praegu, kui klopsata Krapsu ning heli on sees, hakkab kiisu kräunuma. Muide, käsunupud (siin nupp heli sisse/välja) on samuti spraidid ning reageerivad hiireklopsule, kui on olemas vastav skript. Käsunupud on väga levinud vahendid korralduste andmiseks enamiku programmeerimissüsteemide liidestes. Veel üheks laialt levinud voimaluseks korralduste andmiseks on nn klahvikorraldused. Näiteks siin vajutus tühiku klahvile käivitab programmi.
Teadete väljastamiseks võib kasutada käske ütle tekst või mõtle tekst. Siin, kui klõpsata rohelist lippu, kuvatakse Krapsi juures tekstiboks teatega: "Lülitasin heli välja". Muide, teistes süsteemides kasutatakse taoliste asjade jaoks nn teatebokse, vorme vmt. Scratch'is saab lihtsalt väljastada teateid ka heliga, kasutades käsku mängi heli ja lindistatud heli. Näiteks siin, kui heli on sees, "ütleb" Kraps "Valmis" ja tekitab muud müra ja muusikat.
Üheks oluliseks elemendiks on muutujate väärtuste kuvamiseks kasutatavad monitorid ehk näidikud. Viimased tekkivad muutujate loomisel: peegeldates arvuti mälupesades olevaid väärtusi. Programmi loomisel ja ka täitmisel saab valida, milliseid väärtusi kuvada ja milliseid mitte. Kui kasutaja peab saama muuta programmi täitmisel mingi suuruse (muutuja) väärtust, saab näidiku kuvada koos nn slaideriga. Siin on taolisteks muutujateks algandmed a ja b - kaatetite väärtused, ning abisuurused: m - mõõtkava tegur, ps - pliiatsi suurus ja n - hulknurga külgede arv. Tulemuste näidikud (c, r, P, S) on ilma slaideriteta, sest tulenevalt asja olemusest ei oma mõtet nende muutmine kasutaja poolt: väärtused leiab ja kuvab programm.
Võimalus nö otse näha monitorides muutujate väärtusi ja isegi neid muuta slaiderite abil, on ainulaadne ja omane ainult Scratch'ile. Teistes süsteemides peab programmis ettenägema spetsiaalsed vahendid ja käsud muutujate väärtuste (näiteks algandmete) lugemiseks väliskeskkonnast ja kirjutamiseks väliskeskkonda (tulemuste väljastamine).

Visual Basic'u kasutajaliides

Nagu teistes üldotstarbeliste programmeerimiskeeltes tuleb kasutajaliideste loomiseks kasutada spetsiaalseid vahendeid. Enamasti kasutatakse kasutajaliidestes aknaid ehk vorme. Vormi näiteks on ka ülaltoodud programmi liides. Siin ei hakka laskuma üksikasjadesse, vaatlema vaid üldiseid põhimõtteid. Märgime ainult, et Visual Basic'u programmide loomise keskkond sisaldab spetsiaalset redaktorit vormide tegemiseks. Taolise vormiredaktori olemasolu on tüüpiline pajudele tänapäeva programmeerimissüsteemidele.
Vormile saab paigutada mitmesuguseid nn ohjureid (Controls): teksti- ja kombobokse, kerimisribasid, märkeruute, käsunuppe, tekstivälju, spetsiaalseid bokse graafiliste andmete esitamiseks jm. Tegemist on üldlevinud Windows'i (ja mitte ainult) liideste komponentidega ja taolisi asju kasutatakse ka teistes süsteemides. Liidese loomise vahendite abil saab luua ka menüüsid, tööriistaribasid jm. Vormidele saab paigutada ka graafilisi objekte jm.
Antud näites kasutatakse algandmete (a, b ja m) ning tulemuste (c, r, P, S) esitamiseks vormil tekstibokse. Väliselt need üsna sarnased Scratch'i muutujate monitoridele (näidekutele). Kuid tegemist on põhimõteliselt erinevate asjadega. Kui Scratch'i monitorid peegeldavad vahetult mälupesades asuvate muutujate vaäärtusi, siis vormi tekstiboksidel puudub otsene seos muutujate mälupesadega.
Programmis peavad olema spetsiaalsed käsud algandmete väärtuste lugemiseks tekstiboksidest ja nende salvestamiseks vastavate muutujate mälupesadesse. Arvutuste tulemused tavaliselt salvestatakse muutujatesse ja sealt kirjutatakse programmi poolt vastatesse tekstiboksidesse.
Algandmete väärtuste sisestamiseks tekstiboksidesse kasutatakse siin kerimisribasid, mis on sarnased slaideritele, õigem on vastupidine: slaiderid on sarnased kerimisribadele, sest viimased on üldlevinud. Kerimisribad on seotud nn sündmusprotsduuridega, tänu millele kohe kui muudetakse mingit väärtust, käivitub automaatselt töötlusprogramm: leitakse tulemused ja joonestatakse skeem. Väärtusi saab sisestada ka otse tekstiboksidesse. Sellisel juhul peab programmi käivitamiseks klõpsama käsunuppu Tee. Kui on sisselülitatud märkeruudud, imiteerivad Juku ja Kraps midagi hüpete taolist.

Muutujad, väärtuste leidmine ja omistamine

Programmide koostamisel tuleb eristada ekraanil nähtavaid andmeid ja arvuti mälus salvestatud andmeid. Esimesed on, üldjuhul, ainult teatud osa salvestatud väärtuste peegeldus (kuva). Omaette probleemiks on see, kuidas viidata andmetele programmis, määrata tegevusi (operatsioone) nendega ning salvesta mälus vajalike väärtusi.
Märkandmeid, mis on siin esindatud peamiselt arvudega, esitatakse programmides lihtsamal juhul üksiväärtusena ehk skalaarandmetena: muutujad ja konstandid.
Nagu juba korduvalt on öeldud, kujutavad muutujad programmides tegelikult mälupesi, kuhu saab salvestada muutuvate suuruste väärtusi ning kasutada neid. Pesad tähistatakse nimede abil ja viimaseid kasutatakse viitamiseks pesadele (muutujatele) programmi käskudes (lausetes).
Muutujate käsitlemine Scratch'is erineb üsna oluliselt teistest programmeerimiskeeltest. Scratch'i muutujad luuakse ja neile eraldatakse mälupesad programmi loomise faasis. Muutujatele neile saab omistada kohe ka väärtusi. Midagi taolist ei ole praktiliselt üheski teises keeles. Enamikus keeltes muutujad määratletakse ehk deklareeritakse programmi tekstis spetsialsete lausete abil (VB-s on selleks Dim-lause) ning alles programmi täitmise ajal eraldatakse neile mälupesad. Muutujate väärtused tekkivad ja neid salvestatakse vastavatesse pesadesse programmi täitmise ajal.
Vaadeldavas ülesandes kasutatakse Scratch'i programmis 10-t muutujat. Muutujad luuakse grupi Muutujad käsuga Tee muutuja. Muutuja nimed kuvatakse ekraani vastavas alas. Muutuja nime ees oleva märkeruudu abil saab määrata, kas selle väärtus kuvatakse monitori abil laval. Näiteks praegu on määratud, et kuvatakse kõikide muutujate väärtused peale ühe: on_off. Viimane on abimuutujaga, mida kasutatakse tunnusena, kas heli on sees või väljas (vt allpool).
Muutuja väärtuse leidmine ja/või muutmine ning salvestamine toimub kõikies programmeerimiskeeltes omistamislausete abil. Scratch'is esitatakse neid plokkidega
   om1 ja om2
Teistes keeltes (sh ka VB-s) esitatakse omisuslause kujul
  muutuja = avaldis, selle erijuht muutuja = muutuja + avaldis vastab plokile muuda.
Siin muutuja on muutuja nimi, avaldis määrab väärtuse leidmise eeskirja ja märk = tähistab omistamise tehet, mille olemus seisneb väärtuse salvestamises antud muutuja pesas.
Allpool on toodud Scratch'i skript, mis leiab tulemuste (c, P, S ja r) väärtused. Skript käivitub, kui saabub teade tee.
Käske täidetakse järjest. Kõigepealt võetakse mälupesades muutujate a ja b väärtused ning leitakse ruutjuur nende ruutude summast. Saadud väärtus omistatakse muutujale c (salvestatakse sellele eraldatud pesas) ning see väärtus kuvatakse kohe vastavas monitoris. Saadud c väärtust kasutatakse järgmises lauses P väärtuse leidmiseks ja kuvamiseks. Edasi leitakse ja kuvatakse pindala (S) ja siseringi raadiuse (r) väärtused.
Olgu märgitud, et skriptis esineb kaks korda arvkonstant 2. Konstantide väärtused esitatakse otse programmis.

muutujad arvutused

 

 

Allpool on toodud Visual Basicu programmi muutujate deklareerimise lause (Dim) ning protseduurid algandmete lugemiseks tekstiboksidest (Loe_alg), arvutusteks (Arvuta) ja tulemuste kirjutamiseks tekstiboksidesse (Kir_tul). Protseduure käivitab peaprotseduur Kolmnurk Call-lausete abil.
Märk # muutuja nime järel näitab, et selle väärtused salvetatakse mälus topelttäpsusega reaaalavudena (nn ujupunktarvude vormingus), märk % määrab, et muutuja väärtused on täisarvud. Tüüpide määramiseks võib VB's kasutada ka spetsiaalseid võtmesõnu: Double, Integer jm, kuid praegu see ei ole oluline. Muutujate tüübi määramine, millest sõltub arvmuutujate väärtuste diapasoon ja täpsus, ei ole Visual Basic'us kohustulik. Paljudes keeltes (C, C++, C#, Java, Pascal jm) on see tingimata vajalik. Scratch'is arvude tüüpe üldse ei eristata.
Muutujad on siin globaalsed: ühised kõikide protseduuride jaoks, nagu, muide ka Scrtch'i programmi muutujad. Sellise staatuse VB's tagab asjaolu, et deklareerimise lause on väljaspool protseduure. VBs saab kasutada ka lokaalseid (protseduurisiseseid) muutujaid, kui Dim lause panna protseduuri sisse. Ka Scrtatch'is saab kasutada lokaalseid muutujaid, mis kehtivad ainult ühe spraidi (objekti) skriptide jaoks.
Protseduur Arvuta on sisuliselt täiesti analoogiline ülaltoodud Scratch'i skriptiga, ainult esitusviis on erinev. Ka see koosneb omistuslausete jadast, mis leiavad järjest muutujate väärtusi ja salvestavad need vastavates pesades.

 Dim a#, b#, c#, r#, P#, S#, m%

 Sub Kolmnurk()
  Call Loe_alg
  Call Arvuta
  Call Kir_tul
  Call Tee_Skeem
 End Sub

 Sub Loe_alg()
  a = ta.Text
  b = tb.Text
  m = tm.Text
 End Sub

 Sub Arvuta()
  c = Sqr(a^2 + b^2)
  P = a + b + c
  S = a * b / 2
  r = 2 * S / P
 End Sub

 Sub Kir_tul()
   tc.Text = c
   tr.Text = r
   tP.Text = P
   tS.Text = S
 End Sub

Tekstibokse, nagu ka teisi vormil asuvaid ohjureid ja graafilisi kujundeid, käsitletakse VB's, nagu ka teistes objektorienteeritud süsteemides, objektidena. Igal objektitüübil (objekti klassil) on kindel valik omadusi. Omadusteks on näiteks nimi, mõõtmed, asukoht jm. Igal omadusel on kindel nimi: Name, Width, Left jm. Tekstiboksi üheks olulisemaks omaduseks on Text: boksis olev (kuvatav) tekst. Olgu märgitud, et antud juhul arve käsitletakse teksti erijuhuna: arvud on esitatud tekstivormingus.
Programm saab lugeda ja muuta omaduste väärtusi. Viit omadusele VB's esitatakse kujul: objekt.omadus, kus objekt esitatakse nime abil. Vaadeldavas programmis on tekstibokside nimedeks: ta, tb, ... tS.
Omistuslausete erijuhte: muutuja = objekt.omadus ja objekt.omadus = avaldis, kasutatakse vastavalt omaduse väärtuse lugemiseks ja muutmiseks.
Näiteks lause a = ta.Text loeb tekstiboksi ta omaduse Text vääruse ja omistab selle muutujale a. Praktiliselt on tegemist muutuja väärtuse lugemisega tekstiboksist.
Lause tS.Text = S määratleb vastupidise tegevuse: muutuja S väärtus kirjutakse tekstiboksi tS, so muudetakse boksi omaduse Text väärtust.

Graafika käsitlemine

Graafika kasutamisel programmides võib eristada kolme põhivarianti:

  • passivsete graafikaobjektide lisamine programmi loomise ajal
  • tegevuste määramine programmis valmis graafikaobjektidega
  • joonistuse (joonise) loomine programmi täitmise ajal

Passiivsed graafikaobjektid

Passiivsete graafikaobjektidega programmi täitmise ajal mingeid tegevusi ei täideta. Need paigutatakse kasutajaliidesesse sobivatesse kohtadesse programmi loomise ajal.
Vaadeldavas Scratch'i rakenduses on neli passiivset objekti: mikrofon ja kolm teksiklipi - võiks öelda, kasutamisjuhendi elemendid. Rõhutame, et viimaste näol ei ole tegemist tekstandmetega vaid piltidega. Tegemist on spraitidega, mis imporditakse, lavale kas olemasolevast spraitide kogumist või muust graafikafailist, või valmistatakse graafikaredaktori abil, nagu näiteks tekstiklipid.
Tegelikult rakenduses on veel üks passsiivne graafikaobjekt: taustapilt - ruuduline "vihikuleht", mis muide kujutab endast Exceli töölehe fragmendi ekraanitõmmist.

Visual Basic'u rakenduses on 10 passiivset graafikaobjekti: tekstikast juhendiga, kaks kujundid (ring ja ruut) Krapsi ja Juku all ja 7 tekstibokside tähist: a, b, ... S. Viimased kujutavad endast nn märgiseid (labels), mille loomise vahendid kuuluvad vormiredaktori koosseisu. Muide, tekstikast ei kujuta siin pilti (nagu oli Scratch'is). Kastis olevat teksti saab näiteks osaliselt või tervikuna kustutada või kopeerida mingisse teisse rakendusse.

Tegevuste määramine valmis graafikaobjektidega

Kasutatavad objektid lisatakse kasutajaaliidesesse selle loomise ajal või imporditakse graafikafailidest programmi täitmise ajal. Viimane võimalus on keerulisem ja näiteks Scratch'is seda kasutada ei saa.
Tänapäeva programmeerimissüsteemides, sh ka Scratch'is ja VB's, on vahendid, mille abil programm saab muuta graafikaobjektide omadusi: suurust, asukohta, värvust jmt, ja määrata ka muid tegevusi nendega. Objektid saab panna sujuvalt liikuma, pöörlema, hüppama jne. Scratch'i jaoks ongi see, võiks öelda, peamine mängude ja animatsioonide loomisel. Spraidid ju ei ole midagi muud, kui graafikaobjektid, mille käitumist saab määrata skriptide abil.
Antud näites on Scratch'i programmis kolm aktiivset graafikaobjekti: Juku, Kraps ja pliiats, Visual Basic'us - kaks: Juku ja Kraps. Peale rasket vaimset ja füüsilist tööd peavad nad väikese sou. Tegevused Scratch'is ja VB's ei ole päris samad, kuid neis on palju sarnasust.
Nende tegevuste kaudu tutvume ka lihtsamate võimalustega korduste kirjeldamiseks nii Scratch'is kui ka Visual Basicus. Viimase jaoks tutvume ka põgusalt parameetrite ja argumentide kasutamisega andmevahetuseks protseduuride vahel.
Graafikaobjektide asukoha ja mõõtmete määramisel ja muutmisel peab arvestama süsteemis kasutatava koordinaatsüsteemiga ja mõõtühikutega.
Scratch'is asub koordinaatide nullpunkt lava keskel. Horisontaalne (x) telg on suunatud paremale, vertikaalne (y) - ülesse. Pikkuse jaoks kasutatakse tingühikuid, mida siin nimetame piksliteks või punktideks. Horisontaalsuunas on kordinaatide (x) väärtused vahemikus -240 kuni 240, vertikaalsuunas (y) -180 kuni 180. Spraidi (objekti) nullpunkt on selle keskpunktis. Näiteks käsuga mine x: 100 y: -50 viiakse just kujundi keskpunkt määratud punkti.
Visual Basic'us, nagu ka paljudes teistes süsteemides, asub koordinaatide nö globaalne nullpunkt vormi ülemises vasakpoolses servas. Horisontaalne telg (x) on suunatud paremale, vertikaalne (y) - alla. Liidese looja saab selle suhtes määrata suvalistele ristkülikukujulistele aladele omaette lokaalseid koordinaatsüsteeme. Pikkuse jaoks saab valida erinevaid ühikuid: twip - 1/1440 tolli, point - 1/72 tolli, toll, aga ka mm ja cm. Kujundi nullkoht on ülemises vasakpoolses nurgas. Kujuni asukoha määramisel ja muutmisel kasutakse kujundi omadusi Left ja Top.

Scratch'is kasutatakse Juku ja Krapsu tegevuste määramiseks eraldi, võrdlemisi sarnaseid, skripte, mis töötavad paralleelselt. Scriptid käivituvad, kui saabub teade valmis, mille saadab pliiatsi ringi joonestamise skript, kui lõpetab töö. Olgu märgitud, et kui heli on sisselülitatud, toimib samaaegselt ka heliefekte tekitav skript.
Juku liigub käsu: liigu 0.5 sek. x: m*r y: 25, toimel sujuvalt ringi sisse: keskele alla. Kolmnurga joonestamisel paigutatakse selle täisnurk alati punkti (0, 0). Siin avaldis m*r (r ringi raadius pikselites, m - maastabi tegur: pikselite arv pikkuse ühikus) määrab Juku x-koordinaadi ja konstant 25 - vertikaalse. Peale o,2 sekundilist pausi (käsk oota 0.2) teeb Juku kolm hüppet. Käsk korda 3, määrab, et selle sees olevaid käske täidetakse (korratakse) kolm korda. Igal kordamisel kõigepealt suurendatakse Juku y-koordinaati 20 pikseli võrra (liikumine ülesse), siis tekitakse paus 0.1 sekundit ning y-koordinaati vähendatakse samuti 20 pikseli võrra (liikumine alla) ja tehakse jälle paus.
Scratch'i jaoks on korda 5 määratud viis hüppet, kõrgusega 10 pikselit. Lisaks y-koordinaadi muutmisele, vahetakse siin igal kordamisel ka kostüümi, imiteerides midagi tantsu taolist. Enne hüpete algust suurendatakse Krapsu mõõtmeid, peale hüppeid - vähendatakse algseisu. Krapsi paigutamisel lavale, on tema suurust vähedatud 35%-ks originaalsuurusest failis. Seega käsk võta suuruseks 50% suurendab mõõtmeid, sest protsent määratakse originaalsuuruse suhtes.

Jutan Kratan

Sub Hyppa(kuju, n, h, pp)
   Dim i
   For i = 1 To n
     kuju.Top = kuju.Top - h
     paus pp
     kuju.Top = kuju.Top + h
     paus pp
  Next i
End Sub

Viimase käsuga väljastab skript teate koju. Selle võtab vastu Juku skript, mis viib selle algseisu: lava ülemisse parempoolsesse nurka.
koju

Visual Basic'u programmi korra, peale joonistuse tegemist, paneb protseduur Hyppa() järjestikusel täitmisel Juku hüppama kaks korda ja Krapsu neli korda, juhul kui klõpsatakse nuppu Tee ja on sisselülitatud vastav märkeruut (vt. töötavat programmi). Kuna vertikaalne telg on suunatud alla, on ülesse liikumisel kõrgus miinus märgiga: kuju.Top = kuju.Top - h, ja alla plus märgiga. Juku ja Kraps hüppavad siin järjestikku. Mitme objekti paralleelset tegevust on VB's mõnevõrra tülikam realiseerida kui Scratch'is. Praegu sellel ei peatu.

Vaatleme nüüd parameetritega protseduuride kasutamist andmevahetuseks protseduuride vahel. Taolisi asju, analoogilisel kujul, kasutatakse väga palju pea kõikides programmeerimiskeeltes. Scratch'is neid, kahjuks (?), kasutada ei saa.
Ülalpool on toodud VB protseduur: Sub Hyppa(kuju, n, h, pp). Siin protseduuri nime järel sulgudes on parameetrid. Nende kaudu toimub andmevahetus teiste protseduuridega, mis pöörduvad antud protseduuri poole. Parameetrite tähendus on järgmine: kuju - objekt, mis peab hüppama, n -hüppete arv, h - hüppe kõrgus, pp - pausi pikkus.
Parameetrid (öeldakse ka formaalsed parameetrid) kujutavad endast nö tinglike tähistusi ehk muutujaid. Neid kasutatakse protseduuri poolt täidetavate tegevuste kirjeldamiseks. Parameetritele vastavad tegelikud objektid ja väärtused, esitatakse pöördumislauses (Basic'us Call-lause) argumentide (öeldakse ka tegelikud parameetrid) abil.
Pöördumine protseduuri Hyppa poole toimub protseduurist Command1_Click (käivitub kui klõpsatakse nuppu Tee) kaks korda. Esimesel pöördumisel vastavad parameetritele: kuju, n, h ja pp, argumendid: Juku, 2, 15 ja 0.1, ning teisel: Kraps, 4, 20 ja 0.1. Argumentide arv ja järjekord peab alati vastama parameetritele.
Paneme tähele, et protseduurist Hyppa toimub omakorda pöördumine protseduuri paus poole, mis tekitab etteantud pikkusega pausi. Argument on siin esitatud parameetri pp abil! Tegemist on omamoodi vahendamisega. Parameeter pp saab väärtused (0.2 ja 0.1) protseduurilt Command1_Click ja need väärtused antakse üle protseduurile paus. Viimase teksti siin vaatlema ei hakka, märgime ainult, et see vastab nö üks ühele Scratch'i käsule oota x sek.
Juhime tähelepanu ajaolule, et Scratch'i käskudes kasutatavad väärtused, näiteks o.2 ja 0.1 käsus oota; 1, 220 ja 150 käsus liigu jne, sisuliselt kujutavad endast samuti argumente, mida kasutatakse vastava käsu täitmisel. Viimastele tegelikult vastavad valmis protseduurid.

Sub Command1_Click()
  Kolmnurk
  If Check1.Value = True Then Hyppa Juku, 2, 15, 0.2
  If Check2.Value = True Then Hyppa Kraps, 4, 20, 0.1
End Sub

 

If-laused siin kontrollivad, kas vastav märkeruut (Check1 ja Check2) on lülitatud sisse. Kui jah (omadus Value on tõene), käivitatakse protseduur Hyppa.

Joonistuste loomine programmi täitmise aja

See on üldiselt kõige keerulisem variant graafika programmeerimisel. Võrreldes eelmiste variantidega, siin tuleb rohkem teha tegemist erinevate koordinaatsüsteemidega, mõõtühikutega, mõõtkavadega ja üleminekutega ühest süsteemist teisse jm. Tavaliselt eristatakse vähemalt kahte kooordinaadisüsteemi:
  füüsiline ehk arvuti (öeldakse ka ekraani) koordinaadisüsteem ja
  loogiline ehk kasutaja koordinaaadisüsteem.
Ülalpool vaadeldut koordinaatsüsteemid olid just  Scratch'i ja Visual Basic'u füüsilised koordinaadisüsteemid. Allpool on toodud nimetatud füüsilised koordinaadid ja võimalikud loogilised koordinaatsüsteemid. Viimastes arvestatakse kasutajale sobiva telgede suunaga ja mõõtühikutega. Sageli tuleb arvestada mingi mastaabiga kas või selleks, et joonis mahuks ära ekraani antud piirkonnas. Kuna

Koordinaadisüsteemid

ks mk2

 

(järgneb)

 

Allpool on toodud Scratch'i skript kolmnurga joonestamiseks ning Visual Basic'u protseduur kolmnurga ja ringi joonestamiseks

kolm

Sub Tee_Skeem()
  Dim x0, y0, mt
  x0 = 10: y0 = 90
  mt = 10 / m
  Kast.Cls
  Tee_Vork
  Kast.DrawWidth = 3
  Kast.ForeColor = juhuarv(500)
  Kast.Line (x0, y0)-(x0 + mt * a , y0)
  Kast.Line -(x0, y0 - mt * b)
  Kast.Line -(x0, y0)
  Kast.ForeColor = juhuarv(500)
  Kast.Circle (x0 + mt * r, y0 - mt * r), mt * r
End Sub

 

 

Proovige slaiderite abil muuta algandmeid ja vaadake kuidas programm toimib.

Programmi käivitamiseks võib klõpsata rohelist lippu või vajutada tühiku klahvi.

.

 

 

(järgneb)

 

Ruutvõrrand ja ruutparabool.

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

Programmiüksused ja koostöö nende vahel

Scratch'i programmi üldistatud tegevusdiagramm

Skeem1

(järgneb)

Näide "Kolmnurk". VBA ja Excel

Jäärgnevalt vaatleme lühidalt vaadeldava näite realisatiooni VBAga Excelis. Exceli faili saate kuvada siit: Exceli töövihik.

Kasutajaliides saab siin luua Exceli töölehel, kasutades algandmete ja tulemuste jaoks töölehe lahtreid. Töölehele saa lihtsalt kolmnurga ja ringi. Samuti saab siin kasutada erinevaid ohjureid. Olgu märgitud, liidese loomine töölehel on tunduvalt lihtsam ja kiirem, kui vormil. Allpool on toodud Exceli töölehel asuv liidese pilt.

Exc_liides

Ka VBAs saab kasutada liidese jaoks vorme. Sageli ei oma mõted, sest see on tunduvalt aeganõudev.

vorm

exck

(järgneb)

Word

JavaScript

Näide "Pall". Scratch ja VBA

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.
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.
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