Programmeerimise õpetamisest algajatele

Kaarel Allik, Irina Amitan, Kersti Antoi, Jüri Vilipõld
Informaaikainstituut, TTÜ    

   Algajatele ei tohi õpetada programmeerimiskeelt, õpetama peab programmeerimist!
             Leo Võhandu, üks eesti esimestest programmeerijatest (aastast 1956) ning läbi aastate                  üks peamisi informaatika õpetamise ideolooge TTÜs. 
   Programm = andmed + algoritmid
            Niclas Wirth - programmeerimiskeelte Pascal, Modula ja Oberon looja,
            mitmete õpikute ja monograafiate autor

kart mersu vormel

Autoga sõitmise õppimist ei pea kohe alustama Vormel I-ga, võib alustada ka kardiga või vana Fordiga. Mida varemalt alustatakse õppimist, seda kindlamad ja paremad on oskused. Sama kehtib ka spordi, kunsti ja programmeerimise jaoks.

Sissejuhatuseks

Siin kirjutajad on tegelenud praktilise programmeerimisega ja programmeerimise õpetamisega peaaegu alates esimeste arvutite ilmumise ajast Eestis. On kasutatud ja õpetatud väga palju erinevaid keeli ja süsteeme: masinakeel, assembler, Malgol (Eestis realiseeritud Algoli variant), Fortran, PL/I, Pascal, mitmed Basic'u variandid sh VBA, C, C++, Java jm.
Õpetatud on informaatikuid (tulevasi IT-proffe) ja mitteinformaatikuid, kooliõpilasi, õpetajaid, algajaid ja edasijõudnuid. Siin peatume algajate õpetamisel. Meie õppetooli õppejõudude käe all saavad programmeerimise algõpetust igal aastal ca 1000 üliõpilast. Programmeerimist on õpetatud ja õpetatakse TTÜs üldinformaatika aine raames esimesel kursusel kõikidele erialadele. Sellepärast julgeme arvata, et oleme teatud määral kursis ka informaatika ja programmeerimise õpetamisega ka koolides.
Peab märkima, et kui arvuti kasutamise nö tehniline pool (faililhaldus, Internet, OP-süsteemid jmt) on võrdlemisi heal tasemel, siis sisuline pool (tekstitöötlus, tabelarvutused, arendustöö ja programmeerimine) jätab üldiselt soovida ja on nö "seinast seina", nii taseme kui ka kasutatavate vahendite poolest.
Eriti tähelepanuväärne aga on see, et neid, kes on puutunud koolis kokku programmeerimisega, rääkimata neist, kes oskavad programmeerida, jääb järjest vähemaks, isegi informaatikat õppima asujate seas.
Samal ajal laieneb mujal maailmas nö "teeme ise" lähenemisviis: püütakse õpetada lapsi ja noori ise looma arvuti abil mänge, animatsioone, arvutigraafika ja multimeedia lahendusi ning muid rakendusi, selle asemel, et lihtsalt mängida ja surfata Internetis. Olulist tähelepanu pööratakse eelnimetatud tegevuste kaudu programmeerimise ja arendustöö aluste omandamisele. Nendele küsimustele pööratakse eriti suurt tähelepanu USA koolides. Võiks näiteks tutvuda USA arvutiõpetajate assotsiooni (CSTA - Computer Science Teachers Association) poolt koostatud ja pidevalt arendatava arvutiõpetuse tüüpõppekavaga: ACM K-12 CS Model Curriculum, mille alusel koostavad oma õppekavasi mitmed osariigid ja paljud koolid. Üheks selle kasutamise ja ka ainete näiteks, mida CSTA tõstab esile, on Los Angelese koolide õppekavad, mis on esitatud detailselt dokumendis nimetusega: Exploring Computer Science Curriculum. Olgu märgitud, selle üks osa: "Sissejuhatus programmeerimisse" (35 tundi), põhineb täielikult graafilisel programmeerimissüsteemil Scratch, millest tuleb juttu allpool.
Viimase paari aasta jooksul võib panna tähele uut nähtust: tekkivad ja kiiresti levivad uue põlvkonna programmeerimise õpetamise keeled. Tegemist on tüüpiliselt suhteliselt lihtsate keelte ja vahenditega, mis on mõeldud programmeerimise õppimiseks/õpetamiseks algajatele, sh lastele ja noortele. Neist võiks eeskätt nimetada Scratch'i - loodud Massachusetts'i Tehnoloogia Institudis (http://scratch.mit.edu) ja Alice'i - loodud Virginia Ülikoolis, praegu arendatakse Garnegie Mellon Ülikoolis (http://www.alice.org).
Alice sisaldab Scratch'iga võrreldes võimsamaid vahendeid, eriti mängude loomiseks, kasutades 3-D graafikat ja objektipõhist lähenemisviisi (klassid, objektid, meetodid, omadused ja sündmused), kuid selle kasutamine on märgatavalt keerulisem. Scratch on lihtsam, mõnevõrra üldisema iseloomuga ja on leidnud viimasel ajal laiemat kasutamist.
Kuid üldiselt võttes nad teatud mõttes täiendavad teineteist ning, arvestades nende kasutamise lihtsust ja et nad on vabavaralised tooted, võib kasutada ka mõlemat. Meie meelest alustada võiks Scratch'iga ja seejärel võtta kasutamisele ka Alice. Taolise lähenemisviisi näiteks võiks olla Austini kolledzi professori Richard Baldwini käsitlus, kes algab Scratch'iga, seejärel jätkab Alice´ga ja jõuab välja Java'ni.
Siin peatume veidi lähemalt Scratch'il, mida meie kasutame ka oma õppetöös: programmeerimise algfaasis põhikontseptide ja -mõistete kiireks selgitamiseks. Edasi jätkame profidega (informaatikutega) Visual Basicuga ja C-ga, mitteinformatikutega - VBA-ga Exceli keskkonnas. Olgu märgitud, et selline tuntud ülikool nagu Harwardi Ülikool (juba aastaid kõrgeima reitinguga ülikool maailmas) alustab oma programmeerimise sissejuhatavat kursust (http://www.cs50.net/lectures/) samuti Scratch'iga, jätkab aga C-ga ja Java'ga.
Taoliste vahendite kasutamine võimaldab kontsentreerida õppimise algfaasis põhitähelepanu programmeerimise üldistele põhimõtetele: rakenduste disain, algoritmimine ja modelleerimise alused, erinevat liiki ja struktuuriga andmete kasutamine, protsesside liigid: jada, valik, kordus, paralleelprotsessid, ja nende juhtimine, sündmused jmt.
Programmeerimise õpetamine traditsiooniliste vahendite ja meetoditega kipub sageli taanduma kasutatava programmeerimiskeele süntaksi õpetamisele ja omandamisele. Scratch'is näiteks süntaksi mõiste praktiliselt puudub, plokkide (lausete) struktuuri muuta ei saa (pole ka vajadust), plokke ei saa ka valesti kokku panna. Struktuurse programmeerimise kasutamine on siin paratamatu ja loomulik, sest juhtimisega seotud graafilisi plokke (lauseid) teisel viisil kasutada ei saa.
Traditsiooniliste keelte (näiteks Pascal) kasutamisel on algajate jaoks omaette probleemiks programmi kasutajaliidese loomine, sh sisend/väljundi korraldamine, graafikaobjektide kasutamine jmt. Ülalnimetatud süsteemides saab atraktiivse ja mugava liidese kiiresti kokku panna hiire abil, kasutades valmis komponente (NB! Komponenttehnoloogia).
Tähelepanuväärne on see, et vastuseks taoliste uute vahendite tekkele ja arengule, käis Microsoft välja ka omapoolsed vahendid, millest väärib eeskätt nimetamist Small Basic: väike, lihtne, multimeedia kasutamisele orienteeritud ja objektorienteerituse elementidega keel.

Scratch'ist

Üldiseloomustus

Scratch on uus graafiline programmeerimiskeel, mis teeb lihtsaks lugude, mängude, animatsioonide ja ka tõsisemate asjade loomise ning loodu jagamise teistega veebis. Ta võimaldab lihtsalt ja kiirelt omandada programmeerimise põhikontseptsioonid, põhimõisted ja tõed, mis on omased ka "tavalistele" ehk tekstipõhistele programmeerimiskeeltele (Visual Basic, Pascal, C, Java jt).
Scratch on loodud Massachusetts'i Tehnoloogia Instituudi (Massachusetts Institute of Technology - MIT) Meedia Laboratooriumi Lifelong Kindergarten grupi poolt. Selle loomist on rahaliselt toetanud sellised asutused nagu USA Rahvuslik Teadusfond, Intel, Microsoft, Nokia jt. Scratch'i viimane versioon: Scratch 1.4, on ilmunud juulis 2009. Selles on võimalik kasutada ka eestikeelset keskkonda. Scratch'i saab tasuta alla laadida selle kodusaidilt: http://scratch.mit.edu.
Saidil on mitmesuguseid õppematerjale erinevates keeltes, sh ka eesti keeles ja vene keeles ning tohutul hulgal näiteid: ligi 1,5 mln. (!), mida saab vabalt alla laadida, uurida ja remiksida. Igaüks võib ühe hiireklõpsuga laadida oma toote (projekti) üles Scratch'i kodusaidile, kus sellega saab tutvuda igaüks, kes seda soovib.
Scratch'i loomise ja arendamise eesmärgiks on anda lastele ja noortele lihtne ja atraktiivne vahend programmeerimise ja disaini aluste omandamiseks ning loovuse arendamiseks mängude, animatsioonide ja muude multimeedia rakenduste loomise kaudu. Põhjalikumalt saab tutvuda Scratch'i põhieesmärkide, võimaluste ja arengusuundadega selle kodusaidi õpetajatele mõeldud lehel ja Scratch'i arendusgrupi kodulehel. Muuhulgas arendatakse näiteks vahendeid andurite ja mobiiltelefonide programmeerimiseks.

Scratchi poolt toetatavate programmeerimise kontseptsioonidega ja mõistetega saab tutvuda siit: kontseptid. Scratchi rakenduste (projektide) loomine toimub lihtsa ja mugava graafilise kasutajaliidese abil. See võimaldab ka panna programm kohe tööle. Projekte võib sängitada appletidena ka veebidokumentidesse (vt allpool toodud näiteid).

Scratch 1.4 eestikeelne kasutajaliides

liides

Scratch'i projektide (rakenduste) keskseteks komponentideks on graafikaobjektid, mida nimetatakse spraitideks. Programmi protseduurid ehk skriptid, mille abil saab määrata tegevusi spraitidega pannakse kokku hiire abil plokidest nagu Lego lelud. Plokid vastavad enam vähem lausetele või ka pöördumisi protseduuride poole nö tavalistes (tekstipõhistes) programmeerimiskeeltes.

Näide: Kraps, Juku ja teised

 

Programmi uueks käivitamiseks klõpsake rohelist lippu.
Heli sisse ja välja lülitamiseks klõpsage vastavat nuppu.
Programmi töö lõpetamiseks klõpsake punast nuppu.
Muutuja sk väärtust, millest sõltub Krapsu liikumise kiirus, saate muuta liuguri abil.
Muutuja max väärtus määrab sammude maksimaalse arvu.
Nupuga Vaheta saate vaheldumisi näha skripti, andmemudelit, algoritmi esitust tegevusskeemina või pseudokoodis.


Vaadeldavas programmis esineb üsna mitmeid Scratch'i nö tüüpelemente ja vahendeid, mis illustreerivad nii Scratch'i kui ka üldiseid programmeerimise põhikontsepte ja vahendeid, mis põhimõtteliselt esinevad ühel või teisel viisil enamikus programmeerimissüsteemides ja -keeltes. Allpool, on näitele tuginedes, kirjeldatud lühidalt nende kasutamist Scratch'is.

Objektid (spraidid) ja andmed

Programmis on kasutusel neli nö aktiivset graafikaobjekti (spraiti): Kraps, Juku, plika (alias, baleriin) ja häkker. Nende tegevusi, mis on märatud skriptidega, võib näha apletil. Animatsioonide loomisel Scratch'is on oluline roll kostüümidel. Need on antud objekti erinevad kujutised, mille vahetamisel programmi täitmisel tekkib liikumise (muutumise) efekt. Krapsul on siin näiteks kaks kostüümi: imiteerivad jalgade liikumist, baleriinil on neli kostüümi tantsu imiteerimiseks. Veidi teisel viisil on näites kasutusel kostüümid skripti, andmemudeli, tegevusskeemi ja pseudokoodi vahelduvaks kuvamiseks. Tegemist on samuti graafikaandmetega (piltidega), mis formaalselt kujutavad ühe objekti (spraidi) kostüüme. Klõpsates käsunuppu Vaheta või parasjagu nähtavat pilti, kuvatakse järgmine kostüüm. Kasutusel on veel üks graafikaobjekt: lava taustapilt. Taustasid võib olla mitu ja neid saab programselt vahetada.
Kasutusel on mitu arv- ja tekstkonstanti ja viis arvmuutujat, neist kolme väärtused (sk, samme ja max) on nähtaval ekraanil, kus kahe väärtust (algandmed): sk ja max, saab muuta nn liugurite (kerimisribade) abil.
Ka heliandmed on siin mängus. Et mitte ehmatada lugejat ootamatu heliga, saab selle lülitada sisse välja vastava nupu abil. Saab imiteerida erinevaid muusikariistu, kasutada salvestatud heliklippe ja lindistada neid otse rakenduse loomise ajal.

Skriptid ja käsud (plokid)

Scratch'i programm võib koosneda ühest või mitmest üksusest (protseduurist), mida nimetatakse skriptideks. Iga skript kuulub kindlale spraidile (objektile) ja saab otseselt juhtida ainult selle tegevusi, kuid see võib nö suhelda teiste spraitidega ja mõjutada nende käitumist. Ühel objektil võib olla suvaline hulk skripte. Objektorienteeritud lähenemisviisi seisukohalt, kujutavad skriptid kasutaja poolt loodud meetodeid.
Apleti aknas on toodud üks Kraps'u skriptidest, millest algab programmi täitmine, kui klõpsatakse rohelist lippu. Olgu märgitud, et traditsioonilist peaprogrammi või peaprotseduuri mõistet Scratch'is ei ole. Korraga saab käivitada kohe mitu skripti, kui nende alguses on näiteks roheline lipp. On ka teisi viise skriptide üheaegseks käivitamiseks ja paralleelseks täitmiseks.
Vaadake apleti aknas kuvatud Krapsu skripti ja sellega määratud tegevusi, käivitades vajadusel, klõpsates rohelist lippu, programmi korduvalt. Siin võib näha mitmete tüüptegevuste esitamist Scratch'is vatavate plokkide (lausete) abil.
Kõigepealt plokk mängi heli näu, tekitab heli. Siin ja edaspidi esitame selgitustes plokid tekstina. Plokk ütle Tere! .. 1 sek, kuvab näidatud aja jooksul antud teate. See vastab enam-vähem paljude programmeerimissüsteemide teatebokside kasutamisele.
Käsk teavita start ja oota, on analoogne pöörduslausele teistes keeltes (näiteks Call-lause). Kuid on siiski väga oluline erinevus. Tavaliselt käivitab pöörduslause konkreetse protseduuri. Scratch'is võivad teavita käsu poolt väljastatud teate võtta vastu mitu skripti. Praegu on neid kolm: spraitide häkker, Juku ja plika vastavad skriptid, mis hakkavad tööle üheaegselt ja töötavad parlleelset. Kui käsus teavita on laiend oota, siis antud skripti täitmine peatatakse nii kauaks, kuni lõpetakse kõige kauem töötava väljakutsutud skripti töö. Kui laiend oota puudub, täitmisjärge tagasi ei anta.
Laused: võta samme väärtuseks 0 ja muuda samme sk võrra, esindavad nö klassikalise omistamislause kahte varianti: samme = 0, samme =samme + sk. Siin samme ja sk on muutujad.
Plokk korda kuni samme > max, määrab nn eelkontrolliga Until-korduse. Ploki "hailõugade" vahel olevaid käske (plokke) täidetakse seni, kuni tingimus samme > max saab tõeseks. Pange tähele selle juhtimisploki struktuursust ja ilmekust! On ka teisi kordusplokke. Juhime tähelepanu ka korduses kasutuses olevale kahendvaliku plokile: kui suund = 90 ... muidu ... . Valikusse kuuluvad plokid on jällegi väga selgelt eristatavad.
Korduses olevatest plokkidest peatume veel käsul: oota 0.1 sek, mis määrab pausi kahe tegevuse vahel. Taoliste pauside tekitamine on väga sageli vajalik liikumiste ja muutuste kiiruse (animatsiooni sujuvuse) reguleerimiseks.
Plokk kui äärel, põrka, esindab reaktsiooni sündmusele. Kui Kraps puudutab lava serva, muudetakse tema liikumise suund vastupidiseks. Olgu märgitud, et suund, asukoha koordinaadid (x, y), värvus ja suurus jmt, on kõikide spraitide olulisemateks omadusteks, mida saab muuta vastavate plokkide (meetodite) abil.
Skriptide (võib öelda ka spraitide) koostöö ja juhtimisplokide kasutamise demonstreerimiseks on allpool toodud kolm spraidi Juku skripti. Esimene neist käivitub, kui Krapsult saabub teade start. Selle täitmisel Juku teeb viis hüppet ploki korda 5, juhtimisel (NB! Veel üks korduse liik Scratch'is). Kordusest toimub pöördumine skripti (võiks öelda, alamprotseduuri) hüppa poole, mis tekitab ühe hüppe, muutes spraidi y-koordinaati. Peale hüpete täitmist, käivitatakse teatega jätka teine skript. Selles on tegemist nn lõputu kordusega (NB! Ja veel üks korduse liik), mille täitmisel Juku teeb järjest hüppeid, kui Krapsu suund = -90 (vasakule). Siin, muuseas, demonstreeritakse fakti, et üks sprait võib küsida (saada teada) teise spraidi omadusi: praegu Juku arvestab Krapsu liikumise suunaga. Paneme tähele, et skript pöördub samuti skripti (alamprotseduuri) hüppa poole.
Muide, antud skripti lõputu kordus ja ka kogu programmi töö lõpetatakse käsuga peata kõik, mille antud juhul annab plika (vabandust, baleriini) vastav skript.

Js1 js2 js3

Demo: kolmnurk

Järgnev aplett näitab Scratch'i kasutamist lihtsateks arvutusteks ja nö reaalaja jooniste tegemiseks nn "pliiatsi" abil. Lisaks demonstreerib see veel mõningaid muid Scratch'i võimalusi.

 

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 ja mõningaid juhtimisega seotud tegevusi, on programmi lisatud mõned ülesande lahendamise seisukohast mittevajalikud elemendid: animatsioonid, heliefektid jm.


Vaata veel mõnda demot: Jalka. Koletis. Autode võidusõit. Arvu arvamine.

Algoritmide demod

Õpetamise protsessis võib Scratch'i skripte käsitleda ka kui omalaadseid nö töötavate algoritmide esitusi. Scratch'i abil saab näiteks visualiseerida erinevate algoritmide tööd. Allpool toodud kaks apleti demonstreerivad Scratch'i kasutamist aktiivsete õppematerjalide loomiseks. Taolisi asju võiks teha näiteks ka õppijad algoritmide paremaks omandamiseks.

 

Programm demonstreerib maksimumi otsimist vektoris.

Maksimumi esialgseks jooksvaks väärtuseks võetakse vektori esimene element.
Seejärel võrreldakse järjest vektori iga elementi maksimumi jooksva väärtusega. Kui mingi element on suurem maksimumi jooksvast väärtusest, võetakse see uueks jooksvaks maksimumiks.


 

 

Programm demonstreerib vahetussortimise ehk minimaalsete elementide algoritmi.

Järjest muudetakse indeksi i väärtust 1-st kuni n-1-ni.
Leitakse minimaalse elemendi asukoht (nr) alates i-st kuni n-ni ning vahetatakse element numbriga i minimaalse elemendiga.
Seega tõstetakse väiksemad elemendid järjest ettepoole.


Võiks öelda, et lõpmatul hulgal võite saada Scratch'i näiteid selle kodusaidilt: http://scratch.mit.edu.

Link massiivid ja algoritmid demonstreerib massiivide kasutamist Scratchis, algoritmide võimalikke esitusi ning ka Scratch'i mõningaid võimalusi õppematerjalide esitamiseks.

Tundmatu VBA?

Juba aastaid oleme me kasutanud programmeerimise õpetamiseks mitteinformaatikutele VBA-d Exceli keskkonnas. Tahaks kohe rõhutada, et eesmärgiks ei ole Exceli programmeerimine, vaid programmeerimine Excelis. Ning ka VBA ei ole eesmärgiks omaette, vaid on vahend programmeerimise ja rakenduste loomise õpetamiseks. Täpsemalt peakski ütlema, et meie kursuse põhisisuks on rakenduste loomise alused. Tegemist ei ole ainult programmeerimisega, vaid mängu tulevad ka objektorienteeritud analüüsi ja modelleerimise (UML klassi-, objekti- ja tegevusdiagrammid) ning disaini (andmestruktuurid, kasutajaliidesed, algoritmid jmt) põhielemendid.
Excel koos VBA-ga pakub väga mugavat ja lihtsat keskkonda ja efektiivseid vahendeid objektipõhise programmeerimise põhikontseptsioonide kiireks omandamiseks. Tahaks aga eriti rõhutada, et lisaks üldharivate ja -arendavate teadmiste omandamisele, pakub VBA kasutamisoskus ka väga olulisi pragmaatilisi võimalusi. Dokumendipõhised rakendused, mille loomisel kasutatakse VBA-tüüpi arendusvahendeid, leiavad laialdast kasutamist, võimaldades kiiresti luua nii lõpplahendusi kui ka prototüüpe. Muide, VBA-d kasutatakse mitte ainult Microsoft'i toodetes vaid ka mitmete teiste firmade omades. Näiteks tasub mainida kas või selliseid süsteeme nagu üks maailmas enim kasutatav joonestamise, modelleerimise ja disaini programm AutoCAD (firma Autodesk), väga tuntud kujundusprogramm CorelDraw (Corel).
Excel koos VBA-ga pakub mitte millegagi võrreldavat keskkonda ja vahendeid kasutajaliideste lihtsaks ja kiireks loomiseks rakenduste (programmide) jaoks ning nii kasutaja kui ka programmi suhtlemiseks sellega.
Töölehe lahtreid ja piirkondi saab lihtsalt kasutada algandmete sisestamiseks ja tulemuste väljastamiseks nii üksikväärtustena kui ka massiividena ja tabelitena. Vajadusel saab printida või säilitada algandmeid ja/või tulemeid korduvaks kasutamiseks, printides või salvestades lihtsalt tööleht või töövihik. Võiks veel lisada võimaluse kasutada Exceli vahendeid andmete kujundamiseks ja vormindamiseks, kasutamata selleks programmeerimise vahendeid. Need tegevused on teistes süsteemides võrdlemisi tülikad ja aeganõudvad.
Exceli tööleht pakub lihtsaid ja mugavaid võimalusi graafikaandmete paigutamiseks ning VBA abil saab suhteliselt lihtsalt nendega manipuleerida, kasutades objektide omadusi (koordinaadid, laius, kõrgus, värvus, nähtavus jm) ja meetodeid (lisamine, eemaldamine, skaleerimine, teisaldamine, kopeerimine jm). Väga lihtsalt saab panna graafikaobjektid liikuma ja realiseerida näiteks animatsioone. Võiks öelda, et pea sama lihtsalt nagu Scratch'is. Samal ajal saab VBA-ga teha ka nö täpisjoonestamist, andes programmselt ette joonise elementide paigutuse ja mõõtmed.
Eraldi tasub nimetada võimalust manipuleerida diagrammide ja graafikutega. Siin võib piirduda ainult Exceli vahenditega, sidudes diagrammid staatiliste piirkondadega (tabelitega) või kasutada VBA-d dünaamiliste andmete esitamiseks diagrammil ning viimase omaduste muutmiseks.
Töölehel saab lihtsalt kasutada liideste tüüpkomponente (ohjurid ehk juhtijad): käsunupud, kerimisribad, spinnerid, märkeruudud ja raadionupud, kombo- ja loendiboksid jm. Paljudel juhtudel polegi nende kasutamiseks vaja VBA-d. Viimast võib pruukida täiendavate võimaluste realiseerimiseks.
Väga kasulik ja lihtne on võimalus programselt kontrollida mitmesuguseid sündmusi: lahtri või lahtriploki sisu muutumine, aktiivse lahtri asukoha muutmine, ohjurite oleku muutus jm.
Soovi korral võib ka Excelis võtta kasutusele vormid, ilma milleta ei saa enamikes teistes süsteemides üldse realiseerida normaalset kasutajaliidest. Tasub aga silmas pidada, et vormide abil liidese loomine on töölehe liidesega võrreldes tunduvalt tülikam ja aeganõudvam, eriti kui on vaja kasutada tabeleid, massiive ja graafikat.

Toome näiteks rakenduse realisatsiooni Excelis kolmnurga ja selle siseringi omaduste leidmiseks ning joonestamiseks. Ülalpool oli toodud selle analoog Scratch'is. Juhul kui käepärast ei ole Excel'it on allpool toodud rakenduse kasutajaliidese kuva. Exceli olemasolu korral võib laadida alla vastava töövihiku, kus saab tutvuda ka realisatsiooni teiste variantidega: Kolmnurk_1.xls.

kolm_exc

Pildil on näha liidese kõik põhielemendid. Algandmete ja tulemite jaoks kasutatakse töölehe lahtreid. Algandmete sisestamiseks (muutmiseks) võib kasutada spinnereid. Kusjuures väärtuste muutmisel käivitub automaatselt (sündmusprotseduuri vahendusel) programm tulemute leidmiseks ja kuvamiseks ning joonise tegemiseks. Viimase loomisel arvestatakse mõõtühikuid (cm) ja mõõtkava ehk mastaapi. Töölehe võrgustik on määratud nii, et ruudukeste suurus on 5*5 mm, selle võib ka välja lülitada.
Mõningate graafikavahendite võimaluste demonstreerimiseks ja rakenduse atraktiivsuse suurendamiseks on siin kasutatud kujundite värvuste muutmist juhuslike arvude abil. Samuti on veidike demonstreeritud objektide asukoha muutmist ja animatsiooni kasutamist: Kraps liigub kaasa kolmnurga mõõtmete muutmisel, Juku aga teeb hüppeid peale ülesande lahendamist.

Oma programmeerimiskursust oleme me juba aastaid alustanud graafikaobjektide kasutamisega Excel'is. Kusjuures alguses on suur osatähtsus liikumise, animatsioonide ja mängude programmeerimisel. Selle läbi saab kiiresti omandada objektorienteeritud lähenemisviisi põhimõtted: klassid, objektid, omadused, meetodid, sündmused jm, protsesside juhtimine: jada, kordus, valik jm. Viimasel ajal me teeme alguses sissejuhatuse Scratch'iga (5-6 tundi) ning mõnikord kasutame viimast mõningate mõistete selgitamiseks ka hiljem.

Näiteks on siin toodud üks esimestest VBA harjutustest. Juhuks, kui lugejal ei ole käepärast Excelit, annab ettekujutuse asjast alltoodud kasutajaliidese pilt. Kui aga on Excel arvutis olemas, võib alla laadida töövihiku näidetega: Näited 1, kus on veel mitu varianti.
Pea kohe võib alustada kordustega, eriti peale sissejuhatust Scratch'iga. Antud rakendus paneb pöörlema veski tiivad ja vilkuma akna (muudab juhuarvude abil selle värvust). Programmi tekst on nähtav liidese aknas.
Tegemist on Do...Loop-lausega juhitava lõputu kordusega. Igal kordamisel loeb programm töölehe lahtritest gaas ja käik muutujate dp ja kiir väärtused, arvestas, et kasutaja võib suvalisel hetkel muuta lahtrite väärtusi pöörlemise kiiruse muutmiseks. Graafikaobjekti meetodiga IncrementRotaion muudetake objekti tiivad pöördenurka dp kraadi võrra. Omaduse SchemeColor abil muudetake objekti aken värvust. Ning väga oluline liikumiste ja animatsioonide programmeerimisel! Selleks, et liikumine oleks nähtav ja et selle kiirust saaks reguleerida, tehakse väikene paus. Praegu on pausi pikkus määratud avaldisega 1/kiir: mida suurem on muutuja kiir (või lahtri gaas) väärtus, seda väiksem on paus ja suurem pöörlemise kiirus. Pöörlemise kiirus sõltub ka pöördenurga juurdekasvust: muutuja dp ehk lahtri käik väärtus. Pausi tekitamiseks on meil kasutusel väike protseduur paus, mida algaja võib kasutada nö "musta kastina".
Tasub tähele panna, et antud juhul kasutatakse ainult kahte aktiivset graafikaobjekti: tiivad ja aken. Kõik teised on praegu taustaks ehk dekoratsiooniks. Harjutuse järgmistes variantides hakkavad mõned neist ka "elama". Näiteks Juku ja Kraps sõidavad autoga.

veski

Sellega praegu piirdume. Täiendavat infot ja ka näiteid võib leida materjalist Sissejuhatus VBAsse.