Lietojumprogrammas Izveidošana Zināšanu Kontrolei Delphi 3.0 Vidē

Autors: Oksana Kaminska


Deviņdesmito gadu sākumā, saņemot atbalstu no starptautiskajiem fondiem un programmām, Latvijā tika uzsākta profesionālās izglītības reforma, lai palielinātu izglītības atbilstību mainīgā darba tirgus prasībām, jo darba tirgū arvien jūtamāks ir pieprasījums pēc cilvēkiem, kas spēj risināt problēmas, praktiski pielietojot iegūtās zināšanas nestandarta situācijās.

Audzināšanas un mācīšanas darba būtisks uzdevums, lai sasniegtu labus rezultātus, ir kontrolēt šo procesu efektivitāti. Viena no kontroles sastāvdaļām ir audzēkņu zināšanu pārbaude, kas nodrošina atgriezenisko saiti starp skolotāju un audzēkni un ļauj iegūt objektīvu informāciju par audzēkņa zināšanu pakāpi un savlaicīgi diagnosticēt vājās vietas audzēkņu zināšanas. Zināšanu pārbaudes mērķis ir ne tikai konstatēt audzēkņu zināšanu līmeni un kvalitāti, bet arī darba apjomu.
Vairāk kā 10 gadus strādājot arodvidusskolā, visu laiku esmu saskārusies ar problēmām, kas ir saistītas ar audzēkņu zināšanu novērtēšanu. Pēdējos gadus, mācot mazā biznesa kursu un informātiku, meklēju variantus, kā labāk un ātrāk pārbaudīt audzēkņu zināšanas, pa šo laiku ir uzkrāta zināma pieredze un dažādi metodiskie materiāli.
Arodskolu audzēkņiem pēc pamatskolas beigšanas raksturīgs diezgan zems sagatavotības līmenis vispārizglītojošajos priekšmetos. Viņiem ir zināmas grūtības precīzi formulēt savu domu, atbildot izņemto vielu. Ekonomiskā terminoloģija lielākajai daļai no viņiem ir kaut kas jauns un tās analīze rada audzēkņiem grūtības. Skolotājam vienmēr ir jāpatērē daudz laika, lai pārbaudītu audzēkņu zināšanas, jo tas ir darbietilpīgs process. Sevišķi labi tas redzams arodskolās, jo lielākajai daļai audzēkņu nepieciešams vairāk laika, lai noformulētu savas atbildes.
Šādos apstākļos aktuāla kļūst problēma kā samazināt laiku zināšanu kontrolei, lai vairāk uzmanības varētu veltīt jaunās vielas izskaidrošanai un apgūtā materiāla nostiprināšanai, lai atliktu arī laiks individuālajām darbam ar audzēkņiem.
Lai paātrinātu audzēkņu zināšanu novērtēšanu, es izstrādāju daudz ieskaišu, kurās lielākā daļa jautājumu ir testa veidā. Bet pārbaudes formai rakstiskā testa veidā ir vairāki būtiski trūkumi:
1.  Audzēkņi cenšas padalīties zināšanās par pareizo atbildi ar kaimiņu.
2.  Ieskaiti nokārtojušie grupu audzēkņi dalās pieredzē par saviem panākumiem ar citu grupu audzēkņiem, kuri vēl ieskaiti nav kārtojoši un daži no viņiem pēc tam mehāniski atzīmē pareizo atbildes burtu vai ciparu, nedomājot par jautājuma būtību.
3.  Pirms ieskaites ir jāsagatavo testu lapas un jātērē laiks, lai pārbaudītu darbus un izliktu atzīmes.
Šos trūkumus lielā mērā varētu novērst, izmantojot datorus, kas autamātiski var apstrādāt testa rezultātus ar atbilstošu lietojumprogrammu.
Jaunajām programmēšanas sistēmām ir raksturīga ātra lietojumprogrammu izstrādāšanas iespējas – Rapid Application Development (RAD). Šajā jaunajā RAD pasaulē programmētāji izmanto instrumentus, kuri ir uzskatāmi un intuitīvi saprotami.
Labs līdzeklis, lai radītu šādu programmproduktu ir programmēšanas vide Delphi.
Delphi pilnībā kompilē programmu uz mašīnas kodu. Šī priekšrocība ietekmē programmas izpildes ātrumu. Delphi bāzējas uz Object Pascal valodu. Object Pascal – tā ir objektu-orientēta valoda ar labu kompilatoru.
No programmētāja viedokļa, programma, kas strādā Delphi vidē, sastāv no klašu apraksta, kas atbilst lietojumprogrammas galvenajai formai un visām pārējām viņā lietojamajām formām. Pie kam klašu apraksts, kas atbilst formai, tiek veidots automātiski, un papildinājumi tajā nepieciešmai tikai tādā gadījumā, ja jūs tur ienesiet kādas papildmetodes.
Programmētājs raksta tikai to kodu, kas viņa lietojumprogrammā nosaka tiešu funkcionalitāti. Visu palīgkodu rada automātiski pati vide. Pat vairāk –palīgkods vispār ir noslēpts no programmētāja. Tas atvieglo programmprodukta radīšanu.
Darba mērķis: Izstrādāt lietojumprogrammu zināšanu kontrolei arodskolas audzēkņiem kursā “Ievads ekonomiskajā teorijā” Delphi 3.0 vidē.
Darba uzdevumi:
1.  Iepazīties ar objektu-orientētās programmēšanas principiem.
·     Iepazīties ar programmatūras izstrādāšanas principiem.
·     Iepazīties ar integrēto Delphi vidi.
·     Noskaidrot, kas ir programma no Delphi viedokļa.
·     Iepazīties ar Delphi 3.0 komponenšu īpašībām, kuras ir nepieciešamas lietojumprogrammas zināšanu kontrolei izveidošanā.
2.  Izsrādāt lietojumprogrammu “Ekonomika”:
·     Noteikt funkcijas, kuras ir jāveic programmai.
·     Sastādīt testu jautājumus.
·     Izveidot HTML failus par mācību tēmām.
·     Izprojektēt lietotāja grafisko interfeisu.
·     Uzrakstīt kodu notikumu apstrādātājiem.
·     Izveidot datu bāzi, lai glabātu testu jautājumus un atbilžu variantus.
·     uzrakstīt to kodu, kas lietojumprogrammā nosaka tiešu funkcionalitāti.
Maģistra darba aktualitāte ir tajā apstākļi, ka šī lietojumprogramma paātrinās zināšanu pārbaudes procesu, skolotājam nevajadzēs tērēt tik daudz laika atzīmju izlikšanai un audzēkņi uzreiz uzzinās rezultātus. Bez tam, kā ekonomisko zināšanu kontroles sistēmas sastāvdaļa, lietojumprogramma “Ekonomika” atbilst visiem sekmības diagnosticēšanas un kontroles principiem:
1. Objektivitāte. Tā izpaužas:
·     testa jautājumu saturā, kuri atbilst apgūstamajam materiālam;
·     vienādos kritērijos visiem audzēkņiem;
·     apstāklī, ka audzēknis pats uzreiz redz savu atzīmi, jo atzīme ir viens no galvenajiem pedagogu līdzekļiem, lai stimulētu mācīšanos, veidotu pozitīvu motivāciju. Tieši objektīvas novērtēšanas ietekmē audzēkņiem veidojas adekvāts pašnovērtējums un kritiska attieksme pret saviem panākumiem.
2. Sistemātiskums. Kontrole tiek veikta visos didaktiskā procesa etapos. Testa jautājumi balstās ne tikai uz konkrētas tēmas materiāla, bet arī uz iepriekš apgūto.
3. Uzskatāmība. Testēšana visiem audzēkņiem notiek pēc vienādiem noteikumiem un par vienām un tām pašām tēmām. Datora izmantošana dod papildu stimulu, lai mācītos.

1.1. Objekt- orientētās programmēšanas principi

Objekt-orientētās programmēšanas pirmais princips uzdevumu risināšanas pieejā ir darbību uzdošanas veids. Darbības objektu orientētajā programmēšanā inicializējas paziņojumu veidā, ko nodod aģentam (objektam), kas atbild par darbību. Paziņojums satur pieprasījumu darbības veikšanai un ir papildināts ar papildus informāciju (argumentiem), kas nepieciešami tās izpildei. Saņēmējs (receiver) – tas ir aģents, kuram sūta paziņojumus. Ja tas pieņem paziņojumu, tad automātiski uz viņš ir atbildīgs par norādītās darbības izpildi. Kā atbildi uz paziņojumu saņēmējs izpildīs kādu metodi, lai apmierinātu pieprasījumu.
Objektu –orientētās programmēšanas fundamentāls jēdziens ir atbildība vai saistības par darbības izpildi. Visi objekti ir klašu pārstāvji vai eksemplāri. Metodi, kuru aktivizē objekts kā atbildi uz paziņojumu, nosaka klase, pie kuras pieder paziņojuma saņēmējs. Vienas klases visi objekti izmanto vienu un to pašu metodi kā atbildi uz vienādiem paziņojumiem.
Valodā Object Pascal rezerves vārds class ļauj aprakstīt objektu. Kad jūs izveidosiet jaunu Delphi projektu un paskatīsieties Unit1 deklarācijas, tad ieraudzīsiet jaunās formas deklarāciju:
type
  TPamatIzvele = class(TForm)
Moduļa sadaļā Interface jūs uzdosiet tipa vārdu (TPamatIzvele) un tad bāzes klasi, no kuras tas ir veidots. Visiem objektiem ir jābūt pakārtotiem no TObject, vai no viena no tā pēcnācējiem.
Principu, attiecībā pret kuru zināšanas par vispārīgāku kategoriju atļauj izmantot priekš šaurākām kategorijām, sauc par pārmantojamību. Klases tiek piedāvātas hierarhiskā kokveida struktūras veidā, kurā abstraktākas klases atrodas koka beigās, bet specializētākas klases, galu galā individumi, atrodas koka sākumā uz zariem.
Metodes meklēšana, kura izsaucas kā atbilde uz noteiktu paziņojumu, sākas no metodēm, kas pieder saņēmēja klasei. Ja atbilstoša metode nav atrasta, tad meklēšana turpinās līdz senča klasei. Meklēšana iet uz augšu pa radniecīgo klašu ķēdi līdz tam, kamēr būs atrasta vajadzīgā metode vai arī būs pārmeklētas visas radnieciskās klases. Pirmajā gadījumā izpildās atrastā metode, otrajā – tiek izdotas paziņojums par kļūdu. Ja klases hierarhijā augstāk eksistē metodes ar tādu pašu nosaukumu, kāds ir tekošajai, tad saka, ka dotā metode pārdefinē mantojamo darbību. Tas, ka objekti reaģēs uz paziņojumiem ar dažādu metožu pielietošanu, ir viens no polimorfisma piemēriem.
Objektu-orientētās programmēšanas (OOP) raksturlielumi:
1.     Viss ir objekts.
2.     Aprēķini tiek veikti sadarbības ceļā (datu apmaiņa) ar objektiem, kurā viens objekts pieprasa, lai cits objekts izpildītu noteiktu darbību. Objekti sadarbojas nosūtot un saņemot paziņojumus. Paziņojums – tas ir pieprasījums izpildīt darbību, kas papildināts ar argumentiem, kas var būt nepieciešami darbības izpildei.
3.     Katram objektam ir neatkarīga atmiņa, kas sastāv no citiem objektiem.
4.     Katrs objekts ir klases pārstāvis, kas apraksta objektu kopējās īpašības (tādas, kā veselie skaitļi vai saraksti).
5.     Klasē tiek uzdota objekta funkcionalitāte. Tai pat laikā visi objekti, kas ir vienas klases eksemplāri, var izpildīt vienas un tās pašas darbības. Klases ir organizētas vienotā kokveida struktūrā ar kopēju sakni, tā saucamajā pārmantojamības hierarhijā. Atmiņa un darbība, kas saistīta ar noteiktas klases eksemplāriem, ir automātiski pieejama jebkurai klasei, kas novietota zemāk kokveida hierarhijā.
Galvenā objektu- orientētā pieeja priekš programmas sarežģītības kontroles- tā ir abstrahēšana, proti spēja atdalīt programmas loģisko jēgu no tās realizācijas problēmas. Vienā ziņā objektu- orientētā pieeja vispār nav revolucionāra un būtu jāizskata kā vēsturiskās attīstības dabisks rezultāts: no procedūrām uz moduļiem, tālāk uz abstraktiem datu tipiem un visbeidzot uz objektiem.
Procedūras un funkcijas bija divi pirmie abstrahēšanas mehānismi, kuri tika pielietoti programmēšanas valodā. Procedūras atļauj koncentrēt vienā vietā darbu, kurš daudzkārt izpildās(var būt ar nelielām variācijām), un pēc tam daudzkārtēji izmantot šo kodu tā vietā, lai rakstītu to no jauna. Bez citām iespējām, procedūras pirmo reizi nodrošināja informācijas maskēšanu. Programmētājs varēja uzrakstīt procedūru vai procedūru kopumu, kuras pēc tam izmantotu citi cilvēki. Procedūras neatrisināja visas problēmas. Tas ir viņām nepiemita efektīgs datu organizēšanas detaļu maskēšanas mehānisms un tikai daļēji noņēma problēmu dažādiem programmētājiem izmantot vienādus nosaukumus.
Vienā ziņā moduļus var izskatīt kā uzlabotu nosaukumu, un ar tiem saistīto nozīmi, izveidošanas un vadības metodi. Ja izskata moduli kā abstraktu koncepciju, novest līdz savai vienkāršākajai formai, tad tās jēga ir nosaukumu telpas sadalīšana divās daļās. Atvērtā (public) daļa ir moduļa ārienē, aizvērtā (private) daļa ir pieejama moduļa iekšpusē. Tipi, dati (mainīgie)  un procedūras var būt attiecinātas uz jebkuru no šīm daļām.
Pareizi moduļu izmantošanas principi:
1. Lietotāju, kurš vēlas izmantot moduli, nāktos nodrošināt ar visu nepieciešamo informāciju, lai to izdarītu korekti un ne vairāk.
2. Izstrādātāju nāktos nodrošināt ar visu nepieciešamo informāciju priekš moduļa izveidošanas un ne vairāk.(Deivids Parnass, 1972 ).
Šī filozofija lielā mērā izprot kara doktrīnu ‘nepieciešamo zināšanu’: ja jums nav vajadzīgs zināt noteiktu informāciju, jums arī nav nepieciešama pieeja šai informācijai. Tā ir acīmredzama, noteikta un mērķtiecīga
 informācijas slēpšana tiek saukta par informācijas maskēšanu. Vienkāršie moduļi, kuri ņemti paši par sevi, nodrošina efektīvu informācijas maskēšanas paņēmienu, bet tie neļauj veikt eksemplāru pavairošanu, ar ko sprot iespēju izveidot daudzas datu apgabalu kopijas. Lai novērstu pavairošanas problēmu, informātikas speciālistiem nācās izstrādāt jaunu koncepciju.
Programmētājs definē abstraktu datu tipu. Abstraktajam datu tipam atbilst viss (iespējams bezgalīgs) pieļaujamo vērtību kopums un elementāro operāciju rinda, kura var būt izpildīta pamatojoties uz datiem. Lietotājam ir atļauts izveidot mainīgos, kuri pieņem vērtības no pieļaujamā intervāla, un manipulē ar tām, izmantojot esošās operācijas.
Moduļus bieži izmanto abstrakto datu tipu realizācijā. Lai uzbūvētu datu tipu ir jābūt:
1.     Eksportēt noteiktus datu tipus.
2.     Padarīt pieejamu operāciju kopumu, kurš tiek izmantots, lai manipulētu ar dotā tipa eksemplāriem.
3.     Aizsargāt datus, kas saistīti ar datu tipu, lai ar viņiem varētu strādāt tikai ar programmas norādījumu palīdzību.
4.     Izveidot dažus abstraktā datu tipa eksemplārus.
Mūsu definīcijā moduļi kalpo tikai kā informācijas maskēšanas mehānisms un tāpēc ir netieši saistīti tikai ar šī saraksta 2 un 3 punktā aprakstītajām īpašībām. Pamatīpašības principā var būt realizētas izmantojot atbilstošas programmēšanas tehnikas.
Zināmā mērā objekts – ir vienkārši abstrakts datu tips, bet jēdziens objekt-orientētā programēšana, kaut arī tiek būvēta uz abstrakto datu tipu idejām, pievieno viņām svarīgus jauninājumus sadalīšanas un kopīgās programmēšanas koda izmantošanas sfērā.
OOP pievieno nedaudzas svarīgas idejas abstrakto datu tipu koncepcijai koncepcijai. Galvenā no tām – ziņojumu pārsūtīšana. Darbība inicializējas pēc pieprasījuma, kas vērsts uz konkrētu objektu, bet ne caur funkciju izsaukumu. OOP pievieno polimorfisma un pārmantojamības mehānismus. Pārmantojamība ļauj dažādiem datu tipiem kopīgi izmantot vienu un to pašu kodu, novedot pie izmēra samanizāšanās un funkcionalitātes palielināšanas. Polimorfisms pārsedz šo kopējo kodu tā, lai apmierinātu konkrētas atsevišķu datu tipu  īpatnības. Akcents uz individuālu komponenšu neatkarību ļauj izmantot soļveida konstruēšanas procesu, pie kuras izstrādājas atsevišķi programmnodrošinājuma bloki, programmējas un noskaņojas līdz tam, kamēr tie apvienojas kopējā sistēmā.
Objekt-orientētā programmēšana- tas ir ne tikai nedaudzas jaunas īpašības, kas pievienotas jau esošajai valodai. Drīzāk – tas ir jauns solis dekompozīcijas uzdevumu procesu veidošanā un programmnodrošinājuma izstrādē.
OOP izskata programmu kā brīvi savā starpā saistītus aģentus, tā saucamos objektus. Katrs no tiem atbild par konkrētu uzdevumu. Aprēķini tiek veikti objektu mijiedarbības rezultātā. Tā tad, zināmā mērā programmēšana – tā ir ne vairāk, ne mazāk kā pasaules modelēšana.
Objekts veidojas stāvokļa inkapsulācijas stāvokļa (datu) un uzvedības (operācijas) rezultātā. Tāpēc objekts daudzējādā ziņā ir analogs modulim vai abstraktajam datu tipam.
Objekta uzvedību diktē tā klase. Katrs objekts ir kādas klases eksemplārs. Visu vienas klases eksemplāru uzvedība būs vienāda(tas ir izsauks vienas un tās pašas metodes) kā atbilde uz vienādiem pieprasījumiem.
Objekts savu uzvedību izrāda metodes izsaukšanas ceļā kā atbildi uz paziņojumu. Paziņojuma interpretācija (tas ir konkrētā izmantojamā metode) ir atkarīga no objekta un var būt dažādas klases objektiem.
Objekti un klases paplašina jēdzienu par abstrakto datu tipu pārmantojamības ceļā. Klases var būt organizētas hierarhiska koka pārmantojamības principa. Dati un to uzvedība, kas saistīti ar klasēm, kuras hierarhiskajā koka sistēmā novietotas augstāk, ir pieejamas zemākām klasēm. Notiek vecāku klases uzvedības pārmantojamība.
Ar savstarpējās atkarības pamazināšanas palīdzību starp programmnodrošinājuma komponentēm. OOP ļauj izstrādāt sistēmas daudzkārtējai pielietošanai. Tādi komponentes var būt izveidotas un atliktas kā neatkarīgas programmu vienības, izolācijā no citām pielikumprogrammas daļām.
Daudzreizēji izmantojamas programmas komponentes ļauj izstrādātājam saskarties ar augstāka līmeņa abstrahēšanas problēmām. Mēs varam noteikt un manipulēt ar objektiem vienkārši paziņojuma terminos, kurus tie atpazīst, un darbus, kurus tie dara, ignorējot detaļu realizāciju.

 

1.2. Programmatūras izveidošanas principi.

OOP svarīgākais aspekts- projektēšanas tehnika, kas pamatojas uz pienākumu izdalīšanu un sadalīšanu. Tā bija nosaukta par projektēšanu pamatojoties uz pienākumu vai atbildības projektēšanu (responsibility-driven desing).
Par individuālā projekta izstrādāšanu bieži runā kā par “mazo” programmēšanu, bet par liela projekta realizāciju kā par “lielo” programmēšanu.
Priekš “mazās” projektēšanas raksturīgas sekojošas pazīmes:
·        Kodu izstrādā viens programmētājs vai iespējams neliela programmētāju grupa. Atsevišķi ņemts indivīds var saprast visus projekta aspektus no A līdz Z.
·        Galvenā problēma izstrādājot projektēšanas programmu slēpjas dotā uzdevuma algoritmu sastādīšanā.
No otras puses “lielā” programmēšana piešķir projektam sekojošās īpašības:
·        Programmēšanas sistēmu izstrādā liela programmētāju komanda. Pie tam viena grupa var nodarboties ar sistēmas projektēšanu (vai specifikāciju), otra – realizē atsevišķas koda uzrakstīšanas komponentes, trešā- apvieno fragmentus lielā projektā. Nav viena cilvēka, kurš zinātu visu par projektu.
·        Programmnodrošinājuma izstrādes procesa galvenā problēma – projekta vadīšana un informācijas apmaiņa starp grupām un grupu iekšienē.
Programmas dzīves cikls tiek pasniegts maršruta lapas veidā. Tā ir soļu kārtība, kura ir jāpieņem, pie kam noteiktā secībā. Pielietojot šādu disciplinētu piegājienu, izstrādātājs var radīt labāko galīgo beigu produktu un tāpēc tērēt mazāk laika viņa pavadīšanai.
Programmas produkta dzīves cikls tiek izstrādāts 6 pamatetapos.
1.Analīze.
Savas izstrādes analīzes stadijā vajag pēc iespējas precīzāk noteikt uzdevumu. Pie tam nepieciešams izlemt vai būs pareizs problēmas programmiskais risinājums. Vajag pārliecināties, ka Datorpiegajiens  tiks galā ar problēmu, un neradīs papildus grūtības šinī izstrādes etapā jāizlemj kāda  veida resursi nepieciešami izstrādes realizācijā. Lielās firmās dotās izstrādes stadijas rezultāts parasti ir kopējā sistēmas specifika. Tā ļauj noteikt sistēmas raksturu kopumā un uzskaita funkcijas, kuras pēdējas ir jāizpilda. Šinī etapā ņemam funkcijas, kuras bija izdalītas analīzes etapā un detalizēti nosakiet prasības pret katru. Ieejošā informācija priekš dotā etapa ir sistēmas kopējā specifikācija, bet rezultāts programmnodrošinājuma funkcionālā specifikācija. Šeit jūs neprojektējiet nobeigtus lēmumus, bet tikai nepieciešamās darbības programmas izpildīšanai.

1. 1. Attēls. Programmas produkta dzīves cikls
2.     Objekt- orientētā projektēšana.
2.1.    Objektu un to atribūtu  identifikācija. Sarežģītas fiziskas sistēmas tiek vienkāršotas ar projekta sadalīšanu struktūrvienībās. Tieši tā programmnodrošinājuma izstrāde tiek vienkāršota pēc atsevišķu komponenšu izdalīšanas programmas. Komponente – tā ir vienkārši abstrakta vienība, kura var izpildīt noteiktu darbu (tas ir būt ar noteiktiem pienākumiem ). Šinī etapā nav nepieciešams precīzi zināt kā tiek uzdota komponente vai kā tā pildīs savu darbu. Komponente gala rezultātā var tikt pārveidota par atsevišķu funkciju, struktūru vai klasi vai arī par citu komponenti(šablonu). Šinī izstrādes līmenī ir divas svarīgas īpatnības:
1) komponentei ir jābūt nelielam precīzi noteiktu pienākumu kopumam;
2) komponentei ir jāmijiedarbojas ar citām komponentēm tik vāji, cik tas ir iespējams.
2.2.    Darbības . Šeit vajag identificēt darbības, kuras saistītas ar katru no agrāk noteiktajiem objektiem: tā tie, kuri šos objektus rada, tā arī tie, kuri var veidoties virs tiem. Tā arī ir nepieciešams noteikt darbību kārtību un mijiedarbību. Neatkarīgi no tā cik rūpīgi jūs mēģiniet izstrādāt izejošās specifikācijas un programmas sistēmas projektu droši vien lietotāja velmju un vajadzību izmaiņas noteiks atbilstošus labojumus programmā  (bieži vien visas sistēmas dzīves cikla laikā). Izstrādātājiem tas ir jāparedz un savas darbības jāizplāno sekojošā veidā:
·        Galvenais uzdevums slēpjas tur, lai tiktu skartas pēc iespējas mazāk komponentes. Pat principiālajiem jauninājumiem ārējā izskatā vai funkcionālajiem pielikumiem ir jāskar viens vai divi koda fragmenti.
·        Centieties pēc iespējas ticamāk paredzēt pēc iespējas ticamākos izmaiņu avotus un ļaujiet tiem ietekmēt pēc iespējas mazāku programmas komponenšu daudzumu. Visbiežākie kopējo izmaiņu iemesli ir interfeiss, informācijas apmaiņas formāti, izejošo datu izskats.
·        Centieties izolēt un mazināt programmasnodrošinājuma atkarību no aparatūras. Piemēram, lietojumprogrammas interfeiss var būt daļēji atkarīgs no sistēmas aparatūras nodrošinājums, uz kuras darbojas programma.
·        Samazinot saistību daudzumu starp programmas fragmentiem mazina mijiedarbību starp tiem un palielina iespējamību, ka katru komponenti varēs izmainīt ar pēc iespējas minimālāku ietekmi uz citām.
Termins “klase” tiek izmantots, lai aprakstītu objektu kopumu ar līdzīgu uzvedību. Visi vienas kases eksemplāri vienu un to pašu komandu uztver un izpilda  saejošā veidā.
Divi svarīgi jēdzieni izstrādājot programmu ir saķēdēšanās un saistība. Saistība – tas ir mērs tam, cik daudz atdalītā komponente veido loģiski noslēgtu, apdomātu vienību. Augsta saistība tiek sasniegta apvienojot vienā komponentē attiecīgās (tādā vai citādā ziņā) funkcijas. Visbiežāk funkcijas izrādās cita ar citu savienotas, lai vajadzības gadījumā varētu piekļūt kopējiem datiem.
No otras puses saķēdēšanās raksturo mijiedarbību starp programmas komponentēm. Vispārējā gadījumā vēlams samazināt saķēdēšanās pakāpi tiklīdz tas ir iespējams, tā kā saistības starp programmas komponentēm kavē to modificēšanu un traucē tālākai izstrādei vai atkārtotai lietošanai citās programmās.
2.3.        Redzamība. Šajā punktā tiek noteikta projekta topoloģija. Jums ir vajadzīga shēma, kura norāda, kādi objekti ir redzami un var būt redzami no citiem objektiem.
·        Interfeiss. Šeit nosaka kādā veidā  objekti būs saistīti ar citiem objektiem. Šis solis ir ārkārtīgi svarīgs moduļu sistēmas projektēšanā.  Ir precīzi jānosaka kā citi objekti sadarbosies ar doto objektu. Interfeisa daļā apraksta ko dara komponente. Skats no realizācijas viedokļa- tā ‘nianse’, kas redzama tikai tiem kuri strādā ar konkrētu komponenti. Šeit tiek noteikts kā komponente pilda uzdevumu. Interfeisa sadalīšana un realizācija ir, iespējams, sakarīgākā ideja programmēšanā. Runā, ka komponente iekapsulē uzvedību, ja tā prot izpildīt kādas darbības, bet nianses, kā tieši to izdarīt, paliek nezināmas.
Vajag noteikt kā tiks realizēta katra komponente. Komponente, raksturojama tikai ar uzvedību (kurai nav iekšējā stāvokļa), var būt noformēta kā funkcija. Piemēram, komponentei, kas nomaina visus lielos burtus teksta rindā uz mazajiem burtiem. Komponentes ar daudzām funkcijām labāk realizēt klašu veidā. Kopā ar nosaukumiem tiek noteikti argumentu tipi, kurus nodod funkcijām. Pēc tam tiek aprakstīta visa informācija, kas atrodas komponentes iekšienē. Ja komponentei nepieciešamai kādi dati priekš konkrēta uzdevuma veikšanas, to avotam (funkcijas arguments, globālie vai iekšējie mainīgie) jābūt tieši aprakstītam.
Nosaukumi, kuri saistīti ar dažādām darbībām ir rūpīgi jāpiemeklē. Ērtu nosaukumu izvēle ir ļoti svarīga. Tiek piedāvāti sekojoši kopēja rakstura stāvokļi, kas šo procesu regulē:
·        Izmantojiet nosaukumus, kurus var viegli pateikt skaļi.
·        Pielietojiet lielos burtus vai pasvītrošanas simbolus tāpēc, lai atzīmētu jauna vārda sākumu saliktā nosaukumā.
·        Rūpīgi pārbaudiet saīsinājumus.
·        Neizmantojiet ciparus nosaukumos. Tos ir viegli sajaukt ar burtiem.
·        Lieciet funkcijām nosaukumus, kuri atgriež loģisko vērību, lai būtu skaidrs kā interpretēt true un false.
·        Piešķiriet dārgām (no datorresursu viedokļa) un reti izmantojamām operācijām unikālus skaidri izceļamus nosaukumus. Šādi rīkojoties samazināsies iespējamība izmantot “ne tās” funkcijas.
3.  Kodēšana.
Šinī etapā realizējas katrs dotā uzdevuma objekts. Tas nozīmē katra objekta interfeisa koda uzrakstīšanu. Kodēšana piedalās visās atlikušajās izstrādes cikla stadijās un turpinās pat tālāk: visā jūsu produkta palikušā dzīves cikla laikā jūs varēsiet izdarīt izmaiņas kodā. Šeit galvenais – datu struktūras projektēšana, kuri tiks izmantoti katrā no apakšsistēmām priekš iekšējās informācijas glabāšanas, kas nepieciešama, lai veiktu noliktos pienākumus. Datu struktūru izvēle ir svarīgs centrālais moments no programmēšanas viedokļa. Ja priekšstats par datiem izvēlēts pareizi, tad kods, ko izmanto komponente pienākumu veikšanā kļūst gandrīz pašsaprotams.  Datu struktūrām nepieciešams precīzi atbilst izskatāmajam uzdevumam. Šinī pašā etapā komponentes uzvedības aprakstam ir jābūt pārveidotam par algoritmu. Funkciju realizēšana vēlāk tiek pretstatīta komponenšu vajadzībām, kas ir dotā fragmenta klients, lai garantētu, ka visi tās pieprasījumi izrādītos paveicami un ka visi priekš darba nepieciešamie dati ir pieejami.
4.     Testēšana.
Kad projekts kopumā ir apzināts un sadalīts apakšsistēmās, nākamais solis ir komponenšu realizācija. Ja iepriekšējie etapi ir izpildīti korekti, katrs pienākums vai uzvedība būs īsi raksturoti. Svarīga analīzes un kodēšanas daļa šinī etapā ir pilnīga iepriekšējam nepieciešamo noteikumu raksturošana un dokumentēšana, kas nepieciešams uzdevuma veikšanai. Kā arī vēlams pārbaudīt vai programmas komponente darbojas pareizi, ja tā tiek izsaukta ar pareizām ieejošām vērtībām. Tas apstiprinās algoritmu korektumu, kuri tiek izmantoti komponentes realizācijā. Kad individuālas apakšsistēmas ir izstrādātas un notestētas tām jātiek integrētam kopējā produktā. Tas tiek darīts pa etapiem. Sākot ar elementāru pamatu pie sistēmas tiek pievienoti (un testēti) jauni elementi. Atsevišķu komponentu noskaņošanu bieži dēvē par bloku testēšanu. Testēšana turpinās līdz tam, kamēr kļūst skaidrs, ka sistēma strādā pareizi. Šo procesu sauc par sistēmas testēšanu kopumā.
 Pavadīšana un apkalpošana.
Iemesli kuri izsauc programmnodrošinājuma pavadīšanas neizbēgamību:
·     Nodotajā produktā ir iespējams atrast kļūdas. Tām jātiek izlabotām vai nu caur esošās versijas “labojumiem” (patches), vai jaunā versijā.
·     Prasību izmaiņas- iespējams jaunu valsts prasību vai standartu dēļ.
·     Pāreja uz citu aparatūras nodrošinājumu. Piemēram, sistēmas pārnešanas uz citu platformu vai jaunas ievades ierīces uzturēšana.(gaismas spalva vai sensoru ekrāns). Var tikt mainītas izvades tehnoloģijas : teiksim, jūs pārejiet no tekstuālā interfeisa uz grafisko.
·     Lietotāju prasību izmaiņas. Lietotāji var pieprasīt palielināt programmas iespējas, pazemināt cenu, vienkāršāku lietošanu u.t.t.
·     Dokumentācijas uzlabošanas nepieciešamība.
·      

1.3. Programma no Delphi viedokļa.

Programmai, kura uzrakstīta Pascal valodā priekš MS-DOS vides Pascal valodā būs sekojošs izskats:
program DOS_Pas_Minimal;
Begin
End.
Programmai priekš Windows vides piemitīs nedaudz sarežģītāks izskats, taču šeit viss ir atkarīgs no izmantojamajiem līdzekļiem. Piemēram, ja mēs izmantosim bibliotēku WinCrt, tad minimālā Windows programma šinī gadījumā izskatīsies šādi:
Program Win_Pas_Minimal;
uses WinCrt;
Begin
End.
Atzīmēsim, ka izmantojamie WinCrt dod mums logu. Izmantojot Object Windows klases bibliotēku, kas ir Borland Pascal 7.0 komplektā, minimālā programma izskatīsies šādi:
Program OWI_Minimal;
uses WObjects;
Var
          MyApp: TApplication;
Begin
          MyApp. Init(‘OWI_Minimal’);
          MyApp. Run;
          MyApp. Done;
End.
Bet izmantojot tikai funkcijas Widows API, minimālā programma aizņems apmēram 60 rindiņas un sastāvēs no nedaudzām procedūrām un funkcijām.
Izrādās izveidojot minimālo programmu Delphi vidē koda uzrakstīšana nav nepieciešama. Var atvērt jaunu projektu, uzrakstīt to un uz ekrāna iegūt  logu, kuram ir virsraksts, sistēmas izvēlnes pogas, maksimizāciju un minimizāciju, bet tā rāmis var mainīt izmērus.
Praktiski visas Windows programmas izmanto kā minimums vienu logu- tas var būt standart logs, diagonālais panelis vai ziņojumu panelis. Praktiski katra Windows programma sastāv no obligāto daļu virknes:
·        WinMain funkcijas ir ieejas punkts programmā. Pascal programmās tas ir tas, kas atrodas starp galvenās programmas atslēgas vārdiem Begin un end;
·        Atribūtu klases loga izveidošana un aprakstīšana;
·        Dotās klases eksemplāra loga izveidošana;
·        Ziņojumu apstrādes cikla;
·        Loga funkcijas, kas apstrādā ziņojumus.
Windows programmu izveidošanas process nav vienkāršs uzdevums. Šeit programmētājam palīgā nāk objekt- orientētā programmēšana un klašu bibliotēkas, kas satur sevī visus lietojumprogrammas izveidošanas noteikumus. Priekš Pascal programmēšanas valodas par šādu bibliotēku kļuva ObjectWindowsLibrary (OWL). Šajā bibliotēkā ir pieejams objektu kopums, kas nepieciešams jebkuras grūtības pakāpes Windows lietojumprogrammas izveidošanai. Bibliotēkā OWL , kas sevī ietver objektus, kuri atbilst visiem Windows interfeisa elementiem, tādiem kā logi, diagonālie paneļi, vadības elementi, kā arī TApplication objekts, kas arī ir pati lietojumprogramma. Jebkura lietojumprogramma, kas izveidota ar OWL palīdzību, pamatojas uz TApplication pēcnācēja objektu. Lai izveidotu vienkāršu lietojumprogrammu ar OWL palīdzību pietiekami ir izmantot tikai trīs šī objekta metodes:
·        Konstruktors Init – inicializācija. Konstruktors Init izpilda visu darbību kopumu, kas nepieciešams paša objekta inicializācijai, kā arī konkrēta eksemplāra lietojumprogrammas, tāpat lai izveidotu galvenā loga un pieslēgšanās funkcijas loga attēlu;
·        Run metode- izpildīšana. Šajā metodē ietilpst ziņojumu apstrādes cikls;
·         Destruktors Done- nobeigums. Destruktors izpilda veselu virkni darbību programmas darba beigšanā un  objekta neinicializācijā.
No programmētāja viedokļa, programma, kas strādā Delphi vidē sastāv no klāšu apraksta, kas atbilst lietojumprogrammas galvenajai formai un visām pārējām viņā lietojamajām formām, kā arī no koda, kas izpildās apstrādājot to vai citu   notikumu, no papildkoda, kas nosaka konkrētas programmas funkcionalitāti. Pie kam klašu apraksts, kas atbilst formai, tiek veidots automātiski, un papildinājumi tajā nepieciešmai tikai tādā gadījumā, ja jūs tur ienesiet kādas   papildmetodes.
Programmētājs raksta tikai to kodu , kas viņa lietojumprogrammā nosaka tiešu funkcionalitāti. Visu palīgkodu rada automātiski pati vide. Pat vairāk palīgkods vispār ir noslēpts no programmētāja. Apskatīsim projekta Ekonomika.dpr pamatprogarammu :
begin
  Application.Initialize;
  Application.CreateForm(TPamatIzvele, PamatIzvele);
  Application.CreateForm(TParProgrammu, ParProgrammu);
  Application.CreateForm(TParolesDlg, ParolesDlg);
  Application.CreateForm(TEkonomSistemas, EkonomSistemas);
  Application.CreateForm(TPieprUnPiedav, PieprUnPiedav);
  Application.CreateForm(TRazosPamati, RazosPamati);
  Application.CreateForm(TSkatisana, Skatisana);
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TTestesana, Testesana);
  Application.CreateForm(TJautIevad, JautIevad);
  Application.CreateForm(TRezultTesta, RezultTesta);
  Application.CreateForm(TIzdrukIzsauk, IzdrukIzsauk);
  Application.CreateForm(TRepTestaRez, RepTestaRez);
  Application.Run;
end.
Pirmajā rindā notiek TApplication  klases eksemplāra inicializācija, nākamajās- formu veidošana uz klases TForm bāzes, kas aprakstītas atbilstošos Unit failos, bet pēdējā rindā-formas attēlošana uz ekrāna un tieša programmas palaišana. Mums ir tikai divi funkcionālie bloki – inicializācija un izpilde. Beigu bloks ir apslēpts Delphi dienesta koda iekšienē un izpildās notikumu apstrādātājā, kas norisinās programmas darba beigšanas laikā. Skatoties uz programmas pamatkodu, var noprast, ka TForm klase spēlē palīglomu, bet pamatā ir Application klases eksemplārs.
Lietojumprogrammas izveidošanas procesu Delphi vidē var iedalīt sekojošos etapos:
·        Lietojumprogrammas uzbūves interfeisa daļa;
·        Notikumu apstrādātāja koda uzrakstīšana;
·        Paildkoda uzrakstīšana.
Klase TApplication ir TComponet klases mantiniece. Jūs neizmantojiet TApplication tieši kaut arī šī klase spēlē svarīgu lomu. Tieši šīs klases metodes(caur globālo Application objektu) izveido galveno un nākamās formas(CreateForm metode) un realizē ziņojumu apstrādes ciklu (Run metode).
TComponent klase kalpo par pamatu pārējām (vizuālajām un nevizuālajām) Delphi komponentēm. Šī klase nosaka bāzes uzvedību visām komponentēm- to pamat īpašības un metodes. Pie tām pieder :
·        Iespēja attēlot komponentes komponenšu paletē un to to vadība formas dizainerī.
·        Iespēja būt par citu komponenšu konteineru.
·        Komponenšu uzturēšanas saglabāšana un atjaunošana plūsmās.
·         Iespēja būt par rāmīti apkārt ActiveX komponentēm un citiem objektiem, kas realizē interfeisu.
Parasti TComponent klases eksemplāri netiek veidoti. TComponent klase ir nevizuālo komponenšu bāzes klase, kuras var izvietoties komponenšu paletē un tikt izmantotas formu dizainerī. Dotās klases īpašības un metodes kalpo par pamatu visām mantinieku klasēm un nosaka pamat uzvedību VCL bibliotēkas komponentēm.
Lai izveidotu vizuālās komponentes jāpielieto TControl kā bāzes klase, bet lai izveidotu komponentes kurām ir logi – TWinControl klase.
Lai izveidotu visas vizuālas komponentes par bāzes klasi kalpo TControl klase. Visām komponentēm ir īpašības, metodes un notikumi, kas nosaka to vizuālo aspektu, tādas kā komponentes atrašanās vieta, kursora tips, kas saistīts ar komponenšu logu, metodes komponentes atzīmēšanai un pārvietošanai un notikumi, kas rodas kā atbilde uz lietotāja darbībām. TWinControl klase ir kā bāzes klase, kas veido pamatu priekš visu komponenšu logu izveidošanas. Logu komponentēm piemīt sekojošās īpašības:
·        Programmas darbības laikā var iegūt fokusu. Cita tipa komponentes var atspoguļot datus, bet lietotājs var izmantot klaviatūru, lai sadarbotos ar komponentēm, tikai tādā gadījumā, ja tā ir loga komponente;
·        Var saturēt sevī citas komponentes. Komponentes, kas satur sevī citas komponentes ir to vecāki. Tikai logu komponentes var būt vecāku komponentes citām komponentēm.
·        Tai var būt norāde uz logu.
Parasti komponentes tieši uz TWinControl klase bāzes netiek veidotas. Parsti kā bāzēs klase tiek izmantota TCustomControl klase, kura ir abstrakta bāzes klase uz kuras pamata tiek veidotas komponentes, kas pieprasa īpašību canvas, priekš grafisko attēlu uzzīmēšanas. Komponentes, kas ir kā rāmis apkārt interfeisa Windows  standarta elementiem, “zina”, kā izpildīt uzzīmēšanu. Tāpēc TChechBox  vai TButton tipa komponentes ir TWinControl klases mantinieces. Veidojot oriģinālas komponentes, kuras neatbilst Windows standarta komponentēm, nepieciešams tās pārmantot no TCustomControl.
TButtonControl kase kalpo kā bāzes klase objektiem, kas ir pogas. Šai klasei piemīt īpašibas, kas piemīt parastajām pogām, pogām ar atkarīgo un neatkarīgo fiksāciju.
TCustomComboBox kalpo par objektu bāzes komponentēm, kas ir kombinētie saraksti – elementi, kas apvieno redaktēšanas rindas un sarakstu.
TCustomEdit kalpo par objektu abstrakto klasi, kas ir vienrindas un daudzrindu redaktori. Šī klase nodrošina:
·        Redaktēšanas bāzes funkcijas ieskaitot arī teksta izcelšanu tas ir reģistru izmaiņu un pārveidošanu.
·        Iespēju reaģēt uz komponentes satura izmaiņām.
·        Iespēju vadīt piekļaušanu pie teksta- padarīt to pieejamu tikai priekš lasīšanas.
·        Ievadītā teksta noslēpšana(paroles ievadīšana). 
TCustomListBox  kalpo kā abstraktā bāzes klase sarakstu veidošanai. Šī klase nodrošina:
·        Attēlu, šķirošanu, manipulēšanu un saraksta elementu meklēšanu.
·        Lietotāja komponenšu izveidošana priekš ikonu vai rastru grafisko attēlu.
·        Daudzkolonnu sarakstu izveidošana ar iespēju izvēlēties dažus elementus.
Darba apjoms neatļauj pārskaitīt veselu virkni klašu, kas kalpo par bāzes klasēm dažādu vizuālo komponenšu izveidei.
Viena no principiālajām priekšrocībām priekš lietotāja strādājot Windows vidē ir tas, ka vairākums lietojumprogrammu izskatās un uzvedās līdzīgā veidā. Firma Microsoft piedāvā specifikāciju priekš Windows programmu nodrošinājuma izstrādes. Uzsvars no lietotāja interfeisa niansēm ir pārnests uz to lai lietotājs pēc iespējas ātrāk varētu pielietot jūsu lietojumprogrammu. Delphi 3.0 piedāvā tam visus nepieciešamos instrumentus.
Lietotāja grafiskais interfeiss (Grafical User Interface - GUI) - tas ir ekrāna priekšstata tips, kurā lietotājs var izvēlēties komandas, palaist uzdevumus un apskatīties failu sarakstus, norādot uz vizuālajiem apzīmējumiem(programmas), vai uz saraksta izvēlnes punktiem, kas attēloti uz ekrāna. Darbības, kā likums, var tikt izpildītas vai nu ar peles palīdzību vai ar klaviatūras taustiņiem. Lietotāja grafiskie interfeisi eksistē tāpēc, ka palielina darba ražīgumu.
Izstājot lietojumprogrammu jāņem vērā principi uz kuriem balstās Windows 95 sistēma :
1.       Komandē lietotājs. Pār visu, kas notiek uz ekrāna jāpārvalda lietotājam. Viņam jābūt sajūtai, ka tieši viņš inicializē visas operācijas,  nevis piemērojas mašīnas kaprīzēm. Lietojumprogrammai jābūt pēc iespējas interaktīvākai. Tai ātri jāatsaucas uz komandām un nav lietotājs jāatstāj neizpratnē, par to kas dotajā brīdī notiek.
2.       Uzskatāmība. Programmām jābūt vizuāli saprotamām. Lietotājam jāredz kā viņa komandas ietekmē objektus uz ekrāna. Metaforu izmantošana var radīt pāreju  no reāliem dokumentu skapjiem uz dabiskākiem datoru ekvivalentiem. Metaforas uztur atpazīstamības koncepciju, bet ne atcerēšanās koncepciju. Lietotāji parasti labāk iegaumē saprotamas asociācijas nekā komandas.
3.       Vienveidība tā sniedz garantiju , ka jūsu lietojumprogramma būs līdzīga ar Windows operacionālo sistēmu Lietotājam būs vieglāk to apgūt, ja viņam ir pieredze darbā ar Windows. Garantiju, ka jūsu produkts uztur vienveidību savā iekšienē. Garantija, ka jūsu metaforas ir līdzīgas.
4.       Iecietība pret lietotāju. Lietotājam ir  jādod iespēja eksperimentēt ar lietojumprogrammu. Visām viņa izdarītajām darbībām jābūt izlabojamām un atgriezeniskām. Programmai jādod iespēja lietotājam atsaukt darbību, kura var izrādīties nelabojama. Lietotājs var izdarīt kļūdainas kustības ar peli. Cilvēkiem ir raksturīgi kļūdīties. Tas jāņem vērā un jāprasa apstiprinājums visām operācijām kuras var novest līdz graujošam rezultātam.
5.       Atpakaļejošā saite. Pats galvenais noteikums – likt lietotājam saprast, ka kaut kas notiek. Var izmantot kā vizuālo kombināciju tā arī skaņu signālu, lai lietotājs zinātu , ka par viņu nav aizmirsts. Svarīgi, lai atpakaļejošās saites signāls atrastos tuvu tai vietai, kur strādā lietotājs.
6.       Estētika. Lietojumprogrammai jābūt vizuāli patīkamam izskatam. Šeit ir daži momenti. Bez krāsu shēmas izmantošanas (lietojumprogrammai nevajadzētu disharmonizēt ar apkārtni) ļoti svarīga ir pati ekrāna kompozīcija. Objektu izvietojums(un to skaits) nosaka cik ērti būs strādāt ar lietojumprogrammu. Kad iespējams izmantojiet “septiņu likumu” : dodiet lietotājam tikai septiņus (plus- mīnus divus) izvēles variantus. Šis skaitlis (no 5 līdz 9) ir saistīts ar objektu daudzumu, kurus cilvēka smadzenes var uztvert vienlaicīgi.
7.       Vienkāršība. Lietojumprogrammai jābūt vienkārši uztveramai un lietojamai. Tāpēc nepieciešams uzturēt balansu starp interfeisa vienkāršību un visu nepieciešamo funkciju un lietojumprogrammas datu pieejamību. Labai pielietojumprogammai jāatrod šo principu optimālā attiecība. Pēc iespējas mazāk izmantojiet vārdus.
Vizuālie tēli ļoti spēcīgi ietekmē mūsu prātu un emocijas. Vizuālie paņēmieni, kurus izmanto pielietojumprogrammās uz lietotāju var iedarboties dažādi. Tāpēc svarīgi programmu izstrādāt tā lai tie radītu maksimāli stimulējošu rīcību pie minimālas novēršanās.
Eksistē 6 ekrāna organizēšanas principi, kurus Microsoft uzskata par svarīgiem:
1.       Lasāmība un secība. Šis princips liek jūsu projektēto ekrānu organizēt tādā veidā, lai interfeisa pamatidejas  tiktu nodota tieši un ar minimālākiem vizuālajiem traucējumiem. Lai minimizētu traucējumus un uzlabotu lasāmību un secību, izstrādājot logus vai dialogus, sev jāuzdod sekojoši jautājumi :
·          Vai pamatideja ir izklāstīta vissaprotamākajā veidā ?
·          Vai lietotājs soli pa solim iet pa šo dialogu kā tas tiek plānots pie programmas izstrādes ?
·          Vai visam kas ir nokļuvis šajā logā ir tur jābūt ?
2.       Strukturētība un sabalansētība. Bez labas struktūras nepietiks kārtības un izpratnes. Savstarpējās attiecības starp logiem piedāvāto informāciju lielā mērā nosaka tas, kā tiks uztverta jūsu lietojumprogramma. Sabalansētība – tas ir kā inform;acija tiek sadalīta starp lietojumprogrammas logiem. Ja uz viena ekrāna ir pārāk daudz, bet uz otra- pārāk maz, tad lietojumprogramma nav sabalansēta. Nepietiekama strukturētība un sabalansētība apgrūtina izprast interfeisu.
3.       Elementu attiecība. Svarīgi, lai lietojumprogrammā elementu attiecības tiktu attēlotas vizuāli. Ja poga atver logu, šim komponentēm jābūt vizuāli saistītām savā starpā, lai to attiecības vienai ar otru būtu skaidras lietotājam. Tāpēc vajag tās izlikt tiešā tuvumā vienu otrai vai apvienot vienā Bevel tipa vienotā komponentē.  
4.       Fokusētība un akcenti. Jēdziens fokusētība nozīmē piederību kādai konkrētai tēmai, kurai ir pakļauta ekrāna kompozīcija. Akcentēšana attiecas uz dotās tēmas atslēgas orgānu vadības izvēli un to skaidru izcelšanu starp pārējiem elementiem. Lietotājam jāsaprot priekš kam domāts dotais ekrāns un kas tajā ir svarīgākais. Labi fokusētas programmas piemērs ir WinZip.  Šī ir failu kompresijas un dekompresijas programma un tajā nav nekā lieka. Lietotāja interfeiss ir saspiests un taisnlīniju un programma dara tieši to ko no tās prasa.
5.       Informācijas hierarhija. Hierarhijas princips attiecas gan uz ekrāna projektēšanu, gan uz datu struktūras izstrādi. Jums jāizlemj kāda informācija ir svarīgāka un kurai jāatrodas uz pamat ekrāna, un kurai pēc svarīguma pakāpes jāatrodas otrajā vai trešajā vietā:
·        Kas lietotājam ir svarīgākais ?
·        Kāds uzdevums tiks risināts pirmkārt, kāds otrkārt u.t.t. ?
·        Kas viņam būtu jāredz uz pirmā ekrāna, otrā ekrāna u.t.t. ?
·        Kādas būs lietotāja prioritātes ? Vai jūsu ekrāna organizētība palīdzēs realizēt šīs prioritātes, vai traucēs tām?
6.       Vienotība un integritāte. Kā jūsu lietojumprogramma iekļausies kopējajā sistēmas darba telpas organizētībā un kā tā mijiedarbosies ar citām lietojumprogrammām?
Krāsa krāsa nedrīkst tikt izmantota kā informācijas galvenā nesēja. Var izmantot formu, faktūru un citas ekrāna laukumu izcelšanas metodes. Izmantojot ierobežotu krāsu kopumu paredz izmantot pareizus krāsu salikumus.
Atstatums starp komponentēm, šrifta izvēle, informācijas izvietojums uz ekrāna var gan glabāt gan iznīcināt jūsu lietojumprogrammu. Ekrāna projektēšanā izšķirošais moments ir šifta izvēle. Kāds šrifta tips var būt nederīgāks starp citiem. Visās Microsoft elementu sistēmās izmanto MS Sans Serf un 8 izmēra burtus. Vērā jāņem arī citi momenti. Kursīvs uz ekrāna tiek uztverts daudz reiz sliktāk kā parastais šrifts. Lietojumprogrammai pēc iespējas jāvar piemēroties dažādiem šriftiem. Tāpat jāņem vērā, ka uz ekrāna šrifts vienmēr izskatās sliktāk kā nodrukāts. It īpaši tas ir redzams monitoros ar zemu izšķirtspēju.
Projektējot ekrānu svarīgi nodrošināt pareizas atstarpes starp dažādiem elementiem. Ir jāatstāj laukums (tam ir jāvienādojās ar septiņām dialogu vienībām. Delphi 3.0 tiek izmantots atstarpju izlīdzināšanai ne priekš bāzes dialoga vienības, bet ekrāna izšķiršanas vienība- pikselis. To ir vieglāk saprast un izmantot. ) visās ekrāna malās. Starp savienotajiem elementiem sliktākajā gadījumā jāpaliek 4 dialoga vienību lielai atstarpei. Vienīgais izņēmums no šī noteikuma ir instrumentupaneļa pogu grupa. Starp sagrupētajām pogām nav jābūt atstarpei.
Vienmēr loģiski jāapvieno saistītie vadības orgāni. Viss vienkāršāk šādā gadījumā izmantot paneļa grupēšanas komponenti, dažkārt pietiek vienkārši atbilstoši sakārtot elementus, atstājot starp grupām papildu telpu. Grupētie paneļi ļauj lietotājam vērst uzmanību uz noteiktām elementu grupām.
Lai izvietotu datus uz ekrāna var izmantot dažādas  metodes. Pie mums ir pieņemts lasīts no kreisās uz labo un no augšas uz leju. Svarīgākos elementus parasti izvieto augšējā kreisajā stūrī. Kad dati (vai vadības orgāni) tiek izvietoti stabiņā , laukumā , kā likums tos izlīdzina pēc kreisās puses. Ja elementi ir saistīti ar iezīmi tad tiem jābūt izvietotiem uz augšu vai pa kreisi no elementa kā arī izlīdzinātiem pēc kreisās malas. Izņēmums ir radio pogas un kontrolindikatori. To iezīmes parasti atrodas labajā pusē.
Kad jūs izvietojiet uz formas komandas pogu un ievietojiet to grupas logā, tad uzskata, ka poga darbojas tikai uz objektiem šī loga iekšienē. Ja komandas poga ir izvietota ārpus grupas logiem, tad darbībai ir jāattiecas uz visu formu.
Daudzrindu dialogi ar ielikumiem ir ļoti noderīgi, tā kā ļauj realizēt kompaktu un parastu interfeisu. Kad jūs izveidojat tādu dialogu logu jums ir jāietur vienāds izmērs visiem ielikumiem, lai radītu vienveidīgu priekšstatu. Lapas ir jākombinē pēc funkcionālā principa, lai katra no tām saturētu informāciju par noteiktu tēmu.
Labākai uzskatāmībai uzrakstos uz pogām, iezīmēm, izvēlņu virsrakstos izmanto lielos burtus.
Modālais dialoga logs-atveramais logs, kas parāda vai pieprasa informāciju. Modālie logi var saturēt informāciju, kas papildina pamatloga informāciju. Bet modālais logs nevar būt lietojumprogrammas pamatlogs. Tam ir (vai nav) dažas īpatnības, kas raksturīgas parastam logam:
·        Tam nav minimizācijas un maksimizācijas pogu.
·        Tam nevar būt loga aizvēršanas pogas.
·        Loga virsraksts paskaidro tā funkciju.
·        Virsrakstā nav piktogrammas.
·        Tam nav statusa rindas.
·        Tam var būt poga “kas tas?”, lai iegūtu izziņu par dažādu komponenšu nozīmi.

2. Lietojumprogrammas izveidošana zināšanu kontrolei
Delphi 3.0 vidē


1.1. Integrētās vides Delphi apskats.

Jaunajām programēšanas sistēmām ir raksturīga ātra lietojumprogrammu izstrādāšanas iespējas – Rapid Application Development (RAD). Šajā jaunajā RAD pasaulē programmētāji izmanto instrumentus, kuri ir uzskatāmi un intuitīvi saprotami.
Visual Basic (VB) bija pirmā vide, kura padarīja programmēšanu pieejamu priekš parastiem mirstīgajiem. Jaunais sadarbības stils ar datoru ļauj programmas izstrādātājam uzskatāmi konstruēt lietotāja interfeisu ar peles palīdzību, nevis agrāko laiku stilā : ar koda uzrakstīšanu, to translāciju un programmas izpildīšanu, tikai pēc kā var ieraudzīt, kā tas viss izskatās uz ekrāna. Lai arī pēc Visual Basic ir liels pieprasījums un tas ir palīdzējis daudziem atklāt programēšanas pasauli, tomēr tam piemīt daudzas problēmas. Tajā trūkst objektu -orientētās programēšanas noteiktības, kā arī VB translē Basic komandas uz pārtraukumu valodu, ko sauc par r-kodu. Palaižot šādas programmas VB interpretē r-kodu par reālām mašīnas komandām.
Delphi – tas ir nākamais solis RAD vides attīstībā. Delphi pilnībā kompilē programmu uz mašīnas kodu un uzreiz pāriet uz mašīnas kodu. Šī priekšrocība ietekmē programmas izpildes ātrumu. Delphi bāzējas uz Object Pascal valodu. Pascal valodu saimes kompilatori bija vieni no ātrākajiem kompilatoriem. Borland pievienoja valodai objektu – orientētos pielikumus, un efektīvāku kodu, kam ir lielāks efekts ar mazāku operatoru skaitu. Object Pascal – tā ir objektu – orientēta valoda ar labu kompilatoru.
Delphi priekšrocības priekš viena lietotāja ir apstāklī, ka tas var nodot lietojumprogrammu gala lietotājam viena izpildāmā faila veidā (fails .exe). Tas, ka ir viens izpildāmais fails nozīmē arī to, ka  var uzrakstīt vienkāršu instalācijas programmu. Var realizēt šo iespēju, radot vienu izpildāmo failu, savā darba laikā nevēršoties pie citiem failiem vai DLL (dinamiski pievienojamajām bibliotēkām).
Izstrādājot daudzlietotāju programmu Delphi 3 ļauj ievietot standarta komponentes tā saucamajā paketē. Šī metode dod iespēju kompānijām paplašināt klientu tīklu, kurā  standarta pakete visu laiku uztur klientu datorus.
Integrētā izstrādes vide – Inegrated Development Environment (IDE) – ir vide kurā ir viss nepieciešamais lietojumprogrammu projektēšanai, palaišanai un testēšanai, un kur viss ir orientēts uz programmu radīšanas atvieglošanu. Delphi 3 IDE ir integrēts kodu redaktors, labotājs, rīku josla, attēlu redaktors un datu bāzu instrumenti – viss ar ko nākas strādāt. Šī integrācija dod izstrādātājam harmonisku instrumentu komplektu, kas palidina cits citu. Rezultāts ir ātra un zināmā mērā bez kļūdām sarežģītas programmas izstrāde.
Izstrādātāja vide Delphi 3.0 sastāv no elementu virknes, kas parasti ir uz ekrāna: galvenais logs (kas sevī ietver ātrās pieejas paneli un komponenšu paleti ), objektu inspektors, logs vizuālai lietojumprogrammu veidošanai un koda rakstīšanas logs, kā arī utilītas, kas ir piejamas noteiktos gadījumos – izvēlnes dizaineris un grafiskais redaktors. Delphi izvēlnes struktūra ļauj piekļūt pie daudziem instrumentiem, kas palīdz paaugstināt projektēšanas efektivitāti.
Izvēlne File tiek izmantota, lai atvētu, saglabātu, aizvērtu un izdrukātu eksistējošos un jaunus projektus un failus, kā arī lai pievienotu jaunas formas un moduļus aktīvajam projektam.
Galvenās izvēlnes punkts Edit ietver komandas, kas īsteno rediģēšanas operācijas, darbu ar datu apmaiņas apgabaliem un darbību atcelšanu.
Izvēlne Search piedāvā  komandas teksta meklēšanai un aizvietošanai, kā arī simbolu un rindu meklēšanai, kas satur kļūdas, ko ir uzrādījis kompilators.
Izvēlnē View ir komandas, lai parādītu dažāda veida informāciju un lai izsauktu projekta menedžeri, objektu inspektoru, objektu pārlūkprogrammu un citas informējošas utilītas.
Izvēlne Project satur komandas projekta kompilācijai, kā arī tekošā projekta opciju uzstādīšanai.
Galvenās izvēlnes punkts Run satur programmas noskaņošanas komandas. Šīs komandas ļauj vadīt dažādas iebūvētā noskaņotāja funkcijas. (Labošanas komandas ir pieejamas, kad projekta sastāvā ir iekļauta labošanas informācija.)
Izvēlne Component satur komandas, kas rada komponentes, pieliek jaunas komponentes, importē ActiveX komponentes, rada jaunu komponenti uz esošās bāzes un uzstādītu paketes.
Izvēlnes sadaļa Database satur komandas, kas ļauj radīt jaunas, modificēt un caurskatīt datus.
No izvēlnes sadaļas Tools ir pieejami vides noskaņošanas rīki, citas papildus utilītas, kas ir Delphi sastāvā, kā arī objektu repositārijs.
Izvēlnē Help ir komandas, kas izsauc dažādas izziņas sistēmas sadaļas un dialoga logu “Par programmu”.
Līdz ar tradicionālo izvēlni galvenais izstrādātāja logs satur arī  ātrās piejas pogu paneli un komponenšu paleti. (2. 1. Attēls.)

2.1. Attēls. Galvenais Delphi logs.
2.2. Attēls. Ātrās pieejas pogu panelis.
Sešas instrumentu paneļa pogas blokā pa kreisi (2.2. Attēls.) padara vienkāršāku pieeju pie pašam izplatītākajām darbībām ar failiem. Nākošais bloks, kas sastāv no četrām pogām, palīdz orientēties starp formām un moduļiem lielos projektos. Pēdējās četras standarta paneļa pogas vada lietotāju programmas palaišanu un noskaņošanu.
Katrs elements katrā komponenšu paletes sadaļā ir funkcionāla apakšprogramma, kuru var ielikt savā programmā ar vienkāršu peles taustiņa klikšķi. Komponenšu palete – tā ir redzamais komponenšu bibliotēkas apraksts Visual Component Library (VCL). Vizuālo komponenšu bibliotēka sastāv no liela skaita dažādu objektu, kas uzrakstīti programmēšanas valodā Delphi Object Pascal un ir izmantojami kā vadības elementi (vai komponentes ) Delphi formās.
Tā palīdz sagrupēt vizuālās komponentes atbilstoši to nozīmei un jēgai. Pēc noklusēšanas komponentes ir sagrupētas funkcionālās līnijās. Šīs komponentes izmanto Windows API  (Applicaton  Program Interface (API) – lietojumprogrammu interfeiss) un nodrošina nepieciešamos kodus, lai būvētu savas lietojumprogrammas priekš Windows. Komponentes var izdalīt divos pamat tipos : vizuālās un nevizuālās. Vizuālās komponentes tiek izmantotas, lai izveidotu lietotāja interfeisu. Projektēšanas etapā tiek izmantotas abu tipu komponentes, bet izpildot programmu nevizuālās komponentes nav redzamas. Neredzamās komponentes dod iespēju programmētājam īstenot dažādu procesu vadību vai piedāvā viņam dažādus programmu interfeisus. Dialoga logs – vizuālās komponentes piemērs, bet taimeris – nevizuālās komponentes piemērs.
Dažādi komponenšu veidi ietver pogas, saraksti, teksta objekti, rediģēšanas logi, komponentes darbam ar datu bāzēm, taimeri, attēli, izvēles saraksti u.t.t. Komponentēm ir īpašības, notikumi un metodes, viss tas, kas dod iespēju programmētājam izmantot to vai citu komponenti un vadīt tās darbību.
Daudzas īpašības ir kopīgas daudzām komponentēm, tomēr ne visas īpašības ir visām komponentēm. Dažās īpašības ir kopīgas tikai atsevišķām komponentēm vai to grupām.
Delphi pamata komponenšu paletei ir 12 lapas. (Tabula 2.1.)
Tabula 2.1.                                       Delphi komponenšu paletes apraksts
Standard
Lielākā daļa šo komponenšu ir analoģiskas Windows ekrāna elementiem: izvēlne, pogas u.c.
Additional
Papildus vizuālās komponentes, kas palīdz atainot informāciju ar hierarhisku struktūru, atskaņot skaņas, mūziku, video, atspoguļot grafisko informāciju.
Win32
Windows 32 bitu. Ar šīs lapas komponenšu palīdzību var izveidot kokveida struktūras pārskatu, sarakstu pārskatu, statusa paneli, papaplašinātais teksta redaktors u.t.t.  
Data Access
Data Control
Piekļūšana pie datiem. Delphi izmanto datu bāzu mehānismu (Borland Database Engine, BDE), lai organizētu piekļūšanu pie dažādu formātu datu failiem. Izmantojot šīs komponentes veidojot datu pārskates un rediģēšanas  programmas gandrīz nevajag rakstīt kodu.
Win 3.1
Windows 3.x. Šeit atrodas Delphi 1.0 komponentes.
Dialogs
Dialogi. Lapa piedāvā Delphi programmām pieeju pie standarta dialoga logiem.
System
Sistēmas panelis piedāvā iespēju kombinēt atsevišķus elementus, tādus kā disku, katalogu un failu saraksti. Tāpat šī lapa satur komponentes, kas apstrādā augsta līmeņa  datu apmaiņu starp programmām ar OLE rīkiem.
Qreport
Ātra atskaišu sagatavošana. Šī lapa piedāvā datu bāzu komponentes. Šeit ir īpašas uzrakstu, lauku, piezīmju un citu vadības elementu versijas.
ActiveX
ActiveX elementi. Šeit atrodas komponentes, kuras ir izstrādājuši neatkarīgie programmatūras ražotāji: tabula, diagramma, pareizrakstības rīks.
Samples
Šī lapa satur komponentes, kuras nav iebūvēts Delphi, bet demonstrē komponenšu sistēmas jaudu. Šīm komponentēm nav pievienots apraksts. 
Internet
Šī lapa piedāvā komponentes, lai iztrādātu lietojumprogrammas, kas ļauj izveidot HTML failus no datu bāzu failiem un citu formātu failiem, kas sadarbojas ar cietām Internet lietojumprogrammām. 

2. 3. Attēls. Komponenšu izvietošana uz ekrāna .


Gandrīz visu Delphi lietojumprogrammu pamatā ir forma, uz kuras izvieto citas komponentes. Delphi formai ir tādas pašas īpašības kā citiem logiem Windows vidē. Tai ir vadības izvēlne augšējā kreisajā stūrī, virsraksta josla formas augšējā daļām, maksimizācijas, minimizācijas un formas aizvēršanas pogas formas labajā augšējā stūrī.
Izvietot komponentes uz formas ir ļoti vienkārši. Vajag tikai ar peli noklikšķināt uz vajadzīgās komponentes uz paletes un tad noklikšķināt vajadzīgajā vietā uz formas. (2.3. Attēls)
Viena no svarīgākajām Delphi vides daļām ir rediģēšanas logs. Tas dod izstrādātājam  Delphi koda ievades mehānismu. Koda redaktors ir pilntiesīgs programmu redaktors. (2.4. Attēls ) Ar sintaktisko elementu izcelto krāsu (kas ļauj ātri atrast kļūdas), ar lakonisku komandu redaktoru un ar iespēju atcelt izpildāmās darbības.
2.4. Attēls. Kodu redaktora logs.
2.5. Attēls. Objektu inspektors.

Objektu inspektors (2.5. Attēls.) ir ļoti svarīgs lai strādātu ar Delphi. Tas dod vienkāršu un ērtu interfeisu, lai izmainīt Delphi objektu īpašības un notikumu vadību, uz kuriem reaģē objekts.
Objektu inspektora lapa sastāv no divām daļām :
1. Īpašību lapa (Propreties).  Piemēram, komponentei Button  var uzstādīt dažas īpašības, kā Height (augstums) – uzstāda ar skaitlisku vērtību. Citas kā piemēram, Cursor (kursors) ir aprīkotas ar atverošos sarakstu no kura var izvēlēties vajadzīgo vērtību. Tādas īpašības kā Visible (redzamība) paredz izvēles īpašības true-false. Dažām īpašībām kā sākuma vērtība tiem piedāvāts teksts (piemēram īpašībai Caption – uzraksts). Un visbeidzot ir īpašības, kas ir aprīkotas ar rediģēšanas logu, kurā var ievadīt vērtības. Ir vēl viens īpašību tips – pakārtotās īpašības. Pirms pakārtoto īpašību nosaukumiem liek “+”zīmi, piemēram, īpašībai +Font. Tāds formāts ir pārskatāms vienkāršs un efektīvs objekta atribūtu vērtību maiņai.
2. Notikumu lapa (Events). Delphi komponentes ir saistītas ar notikumu komplektu un var tos apstrādāt. Kods, kas atrodas šajos apstrādātājos izpildās tad, kad notiek atbilstošs notikums.(piemēram, peles dubultklikšķis). Lai izveidotu notikuma apstrādātāju vajag izdarīt dubulto klikšķi uz attiecīgo notikumu un var nokļūt notikumu apstrādātājā, kur var ievadīt kodu.          Bez notikumiem vēl eksistē daži metožu tipi, kas piedāvā vēl vienu ceļu kā vadīt komponentes. Tā kā komponentes ir objekti, tad to sastāvā ietilpst viņās aprakstītās procedūras un funkcijas. Metode ir objektā aprakstīta procedūra vai funkcija, kuru var izpildīt. Piemēram, ja vajag padarīt pogu neredzamu, tad var uzrakstīt komandu Button1.Hide un poga kļūs neredzama. Lai apskatītos konkrētas komponentes vai objekta pieejamās, vajag uzklikšķināt uz  komponentes un nospiest pogu F1. Tad palīga logā, kas parādīsies nospiest sadaļu methods  (metodes) un parādīsies pieejamo metožu saraksts. Tad vajag izvēlēties vajadzīgo metodi un iegūt par to aprakstu. Piemēram, komponentei Button ir pieejamas šādas metodes:

BeginDrag
BringToFront
CanFocus
ClientToScreen
Create
Destoroy
Dragging
EndDrag
Focused
Free
GetTextBuf
GetTextLen
Hide
Refresh
Repaint
ScaleBy
ScreenToClient
ScrollBy
SendToBack
SetBounds
SetFocus
SetTextBuf
Show
Update


Tāpat kā īpašību gadījumā nosaukumi ir pietiekami izteiksmīgi un dod priekšstatu par to, ko dara katra metode. Metodes, atšķirībā no īpašībām nav redzamas caur objektu inspektoru.
Dephi projekts sastāv no formām, moduļiem, projekta parametru uzstādījumiem, resursiem u.t.t. Visa šī informācija glabājas failos. Daudzus no šiem failiem automātiski rada Delphi. Kā arī kompilators arī rada failus.
Izveidojot jaunu projektu, pēc komandas File| New Project, Delphi vide rada projekta failu un vada to lietojumprogrammas veidošanas laikā. Projekta fails glabājas ar papaplašinājumu *.DPR (2.6. Attēls), un priekš katra projekta var būt tikai viens šāds fails. Tas tiek izmantots, lai glabātu informāciju par formām un moduļiem. Šeit arī atrodas inicializācijas operatori.
2.6. Attēls. Izpildāmā faila izveidošanas process.
Delphi (kā vairākums Windows lietojumprorammu) ir orientēts uz formu. Informācija priekš formām glabājas divos failos ar paplašinājumu .DMF un .PAS. Fails ar paplašinājumu .DMF satur informāciju par formas ārējo izskatu tās izmēriem, atrašanās vietu uz ekrāna u.t.t. Tas ir viens no failiem par kura uzturēšanu nevajag uztraukties. Kods priekš formas un tās vadības elementiem glabājas failā ar paplašinājumu *.PAS, kas noformēts kā  modulis. Formām ir īpašības. Pēc to uzstādījumiem var  kontrolēt formas izskatu un darbību. Izmantojot īpašības var izmainīt formas krāsu un izmēru, tas atrašanās vietu uz ekrāna, izvietot to ekrāna centrā vai tajā pozīcijā kādā tā ir projektēšanās brīdī, padarīt to redzamu vai neredzamu un daudz ko citu. Formai ir arī virkne notikumu apstrādātāju (koda fragmentu, kurus var pievienot un kuri izpildās ļīdz notiek kādas ar formu saistīts notikums). Var piesaistīt  apstrādāšanu priekš tādiem notikumiem kā  peles klikšķis vai formas izmēra izmainīšana.
Eksistē trīs tipu moduļi: failu moduļi, kas saistīti ar formu, programmas moduļu faili, kurus izmanto procedūru un funkciju glabāšanai, un programmas moduļu faili, kurus izmanto komponenšu veidošanai.
Moduļi – programmas kodu izejas faili, kam ir papaplašinājums *.PAS.
Moduļa sadaļas:
Tabula 2.2.                                                                              Moduļa sadaļas.
Moduļa virsraksts
Moduļa virsraksts identificē dotā faila kodu kā modulis ar vārdu, kas uzrakstīts aiz vārda Unit. Šis nosaukums būs arī šī faila vārds ar paplašinājumu *.PAS.
Interface – Interfeiss
Atslēgas vārds Interface atzīmē moduļa interfeisa sadaļas  sākumu; šī sadaļa tiek izmantota lai deklarētu mainīgos, tipus, procedūras u.t.t, kas pieejami citiem moduļiem un programmas daļām. Interfeisa sadaļa beidza ar realizācijas sadaļas sākumu (atslēgas vārds implementation).

Uses

Operators uses pazino kompilatoram, kādas funkcijas un procedūras vajag sakompilēt izpildāmajā failā. Delphi automātiski ievieto vairākas tādas Borland bibliotēkas. Personīgā moduļa vārdu vajag piesaistīt operatoram uses, ja ir nepieciešmas izmantot funkcijas, kas ir šajā modulī.
Type
Sadaļu type izmanto lai pieteiktu lietotāja izveidotos tipus. Šie tipi var tikt tālāk izmantoti Delphi, lai noteiktu mainīgos. Pēc šī operatora interfeisa sadaļā interface un klases aprakstā seko pieejas specifikācija. Lai kontrolētu piejas līmeni pie objektiem no citu programmu un objektu puses, izmanto sekojošus specifikatorus :
Private – aizvērtais
Deklarētie šajā sadaļa ir pieejami moduļa iekšienē, bet nav piejami un zināmi ārpus moduļa robežām.
Public –
atvērtais
Deklarētie šajā sadaļā ir redzami un pieejami ārpus moduļa robežām.
Published –
publicētais
Specifikators tiek izmantots komponenšu veidošanai. Īpašības published tiek atspoguļotas objektu inspektorā. Piedāvājot iespēju modificēt tās projektēšanas laikā.
Protected -
aizsargātais
Komponentes lauki, metodes un īpašības, kas deklarētas kā aizsargātas ir pieejamas deklarējamā tipa pēcnācējiem.

Var

Izmanto lai pieteiktu mainīgos un mainīgo objektus. Formas modulī var izmantojas interfeisa sadaļā, lai doto formu deklarētu kā objekta TForm eksemplāru. Realizācijas daļā, procedūrās un funkcijās var izmanto, lai deklarētu mainīgos.
Implementation
Šī sadaļa, kurā izvietojas visas funkcijas un procedūras, kas ir deklarētas interfeisa sadaļā. Jebkuras šajā sadaļā izvietotās deklarācijas ir aizvērtas. Var ievietot sadaļā implementation operatoru uses, lai iegūtu pieeju pie citiem moduļiem.   
{$R*.DMF}
Delphi formas modulī automātiski ievieto šo rindu. Tas ir ļoti svarīgi, jo piesaista formu pie faila *.DMF
Initialization
Nav obligāta sadaļa. Izmanto, lai izpildītu jebkuru kodu, kas var būt vajadzīgs izpildāmā moduļa inicializācijai un izpildāmā moduļa sagatavošanai. 
Finalization
Nav obligāta sadaļa. Tas palīdz veikt visu nepieciešamo attīrīšanu pirms moduļa darba beigšanas.
Projektu menedžeris, ko izsauc ar komandu View| Project Manager, nodrošina pieeju pie visiem failiem, kas ir projektā. Tas atļauj pārslēgsieties starp failiem un pēc vajadzības izsaukt redaktoru, lai veiktu izmaiņas.
Pie ielādēšanās Delphi automātiski rada jaunu projektu. Var šo projektu izmantot, lai izveidotu jaunu lietojumprogrammu  vai atvērtu jau eksistējošu projektu, vai izmantot kādu no esošajiem šabloniem kā pamatu jaunas programmas veidošanā. Lai izveidotu jaunu failu vai atvēru jaunu failu, vai aizvērtu to var izmantot komandas no izvēlnes File: Open, Save, Save As, Save Project As, Save All, Close un Close All.
Visu Delphi projektu kompilācijas rezultāts ir izpildāmais fails. Lai kompilētu izejas failus, kas ietilpst projektā izmanto komandu Project| Compile no galvenās izvēlnes vai taustiņu kombināciju Ctrl+F9. Tad tiek veiktas šādas darbības:
·     Kompilējas faili ar izejas tekstu visiem moduļiem, kuru saturs ir izmainījies pēc pēdējās kompilācijas. Rezultātā  priekš katra moduļa faila tiek radīts fails ar paplašinājumu *.DCU. Ja izejas teksts kaut kādu iemeslu dēļ nav pieejams kompilatoram, tad modulis nepārkompilējas;
·     Ja ir bijušas izdarītas izmaiņas moduļa interfeisa daļā, tad pārkompilējas ne tikai šis modulis, bet arī moduļi, kas izmanto viņu (caur direktīvu uses);
·     Moduļa pārkompilācija  notiek arī, ja ir mainīts objektu fails (fails ar paplašinājumu *.OBJ), ko izmanto šajā modulī;
·     Moduļa pārkompilācija notiek arī, ja ir mainīt iekļaujamais fails (fails ar paplašinājumu *.INC), ko izmanto tas vai cits modulis.
Pēc tā kad ir nokompilēti visi moduļi projektā, Delphi kompilē projekta failu un rada *.EXE - failu  ar tādu pašu nosaukumu kā projektam.
Pie projekta būvēšanas (atšķirībā no kompilācijas) kompilējas visi faili projektā, atkarībā no tā vai bija izdarītas izmaiņas pēc pēdējās kompilācijas vai nē. Priekš projekta būvēšanās izmanto komandu Project| Build All no galvenās izvēles integrētajā izstrādātāja vidē.
Programmas izpildīšanai izmanto komandu Run| Run no galvenās izvēlnes vai taustiņu F9. Izsaucot šo komandu notiek tās pašas darbības kas pēc komandas Project| Compile , bet pēc kompilācijas programma palaižas pilnībā.
Eksistē divi projekta parametru vadības veidi. Var uzstādīt parametrus ar dialoga paneļa Project Options  palīdzību, bet var izmantot kompilatora direktīvas, kas ir ievietotas programmas izejas tekstā.
Daudzu lapu dialoga logs (2. 7. Attēls.) Project Options dod iespēju uzstādīt daudzas projekta īpašības kuru nozīme ir parādīta tabulā 2.3. Uzstādītā informācija glabājas failā ar paplašinājumu *.DFO.
Projektu menedžeris, ko izsauc ar komandu View| Project Manager, nodrošina pieeju  pie visiem projekta failiem. Tas ļauj pārslēgties starp failiem un nepieciešamības gadījumā arī rediģēt vajadzīgo failu.
2. 7. Attēls. Dialoga panelis Project| Options| Application .
Tabula 2. 3                                       Lapu nozīme logam Project Options
Lapa
Uzdodamie parametri
Forms
Galvenā forma, pārējo formu veidošanas kārtība
Application
Pielikuma parametri – nosaukums, izziņas fails, ikona.
Compiler
Kompilatora parametri
Directories/Conditional
Darba katalogi un direktīvas $IFDEF vērtība
VersionInfo
Izmanto, lai saistītu ar projektu specifisku informāciju par versiju, kā, piemēram, autortiesības. 
Packages
Uzstāda Delphi pakešu atbalsta opcijas.
Linker
Kompilatora parametri.
2 .8. Attēls.  Projektu menedžeris.

2.2. Delphi komponentes, kas izmantotas,
lai izveidotu lietojumprogrammu “Ekonomika”

Uz lapas Standart (2.9. Attēls.) ir savāktas biežāk izmantojamās komponentes. Pēc Delphi nostartēšanas šī lapa ir parādās pēc noklusēšanas. Tajā ir savāktas 14 komponentes.

2..9. Attēls. Lapa Standart.
Tabulā 2.4. ir aprakstītas 9 no šīs lapas komponentēm, ko izmanto projektā “Ekonomika”.
Tabula 2. 4                                                           Lapas Standart komponentes.
Komponente
Apraksts
Komponenti Label (iezīme) izmanto, lai izvietotu uz formām un citiem konteineriem tekstu, ko nevar izmainīt lietotājs. Var izmantot kā uzrakstu citām komponentēm, kurām nav īpašības Caption. Vizuālā komponente.
Komponenti Edit (rediģēšanas logs) izmanto, lai lietotājs varētu ievadīt tekstu vienā rindā. Var izmantot, lai parādītu tekstu un rediģētu tekstu. Var parādīt arī nerediģējamu tekstu ar Edit tipa komponentes palīdzību. Tam nolūkam vajag piešķirt īpašībai ReadOnly vērtību True.
Komponenti Memo (daudzrindu teksta rediģēšanas logs ) izmanto, lai parādītu un rediģētu daudzrindu tekstu. Var saturēt vairākas rindas, kas tiek uzdotas vai nu ar īpašību Text, vai ar īpašību Lines. Īpašību Text izmanto, lai piekļūtu visam Memo saturam, bet īpašība Lines – priekš piekļūšanas pie teksta pa rindām. Vizuālā komponente.  
Komponenti Button (poga) izmanto, lai veidotu pogas, ar kurām lietotājs izvēlas komandas lietojumprogrammā. Pogas nospiešana izpilda parasti kādu funkciju. Parasti pogas izmanto kā vadības elementus dialoga logos. Par pogu pēc noklusēšanas skaitās poga, kura sūta OnClick notikumu pie Enter nospiešanas. Lai izveidotu pogu ar vērtību pēc noklusēšanas ir jāpiešķir īpašībai Default vērtība True. Par “Cancel” pogu tiek uzskatīta poga, kura sūta OnClick notikumu pēc Esc nospiešanas. Lai poga kļūtu par “Cancel” pogu, tai nepieciešams uzdot īpašību Cancel vērtību True. Vizuāla komponente.

Komponente ChechBox (izvēles rūtiņa) ļauj lietotājam izvēlēties vai izslēgt programmas opcijas. Ar rūtiņu grupas palīdzību ar neatkarīgu fiksāciju  var izvēlēties vairākas opcijas. Lai izvēlētos viena otru izslēdzošas opcijas, ir jālieto rūtiņas ar atkarīgu fiksāciju. Rūtiņas stāvoklis glabājas īpašībā Checked. Pie rūtiņas ieslēgšanas – izslēgšanas notiek notikums OnClick. Īpašība State ļauj uzstādīt rūtiņas stāvokli. Vizuālā komponente. 
Komponente ComboBox (rediģējamais saraksts) apvieno komponenšu ListBox un Edit funkcijas. Šis ir interfeisa elements, kas iekļauj sevī sarakstu, statisko tekstu vai rediģēšanas rindu. Vizuālā komponente. 
Komponente GroupBox (grupas logs) ir konteiners, kas apvieno saistītu vadības elementu grupu, tādus kā RadioButton, izvēles rūtiņu ChechBox u.t.t Grupas virsraksts ( atrodas taisnstūra kreisajā augšējā stūrī) tiek uzdots ar īpašību Caption. Pēc tam, kad komponentes ir izvietotas grupā, tā kļūst par to senča klasi (īpašība Parent). Vizuālā komponente.    
Komponente RadioGroup (radio pogu grupa) ir grupas loga GroupBox ar radio pogu  RadioButton komplektu kombinācija; kalpo speciāli lai radītu radiopogu grupu. Var izvietot komponentē vairākas radio pogas, bet nekādi citi vadības elementi nav paredzēti. Vizuālā komponente.   
Komponente Panel (panelis) ir vēl viens konteiners, lai grupētu vadības elementus un mazākus konteinerus. Paneli var izmantot, lai konstruētu statusa joslu, instrumentu paneļus, instrumentu paletes. Vizuālā komponente.
Pie kopējām komponenšu īpašībām, kuras izmanto šajā darbā, attiecas:
1. Īpašība Algin. Uzdod komponenšu izlīdzināšanas tipu formas ietvaros. Var būt noderīga vairākos gadījumos, kad ir nepieciešams , lai komponentes izvietotos noteiktās formas vietās neatkarīgi no tās izmēra. Var pieņemt vienu no sekojošajām vērtībām:
Tabula 2.5.                                                                    Īpašības Algin vērtība
Nozīme
Apraksts
alNone
Izlīdzināšana neizmantojas. Komponente izvietojas tajā vietā, kur tika novietota projektēšanas laikā.
alTop
Komponente pārvietojas uz augšējo formas daļu un tās platums kļūst vienāds ar formas platumu. Komponentes augstums no tā nemainas.
alBottom
Komponente pārvietojas uz apakšējo formas daļu un tās platums kļūst vienāds ar formas platumu. Komponentes augstums no tā nemainas.
alLeft
Komponente pārvietojas uz kreiso formas daļu un tās augstums kļūst vienāds ar formas augstumu. Komponentes platums no tā nemainas.
alRight
Komponente pārvietojas uz labo formas daļu un tās augstums kļūst vienāds ar formas augstumu. Komponentes platums no tā nemainas.
alClient
Komponente pilnībā aizņem visu formas darba apgabalu.

2. Īpašība Color. Uzdod formas fona krāsu vai komponentes krāsu, vai grafiskā objekta krāsu. Īpašības Color vērtība ir parādītas tabulā 2.6:
Tabula 2.6.           Īpašības Color vērtība
Vērtība
Krāsa
clBlack
Melna (Black)
clMaroon
Tumši sarkans (Maroon)
clGreen
Zaļš (Green)
clOlive
Olīvkrāsas (Olive)
clNavy
Tumši zils (Navy)
clPurple
Violets (Purple)
clTeal
Zilizaļš (Teal)
clGray
Pelēks (Gray)
clRed
Sarkans (Red)
clLime
Spilgti zaļš (Lime)
clBlue
Zils (Blue)
clFuchsia
Ceriņkrāsas (Fuchsia)
clAqua
Spilgti zils (Aqua)
clWhite
Balts (White)

3.      Īpašība Ctl3D. Ļauj uzdot komponentes izskatu. Ja šis īpašības vērtība ir False, tad komponentei ir divdimensiju izskats, citādi – trīsdimensiju (vērtība pēc noklusēšanas).
4.      Īpašība Enabled. Ja šis īpašibas vērtība ir True, komponente reaģē uz peles, klaviatūras un taimera ziņojumiem. Petējā gadījumā (vērtība False) šie ziņojumi ignorējas.
5.     Īpašība Font. Daudzas vizuālas komponentes izmanto šriftu pēc noklusēšanas. Pie komponentes izmantošanas īpašības Font vērtībai (klase TFont) ir piešķirtas sekojošas vērtības, kas parādītas tabulā 2. 7.                
Tabula 2. 7                                                           Īpašibas Font vērības
Īpašiba
Vērtība
Charset
BALTIC_CHARSET (latviešu valodas atbalsts)
Color
ClWindowText (Teksta tekošā krāsa loga iekšienē)
Height
-13 (sākuma vērtība šai īpašībai izskaitļojas sekojoši:
Height:= -MulDiv(10, GetDeviceCaps(DC, LOGPIXSELSY), 72))
Name
Times New Roman
Pitch
fpDefault
Size
10
+ Style
 
6.     Īpašība Height. Uzdod komponentes vai formas vertikālo izmēru. Kopā ar radniecīgām īpašībām Width, Left, Top šīs īpašības raksturo komponentes izmērus un novietojumu uz ekrāna.
7.     Īpašība Left. Uzdod komponentes kreisā stūra horizontālo koordināti attiecībā pret formu pikseļos.  Priekš formām šī īpašība tiek uzdota attiecībā pret ekrānu. Kopā ar radniecīgām īpašībām Width, Height, Top šīs īpašības raksturo komponentes izmērus un novietojumu uz ekrāna.
8.     Īpašība ParentColor. Šī īpašība palīdz uzdot kādā krāsā būs komponente. Ja šīs īpašības vērtība ir True, komponente izmantos radnieciskās komponentes krāsu (īpašības Color vērtību). Ja īpašības ParentColor vērtība ir False, komponente izmanto savu paša vērtību Color. Manipulējot ar šīm īpašībām var panākt, ka visām formas komponentēm ir vienāda krāsu gamma, kura mainīsies attiecīgi izmainot formas krāsu.
9.     Īpašība ParentFont. Šī īpašība ļauj norādīt kādā veidā komponente noteiks kādu šriftu viņai lietot. Ja šīs īpašības vērtība ir True, komponente izmantos radnieciskās komponentes šriftu, ja vērtība ir False, komponente izmanto savu paša vērtību Font.
10.Īpašība ParentCtl3D. Šī īpašība ļauj norādīt kādā veidā komponente noteiks vai tā būs trīsdimensiju vai nē.  Ja šīs īpašības vērība ir True, tad komponentes izskats tiks uzdots atkarībā no tās īpašnieka ParentCtl3D vērtības, ja vērtība ir False tad komponente izmantos savu ParentCtl3D vērtību. Izmantojot šo īpašību var pārliecināties, ka visām komponentēm būs vienāds izskats.
11.Īpašība TabOrder uzdot kārtību kādā komponentes iegūs fokusu nospiežot taustiņu Tab. Pēc noklusēšanas šī vērtība tiek piešķirta komponenšu izvietošanas kārtībā uz formas – pirmajai komponentei būs šis īpašības vērtība 0, otrai – 1u.t.t. Lai izmainītu kārtību nepieciešams izmainīt īpašības TabOrder vērtību konkrētai komponentei. Komponente, kurai īpašības TabOrder vērtība  ir 0, iegūst fokusu parādoties formai. Īpašību TabOrder var izmantot tikai kopā ar īpašību TabStop.
12.Īpašība TabStop. Šī īpašība ļauj noteikt vai komponente var iegūt fokusu vai nē. Komponente iegūt fokusu, ja īpašības TabStop vērtība ir True.
13.Īpašība Top. Uzdod komponentes kreisā stūra vertikālo koordināti attiecībā pret formu pikseļos.  Priekš formām šī īpašība tiek uzdota attiecībā pret ekrānu. Kopā ar radniecīgām īpašībām Width, Height, Left šīs īpašības raksturo komponentes izmērus un novietojumu uz ekrāna.
14. Īpašība Visible. Šī īpašība ļauj noteikt vai komponente ir redzama uz ekrāna. Šīs īpašības vērtības vada metodes Show un Hide.
Lappusē ar nosaukumu Additional (papildus) ir savākta grupa no 13 komponentēm. (2.10. Attēls) Veidojot lietojumprogrammu tika izmantotas divas no tām, kuru apraksta ir dots tabulā 2. 8.
 2.9. Attēls. Lapa Additional

Tabula 2.8                                                  Lapas Additional komponentes

Komponente

Apraksts
Komponenti Image izmanto, lai atainotu grafiku:
piktogrammas, bitu matricas un metafailus. Vizuālā komponente.
Komponente BitBtn izmanto, lai veidotu pogas uz kurām būs izvietota bitu garfika (piemēram, poga Ok ar ķeksīti). Vizuālā komponente.
Lapa Internet satur 15 komponentes, kas ļauj samazināt darbu, lai veidotu Internet lietojumprogrammas. Pie lietojumprogrammas izveides ir izmantota viena komponente no šis lapas. (2.11. Attēls)

2.11. Attēls. Lapuse Internet.
Tabula 2. 9                                                 Lapas Internet komponentes

Komponente

Apraksts
Komponente HTML tiek izmantota, lai parādītu HTML lapas HTML kodējumā, tādus kā pārlūkprogramma Web. Nevizuāla komponente.
Lapa Data Access  (piekļūšana pie datiem) satur 11 komponentes, lai sasaistītu un nodotu informāciju starp datu bāzēm. (2.12. Attēls) Izveidojot doto lietojumprogrammu tika izmantotas 4 komponentes, kas ir aprakstītas tabulā 2.10.
2.12. Attēls. Lapa Data Access
Tabula 2.10                                                Komponenšu lapas Data Access apraksts

Komponente

Apraksts
Komponente DataSource  tiek izmantota, lai savienotu komponentes Table un Query ar komponentēm, kas attēlo datus. Nevizuālā komponente.
Komponenti Table izmanto, lai nodibinātu lietojumprogrammas saiti ar datu bāzes failu. Nevizuālā komponente.
Komponenti Query izmanto, lai veidotu un izpildītu SQL pieprasījumus pie attālinātiem SQL serveriem vai lokālām datu bāzēm.  Nevizuālā komponente.
Komponenti Session izmanto, lai nodrošinātu lietojumprogrammas globālo vadību savienojumam ar datu bāzēm. Nevizuālā komponente.
Lapa Data Controls satur 15 komponentes, kas orientētas uz datiem. Lielākā daļa šo komponenšu ir orientētas uz datiem un ir analogas komponentēm no lapām Standart un Additional (2.13.Attēls). Lietojumprogrammas projektēšanā ir izmantotas 3 no šīm komponentēm, kas aprakstītas tabulā 2.11.

2.13. Attēls. Lapa Data Controls


Tabula 12                                Lapas Data controls komponenšu apraksts

Komponente

Apraksts
Komponenti DBGrid izmanto datu parādīšanai tabulas veidā, kurā datus attēlo pa rindām un kolonnām. Vizuālā komponente. 
Komponente DBText  ir uz datiem orientēts komponentes Label variants. Vizuālā komponente.
Komponente DBMemo ir uz datiem orientēts komponentes Memo variants. Vizuālā komponente.
Lapa Samples (paraugi) satur 6 VCL komponentes piemērus. (2.14. Attēls). Darbā ir izmantota viena šīs lapas komponente.
2.13. Attēls. Lapa Samples

Tabula 2.13                             Komponentes SpinEdit apraksts no lapas Samples

Komponente

Apraksts
Komponenti piemēru SpinEdit, lai izveidotu pogas- skaitītājus. Tas apvieno sevī trīs komponentes – divas pogas ar trīsstūriem uz tām uz augšu un leju, un komponenti ‘Ievades rinda’. Vizuālā komponente.
Lapa Win32, kas parādīts (2.15. Attēls.) , satur 16 komponentes, kas ļauj izstrādāt lietojumprogrammas Windows 95/NT stilā. Dotajā darbā ir izmantotas 2 šīs lapas komponentes. 

2. 15.Attēls. Lapa Win32

Tabula 2. 13                                               Lapas Win 32 komponenšu apraksts

Komponente
Apraksts
Komponente DateTimePicker nodrošisn datu ievadi līdzīgi kā ComboBox, bet ar atverošos kalendāru. Vizuālā komponente.
Komponenti Animate izmanto, lai darbinātu klipus AVI (secīgi bitu attēli), līdzīgi kādus izmanto  Windows 95, kas parāda failu pārvietošnos no faila uz failu kopēšanas vai pārvietošanas operācijās. Vizuālā komponente.
Lapa QReport (ātra atskaite), kas parādīta 2.16 attēlā, satur 17 komponentes, kuras izmanto atskaišu ģenerēšanā. Darbā ir izmantotas 6 komponentes.
2.16. Lapa QReport
Tabula 14                                                             Lapas QReport apraksts
Konponente

Komponente QBand  tiek izmantota konstruējot atskaites izvietojot uz tās drukājamās komponentes. Vizuālā komponente.
Komponente QDBText ir uz datiem orientēta komponente teksta attēlošanai atskaitē. Vizuālā komponente.
Komponente QRExpr ļauj konstruēt un attēlot datu lauku un sistēmas lielumu (kā, piemēram, datums un laiks) izteiksmes. Īpašība Expression ietver sevī dialoga logu Izteiksmju Veidotājs (Expression Buider), kas dod iespēju veidot izteiksmi vizuāli. Vizuālā komponente.
Komponenti QSysData izmanto, lai ievietotu sistēmas datus atskaitē. Vizuālā komponente. 
Komponenti QRLabel izmanto, lai ievietotu tekstu atskaitē. Vizuālā komponente.
Komponenti QRGroup izmanto, lai grupētu datus. Vizuālā komponente.

 

2. 3. Lietojumprogrammas “Ekonomika” zināšanu kontrolei
kursā “Ievads ekonomiskajā teorijā” proektēšanas etapi

1.     Analīze. Dotās lietojumprogrammas izstādes stadijas rezultāts ir noskaidrošana, kas ir jādara programmai. Ar šīs programmas palīdzību skolotājs var pārbaudīt skolēnu zināšanas priekšmetā “Ievads ekonomikas teorijā”. Zināšanu kontrolei ir jāīsteno testu veidā. Katrs tests satur 8 jautājumus ar četriem atbilžu variantiem, no kuriem tikai viens ir pareizs. Pirms testēšanas skolēnam ir jāatkārto tēma, pēc kuras notiks testēšana un testēšanas beigās viņam ir jāredz rezultāts, pēc kura var noteikt kādu atzīmi viņš saņems. Pareizo atbilžu skaits parāda atzīmi, kādu viņš saņems. Maksimālā atzīme ir 8 balles, jo testi iekļauj sevī tikai to  materiālu, ko apgūst klasē, nedīgst būt jautājumi, kas nav dotajā tēmā.  Testēšanas rezultāti ir jāsaglabā, lai pasniedzējs arī varētu tos pārbaudīt un izlikt atzīmes.
2.     Prasības. Šajā etapā būs uzskaitītas darbības, kuras veic programma:
1)    Programmai ir jānodrošina ierobežota pieeja pie jautājumu, atbilžu un testa rezultātu datiem, priekš skolēniem un pasniedzēja.
2)    Programmai jādod pieeja darbam tikai pēc testējamā reģistrācijas un datiem ir jāglabājas tā, lai pie atkārtotas testēšanas nevajadzētu tos atkal ievadīt.
3)    Pie nejaušas programmas palaišanas skolēnam ir jābūt iespējai iziet no tās.
4)    Programmai ir jāparedz tikai viens pareizas atbildes variants.
5)    Testēšanas programmā atbildes nav jānumurē.
6)    Katrā nākamajā testēšanā programmai ir jāparedz jautājumu samaisīšanu gadījuma kārtībā.
7)    Testējamajam ir jābūt iespējai izvēlēties tēmu  no atbilstošā tematiskā bloka un izlasīt to pirms testēšanas, lai atkārtotu un nostiprinātu zināšanas.
8)    Tēmas tekstiem ir jābūt nelieliem, lai neapgrūtinātu nolasīšanu no ekrāna, saturētu tikai pamatmateriālu ar pamat tēmas izcelšanu.
9)    Testēšanā testējamajam ir jāredz tēmas nosaukums, jautājuma numurs un atbildes varianti un ir jābūt iespējai izvēlēties tikai vienu atbildi.
10) Testēšanas procesā audzēkņim ir jābūt iespējai atteikties no testēšanas.
11) Testēšanas procesā audzēkņim ir jābūt iespējai atgriezties pie iepriekšējā jautājuma un, ja tas ir nepieciešams, izmainīt varianta atbildes izvēli.
12) Pēc testēšanas beigām testējamajam ir  jābūt izvēlei: vai nu uzzināt tests rezultātus uzreiz, vai tomēr vēlreiz pārskatīt izvēlētās atbildes.
13) Testēšanas datu rezultātos skolēnam ir jāredz tēmas nosaukums, pēc kuras viņu testē, savs vārds un uzvārds, testēšanas datums, kopējais jautājumu skaits, kopējais pareizo atbilžu skaits, kopējais nepareizo atbilžu skaits, jautājumu skaits, kas ir palikuši bez atbildes, pareizo atbilžu procents no kopējā jautājumu skaita. 
14) Audzēkņim nav jāredz citu skolēnu testu rezultātus, lai tas viņu nenovirzītu no testēšanas pamatuzdevuma, bet viņam ir jāredz savi rezultāti, netikai uzreiz pēc testēšanas. Tad viņam ir jāredz tēmas nosaukums, testēšanas datums un rezultāti.
15) Testējamajam nav jābūt tiesībām noģenerēt atskaiti par testēšanas rezultātiem un nodrukāt to.
16) Skolotājam ir jābūt iespējai modificēt jautājumus un atbildes, tās papildināt, pārskatīt testēšanas rezultātus pa visām grupām, skolēniem un tēmām, ģenerēt un drukāt atskaites par testēšanas rezultātiem pa konkrētiem datumiem  vai bez to norādīšanas, izvēloties grupu, skolēnu, tēmu.
17) Programmā ir jābūt iespējai modificēt mācību tēmu tekstus, neiejaucoties programmas pamat kodā.
18) Programmā ir jābūt paredzētiem izņēmuma gadījumiem, lai tie nenobojātu normālu programmas darbu, bet kādas kļūdas gadījumā nodrošinātu normālu programmas aizvēršanu.
3.     Projektēšana.
1)    Lietotāja grafiskā interfeisa projektēšana. Lietojumprogrammas interfeisa daļas izveidošana sākas ar galvenās formas īpašību uzstādīšanu: izmērs, novietojums uz ekrāna u.c. Tad ir jāizvieto interfeisa elementi, izvēloties attiecīgas komponentes no komponenšu paletes: pogas, sarakstus, uzrakstus u.t.t. Programmas “Ekonomika” interfeisa projektēšanā ir izmantoti principi uz kuriem ir balstīta  Windows 95 sistēma. Lai lietojumprogramma būtu darbaspējīga tai ir jāsadarbojas ar lietotāju. Tas notiek ar vadības orgānu palīdzību. Tie dod lietotājam  darbību inicializācijas iespēju vai citu objektu īpašību uzdošanu. Eksistē daudz vadības orgānu stilu un veidu.
Manipulēšana ar vadības orgāniem notiek ar peles palīdzību un tās labo taustiņu. Lielākajai vadības orgānu daļai ir karstā zona- ekrāna apgabals, kas reaģē uz peles labā taustiņa nospiešanu, kas inicializē kādas darbības, ja peles kursors ir novietots šajā zonā. Dažiem objektiem šīs zonas ir acīm redzamas, kā piemēram,  parastai pogai. Citiem vadības orgāniem var būt karstās zonas, kas ir lielākas vai mazākas par pašu objektu. Piemēram, izvēles rūtiņai (CheckBox), ir karstā zona, kas ietver sevī ne tikai rūtiņu, bet arī tās apzīmējumu. Apzīmējumi ir svarīgi interfeisa elementi, jo tie ļauj ātri  saprast vadības orgānu nozīmi.
Lietojumprogrammā “Ekonomika” pogām ir konkrēti nosaukumi : “Izeja” vai “Aizvērt” – formas aizvēršanai, “Atcelt” – lai atteiktos no kādas darbības izpildīšanas. “Par programmu” – lai izsauktu formu ar informāciju par programmu, “Iepr. jautājums” – lai atgrieztos pie iepriekšējā jautājuma, “Nāk. jautājums” – lai pārietu pie nākošā jautājuma, “Izdrukāt”- izdrukāt uz printera, “Ok”- lai apstiprinātu datu pareizību pie lietotāja reģistrācijas datu ievades, “Ierakstīt” – lai ierakstītu ierakstu datu bāzes tabulā.
Pogām, kas izsauc mācību tēmas, nav nosaukuma blakus tām ir izvietotas komponentes  Label ar tēmu nosaukumiem, piemēram: “Ekonomiskās domas vēsture” .
ModalResult īpašības pogām, kas izsauc formas tematisko bloku, ir piešķirta vērtība mrOk. Nospiežot šīs pogas  parādās pakārtotās formas.
Komponentes Label notikumā OnClick ir ielikta vērtība Button.OnClick. Tas nozīmē, ka notiks viens un tas pats notikums nospiežot peles kreiso taustiņu uz komponenti Label un uz tai atbilstošu pogu. Priekš lietotājiem tas ir ērti nevajag obligāti spiest uz pogu, kā arī, no estētiskā viedokļa mācību tēmu izsaukšanas pogas ir konstruētas salīdzinoši mazas.
Bez pogām, kā vadības orgāni lietojumprogrammā tiek izmantotas radio pogas un kontroles indikatori. Radio pogas var tikt izmantotas divos veidos. Pirmais – ir vienas vērtības režīms un radio pogu pielietošana jaukto vērtību režīmā. Izveidotajā lietojumprogrammā komponente RadioGroup ir ievietota panelī, jo komponente Panel  garantē, ka jebkurā brīdī būs iezīmēta tikai viena poga. Tas ir nepieciešamas, lai izvēlētos vienu vērtību no četrām testa atbildēm.
Kontroles indikatori ir opciju izvēles indikators programmā. Indikators var atrasties vairākos stāvokļos. Iezīmēts vai neiezīmēts, tiek noteikts ar īpašību State, kas var pieņemt vērtības cbCheched (iezīmēts), cbUnchecked (neiezīmēts) vai cbGrayed (iezīmēts iekrāsots). Komponente  ChechBox programmā Ekonomika izmantojas lai aizpildītu datu bāzes tabulu priekš pareizas atbildes atzīmēšanas.
Lai izvēlētos grupu, tēmu, uzvārdu ir izmantota komponente ComboBox. Grupu numuri glabājas failā Grupa.txt. Tēmas un lietotāju uzvārdi glabājas atbilstošās datu bāzes tabulās.
Lai ievadītu vārdu, uzvārdu, reģistrācijas paroli, tēmas nosaukumu un atbildes tiek izmantota komponente Edit. Teksta logs uztur teksta ievietošanas, izmainīšanas un dzēšanas tehnoloģiju.
Atkarībā no tā vai formai ir jāmaksimizējas vai jāminimizējas, tās īpašībām BorderIcons, biMinimize un biMaxsimize ir iestādīts false, lai skolēniem būtu mazāk iespēju izdarīt nevajadzīgas darbības.
Katrai formai ir virsraksts, pēc kura ir viegli noteikt tās nozīmi, piemēram, “Testēšana”, “Rezultāti” u.c. Pie krāsu shēmas izvēles tika nolemts nenomainīt sistēmas krāsas ar savām. Formās nav atverošās izvēlnes, jo programmas “Ekonomika” funkcijas darbojas bez tās.
2)      Ekrāna projektēšana. Projektējot ekrānu bija pārdomāta informācijas strukturētība un sabalansētība, kas izvietota logos, elementu mijiedarbība, informācijas hierarhija.
Ekrāna projektēšanā tiek ņemts vērā, kāda informācijai jāparādās uz pirmā ekrāna, otrā u.t.t kādā kārtībā.
Palaižot programmu pirmajam ir jāparādās logam ar paroli, kurā ir informācijas par lietotāju ievades lauki, datu ievades vai atteikšanās no programmas darba pogas. Priekš šā loga var izmantot šablonu no  saraksta Dialogs – Passvord Dialogs. Priekš administratora šajā dialoga logā pēc vārda ievades parādās paroles ievades lauks (pielikums Nr.1). Nospiežot pogu “Ok” parādās galvenais logs, bet nospiežot pogu “Cancel” programmas darbs tiek pārtraukts. Galvenā lietojumprogrammas forma – pirmā forma, kura veidojas programmas iekšienē. Aizverot galveno formu programmas darbs tiek pārtraukts.
Galvenajā ekrānā tematisko bloku izsaukšanas bloku pogas ir apvienotas divās vizuālajās Panel komponentēs, kas uzlabo estētisko informācijas uztveršanu un parāda elementu mijiedarbību. Priekš administratora galvenais logs atšķiras ar vēl vienu pogu, kas ļauj labot datu bāzi. (pielikums Nr.2). Nospiežot   pogu “Par programmu” izsaucas logs ar informāciju par programmu (pielikums Nr.3).  Šis logs nav saistīts ar  pašas programmas tiešu izpildi. Nospiežot pogas ar tēmas nosaukumiem, parādīsies logi “Ekonomiskās sistēmas”, “Pieprasījuma un piedāvājuma pamati” un “Ražošanas pamati” (pielikums Nr. 4)
Logi “Ekonomiskās sistēmas”, “Pieprasījuma un piedāvājuma pamati” un “Ražošanas pamati” satur pogas ar apzīmējumiem, lai izsauktu tēmas pārskatu pirms testēšanas (Pielikums Nr.5). Nospiežot pogu “Izeja” parādīsies informējošs dialoga logs, kas piedāvā testēties vai atteikties no tā.
2. 17. Attēls. Informējošais dialoga logs.
Nospiežot pogu “Yes” atveras testēšanas logs (pielikums Nr.6), nospiežot “No” atgriezīsies pie iepriekšējā loga, no kura tika izsaukta tēma.
Testēšanas ekrāns satur informāciju par tēmu, jautājuma numuru, jautājuma tekstu, kam ir jābūt pieejamam tikai lasīšanai, bet ne labošanai un atbilžu izvēli. Nospiežot radio pogu vai atbildes varianta tekstu, pogai ir jāiezīmējas. Nospiežot pogu “Atcelt” notiks atgriešanās pie loga no kuras izsaucās tēma, nospiežot pogu “Nāk. jautājums” parādīsies nākamais logs ar nākamajiem jautājumiem, nospiežot pogu “Iepr. jautājums” notiks atgriešanās pie iepriekšējā jautājuma, pie kam atbildēm ir jābūt citādā kārtībā, bet atzīmētai ir jābūt izvēlētajai atbildei. Pēc atbildes uz pēdējo jautājumu atzīmēšanas, parādīsies informācijas dialoga logs, kas piedāvās vai nu atgriezties pie atbilžu pārskatīšanas vai nu atteikties no tā:
2. 18. Attēls. Informācijas logs.
Nospiežot pogu “Yes” notiks atgriešanās testa logā, nospiežot “No” jāparādās logam ar testa rezultātiem. (pielikums Nr.7) . Nospiežot pogu “Izeja” ir jāatgriežas atpakaļ logā no kura tika izsaukta tēma. Nospiežot pogu “Rezultāti” no logiem “Ekonomiskās sistēmas”, “Pieprasījuma un piedāvājuma pamati” un “Ražošanas pamati” parādīsies logs ar testa rezultātu izvēli (pielikums Nr.8), pie kam lietotājas nevarēs izvēlēties citu skolēnu testa rezultātus, bet administrators varēs izvēlēties grupas, skolēnu uzvārdus un tēmas. Nospiežot pogu “Izeja” aizveras dialoga logs un parādās logs no kura tika izsaukts dialoga logs.
Ja lietotājs ir iegājis kā administrators, tad viņam logos “Ekonomiskās sistēmas”, “Pieprasījuma un piedāvājuma pamati” un “Ražošanas pamati” būs pieejama poga “Izdruka”, kuru nospiežot parādīsies logs “Izdrukāt”. Nospiežot pogu “Izdrukāt”  var noģenerēt atskaiti, ja pirms tam izvēlas grupu, skolnieku, tēmu , datumu. Atskaites logam ir pārskata režīma pogas, saglabāšanas poga, faila atvēršanas poga un loga aizvēršanas poga. (Pielikums Nr.9). Lai izveidotu šo failu var izmantot šablonu.
4.     Kodēšana. Katram programmas interfeisa elementam ir jāveic kāda funkcija, kā bija aprakstīts augstāk. Lai aprakstītu darbības, kurām ir jāizpildās tajā vai citā gadījumā, Delphi  izmantojas notikumu apstrādātājs. Katrai komponentei ir  notikumu saraksts, kuras tas var apstrādāt.   Programmētāja uzdevums- izveidot kodu, kas tiks izpildīts pie tā vai cita notikuma notikšanas. Bez tam programmā nācās ierakstīt pietiekami daudz papildkodu, zem kuriem tiek saprastas procedūras un funkcijas, kas nosaka dotās lietojumprogrammas unikālo funkcionalitāti. Parasti tādas procedūras un funkcijas tiek izsauktas no notikumu apstrādātāja metodēm. Delphi nodrošina brīvu pieeju pie Windows darbības notikumu modeļa, maksimāli vienkāršojot tā vai cita notikuma apstrādes procesu. Vizuālās komponentes sevī ietver vispārīgāku kopējo (no Windows čaulas viedokļa) paziņojumu apstrādātāji. Ja nepieciešamas izveidot citu paziņojumu apstrādātājus, var izmantot objektu orientēto tehnoloģiju šinī gadījumā tiek izveidots tās komponentes objekts – mantinieks, kuram ir jāapstrādā jūs interesējošie notikumi un šī notikuma speciālais metodes apstrādātājs. Bet vairākumā gadījumu var iztikt ar tiem apstrādātājiem, kurus piedāvā standarta komponentes, kas ieslēgtas Delphi sastāvā.
Viens no programmas izstrādes principiem ir modulētība un lokalizācija modulis – tā ir ar viena otru saistītu funkciju grupa. Moduļi ļauj īstenot daudzkārtējo programmu nodrošinājuma pielietošanu un komponenšu koncepciju. Moduļi izstrādātājam dod iespēju izveidot virkni  bibliotēku standartprocedūru un funkciju. Intreface sadaļā tiek deklarēti tie mainīgie, konstantes u.c., kurus jūs gribiet padarīt pieejamus dotajam moduļiem un citiem moduļiem. Viss, kas ietverts šajā nodaļā ir pieejams jeb kurai programmai, kas savā operatorā uses ietver dotā moduļa nosaukumu.   Iespēja sadalīt programmu daļās ļauj pārdomāti grupēt funkcijas un procedūras moduļos, kas uzlabo projekta organizētību. Delphi pats izveido moduļus un kodus pēc formu izmaiņu izdarīšanas.
Modulētība un lokalizācija dabiski iekļaujas klašu struktūrās, klases ir principiāli modulētas, bet lokalizācija nozīmē loģisku moduļu organizētības uzturēšanu: katram modulim ir jāsatur loģisks savstarpēji saistīts kods. Datu abstrahēšana tiek ļoti labi uzturēta par Delphi klasēm. Atslēgas vārdi private un protected dod divus līmeņus informācijas atdalīšanai no dotās klases objektiem. Abstrahēšana tiek uzturēta ar informācijas nodalīšanu un klases failu struktūru interfeisa realizācijas veidā. Visi realizācijas detaļas tiek atdalītas. Moduļa metodes priekšrocības nosaka tas, ka moduli no vienas lietojumprogrammas var ielikt citā, un tas strādās tajā vietā. Lai moduļus izmantotu atkārtoti tiem jābūt stiprai savstarpējai saistībai un vājai sķēdetībai ar citiem moduļiem. Saistība nozīmē, ka moduļa iekšējām funkcijām jābūt cieši integrētām moduļa iekšienē. Moduļiem jābūt vāji saķēdētiem ar saviem kaimiņiem (tas ir ļoti maz vai nemaz nebūt atkarīgiem no tiem ). Ja modulis ir stipri atkarīgs no citiem moduļiem, tad to nevar pārnest uz citu lietojumprogrammu, nepārnest uz turieni arī lielu daudzumu  blakusesošo moduļu.
Lietojumprogramma “Ekonomika” sastāv no 13 moduļiem, kas saistīti ar formām. Funkcionālā saistība starp moduļiem parādīta Pielikumā Nr.11.
Operatorā uses  modulī unit 1 ir iekļauti Delphi standarta moduļu nosaukumi, kas nodrošina kopējās nozīmes funkciju izpildi, tādu kā lasīšana – rakstīšana, formu veidošana, grafiku, pogas u.t.t, kā arī dotā Unit2, Unit3, Unit4, Unit5, Unit8, Paroles unit projekta moduļi.
Modulis ietver sevī 4 procedūras, kuras izsauc sekojošas formas: ParProgrammu, kurā izvietota standarta informācija par programmu  un tās autoru; EkonomSistēmas , kura dod iespēju strādāt ar tematisko “Ekonomiskās sistēmas” bloku; PieprUnPiedav, kura nodrošina darbu ar tematisko  “Pieprasījuma un piedāvājuma pamati” bloku; RazosPamati , kura dod iespēju strādāt ar “Ražošanas pamati” bloka tēmām un JautIevad formu, ar kuras palīdzību var aizpildīt jautājumu un atbilžu testu tabulas. Kā arī dotais modulis ietver sevī formas aizvēršanas procedūru nospiežot pogu “Izeja”. Lai izsauktu formu nospiežot atbilstošu pogu tās notikuma OnClick  apstrādātājā pievienota procedūra:
procedure TPamatIzvele.Button2Click(Sender: TObject);
begin
     PamatIzvele.WindowState:= WsMinimized;
     PieprUnPiedav.showmodal;
     PamatIzvele.WindowState:= WsNormal;
end;
Lai atvērtu pakārtoto formu galvenās formas logs minimizētos tiek izmantota WindowState metode:
PamatIzvele.WindowState:= WsMinimized;
Bet aizverot pakārtoto formu galvenās formas logs pieņem normālus izmērus ar tās pašas WindowState metodes palīdzību, bet kurai ir cita nozīme:
PamatIzvele.WindowState:= WsNormal;
Delphi 3.0 ir ievesta virkne valodas paplašinājumu, lai uzturētu kļūdu apstrādātāju un ārkārtējas situācijas. Ārkārtējas situācijas – tas ir kopīgs nosaukums, kas raksturo kļūdaino stāvokli programmas darbības laikā. 
Ārkārtējo situāciju apstrādātāju koncepcija, kā arī to sintētiskā realizācija ienāca Delphi3.0 no valodas C++. Apstrādātāju ievešana ieviesa četrus jaunus atslēgvārdus:
Except        Norāda uz ārkārtējo situāciju apstrādātāju.
Finalliy       Norāda uz kodu, kas izpildās pēc ārkārtējam situācijām.
Raise           Norāda uz ārkārtējas situācijas klātbūtni.
Try             Norāda uz ieejas apstrādātāja blokā nepieciešamību. 
Lai apstrādātu nepareizas paroles ievadīšanas gadījumu tika izveidota jauna TNepreizaParole klase uz ārkārtējo situāciju Exception  apstrādātāju klases bāzes:
TNepareizaParole=class(Exception)
    constructor Create;
    destructor Destroy; override;
Konstruktors Create dod atmiņu priekš paziņojuma rindas glabāšanas, kas atspoguļojas ārkārtējo situāciju rašanās gadījumā. Derstruktors Destroy atbrīvo atmiņu, ko izdalījis konstruktors   priekš paziņojuma rindas glabāšanas. Atslēgas vārds OwerRide nozīmē mantojuma metožu pārdefinēšanu. Pārdefinētās metodes argumentiem ir pēc tipa un skaita jāsakrīt ar  vecāku klases metodes argumentiem.
constructor TNepareizaParole.Create;
begin
  inherited Create ('Parole nav pareiza!');
end;
destructor TNepareizaParole.Destroy;
begin
 inherited Destroy;
 Application.Terminate;
end;
Notikumu apstrādātājā Formshow pie formas PamatIzvele  pievienota procedūra, kas palaižot programmu pirmo parāda lietotāja reģistrācijas formu – ParolesDlg, bet ne pašu galveno formu. Ja lietotājs reģistrējas kā administrators (skolotājs), tad būs pieejams paroles ievades lauks, kas dod pilnas tiesības uz datu bāzi, ja parole būs ievadīta nepareizi, tad programma apstrādā doto situāciju.
procedure TPamatIzvele.FormShow(Sender: TObject);
begin
parolesdlg.ShowModal;
try
dm.sakars.AddPassword(parolesdlg.Parole.Text);
dm.jaut.Active:=true;
dm.Atb.Active:=true;
dm.rez.Active:=true;
button6.Visible:=parolesdlg.Parole.Visible;
except
 raise TNepareizaParole.Create;
end;
end;
Try…except bloka iekšienē tiek izpildīta ārkārtējās situācijas apstrāde. Try – daļas bloka iekšienē darbības izpildās parastā kārtībā kamēr nenotiek ārkārtēja situācija, pēc tam izpilde pāriet uz except daļas bloku. Izmantojot ārkārtējo situāciju apstrādātājus nav nepieciešams izmantot kļūdas stāvokļa kodus, ko atgriež funkcijas. Nepieciešamas vienkārši norādīt uz ārkārtējo situāciju, ja kaut kas nav tā kā vajag. Viss, kas seko aiz izsaukuma Raise neizpildās un nepiepildās ārkārtējo situāciju apstrādātāja  meklēšana. Mūsu gadījumā parādīsies paziņojums “Parole nav pareiza !”. Ja ārkārtējās situācijas nerodas, bloks noslēdzas bez except – daļas. Modulis Unit2 apraksta ParProgrammu klases formu un izmanto tikai formas aizvēršanas procedūru, nospiežot pogu Button1 (“Izeja”). Modulis Unit2 tiek izsaukts no galvenās formas moduļa.
Moduļiem Unit3, Unit4, Unit5 ir vienāda struktūra, kas tiks izskatīta uz Unit3 moduļa piemēra.
Operatoram uses bez standartmoduļiem ir pievienoti lietojumprogrammas unit6 moduļi, kas ļauj izskatīt HTML, Unit7 failus, kas  nodrošina testēšanas procesu, modulis Unit9 , kas ļauj saskatīt testēšanas rezultātus modulis DataModule, kas apvieno datu bāzes komponentes un modulis IzdrukIzsauktUnit , kurš ļauj noģenerēt testēšanas atskaiti un izdrukāt to.
Modulis satur HTML – failu izsaukšanas procedūras, kurās tiek glabātas mācību tēmas. Formāta HTML izvēle priekš  mācību tēmas datorpriekšstata nav nejauša, jo labai programmai ir jānodrošina izdarīt izmaiņas, pie tam nesaraujot izveidoto pamatu. Šāda prasība uzskata, ka izmaiņas būs kontrolējamas un kaut arī dažas programmas daļas mainīsies pārējām daļām jāpaliek nemainīgām. Izmaiņu izdarīšana HTML failos neizsauks nekādas izmaiņas programmas kodā, ja neradīsies vēlēšanās tai pievienot jaunas tēmas. Failu izsaukšana notiek šādi :
skatisana.HTML1.RequestDoc(DM.IzsauktHTML('1_1.html'));
Kur Skatisana – formas nosaukumi ar uz tās HTML1 komponenšu izvietošanu. RequestDoc  metode tiek pielietota pie HTML1 komponentes priekš HTML – lappuses meklēšanas un ielādēšanas. Iekavās norādīta funkcija, kas izsauc HTML failus neatkarīgi no tā kurā vietā atrodas faili uz diska, failu nosaukumi tiek likti apostrofos. Pati funkcija IzsauktHTML tiek izsaukta DataModule moduļa :
function TDM.IzsauktHTML ( FileName : string ):string;
var s:string;
    i:integer;
begin
 result:='file:/';
 s:=extractfilepath(application.exename)+'HTML/';
 for i:=1 to length(s) do
     if s[i]='\' then result:=result+'/'
                 else result:=result+s[i];
 result:=result+FileName;
end;
Lai izsauktu formu Skatisana izmanto ShowModal metodi:
skatisana.ShowModal;
Pēc tēmas izlasīšanas skolnieks saņem informāčijas paziņojumu, kurš piedāvā viņam testēties vai atteikties no testēšnas.
Katrs no norādītajiem moduļiem satur procedūru Palaisttestu:
procedure TEkonomSistemas.Palaisttestu (Tema : string);
begin
if messagedlg('Vai Jūs vēlaties testēties?'), mtinformation, [mbyes,mbno],0)=mryes then
begin
EkonomSistemas.WindowState:= WsMinimized;
dm.Jaut.Filter:='Tema='+#39+Tema+#39;
testesana.ShowModal;
dm.Jaut.Filter:='';
if testesana.ModalResult<>mrabort then
begin
rezulttesta.GroupBox1.Visible:=false;
rezulttesta.Panel1.Visible:=true;
RezultTesta.ShowModal;
rezulttesta.GroupBox1.Visible:=true;
end;
EkonomSistemas.WindowState:= WsNormal;
end;
end;
MessageDlg  ir funkcija, ko piedāvā  Delphi priekš dialoga ar lietotāju programmas organizēšanai(2. 17. Attēls.). Tai nepieciešams uzdot 4 parametrus vai argumentus. Pirmais parametrs ir paziņojums, kurš jāattēlo uz ekrāna, ieslēgts apostrofos.  Otrs parametrs ir konstante, kas nosaka dialoga loga tipu. Iespējamās vērtības- konstantes mtWarning, mtError, mtInformation, mtConfirmation. Ar katru konstanti tiek asociēta speciāla piktogramma un priekš katras ir specifisks dialoga loga virsraksts. Par tešo parametru kalpo komponenšu daudzums, kas nosaka kādām pogām jābūt dialoga logā. Konstantu uzskaitījums ieslēgts kvadrātiekavās un var saturēt mbYes, mbNo, mbOk, mbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll. Visbeidzot MessageDlg funkcija atgriež konstanti, kas nosaka kādu pogu nospiedis lietotājs.
Modulis Unit6 apraksta TSkatisana klasi – TForm tipa objekta eksemplārs, kurš nodrošina formu, kurā norisinās HTML failu apskate. Modulī ir tikai viena procedūra OnShow formas notikumu apstrādātājā:
procedure TSkatisana.FormShow(Sender: TObject);
begin
button1.Left:=(screen.Width div 2)-(button1.Width div 2);
end;
Notikumi OnShow izveidojas kad forma tiek attēlota (tas ir kad tās īpašības Visible pieņem true vērtību). Šim notikumam ir TNotifyEvent  tips notifikāciju paziņojumi nenes sevī nekādu informāciju par pašu notikumu, tikai satur norādi uz notikuma avotu – Sender parametru. Procedūra nepieciešama tāpēc, lai izvietotu pogu Button1 (“Izeja”) formas centrā. Div – tas ir bināra aritmētiska operācija, kas apzīmē veselu skaitļu dalījumu.
Modulis Unit7 apraksta TTestesana klasi – TForm tipa objekta eksemplāru, kurš nosaka TTestesana formu. Šis modulis nodrošina testēšanas procesu. Dati priekš testēšanas tiek ņemti no DataModule moduļa un ParolesUnit moduļa.
Panel komponentei nepiemīt WordWrap īpašības, kuras ļauj pārnest vārdus no vienas rindiņas uz otru. Tāpēc, lai attēlotu atbildes tika izveidota jauna TAtbildesLabel  komponente- TLabel komponentes mantiniece uz TComponent klases pamata :
TAtbildesLabel = class (TLabel)
constructor Create ( Owner : TComponent ); override;
procedure MouseUp ( Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
 end;
Konstruktors Create automātiski izdala atmiņu priekš komponentes un tās eksemplāra inicializācijas. Owner klases īpašība TComponent ļauj uzzināt dotās komponentes saimnieku. Owerride pārdefinē pārmantotās metodes.
constructor TAtbildesLabel.Create (Owner : TComponent );
begin
  inherited Create (Owner);
  parent: = (Owner as TWinControl);
  Autosize:=false;
  WordWrap:=true;
  left:=40;
  width:=(Owner as TWinControl).clientwidth - 45;
end;
Atslēgas vārds Inherited – pārmantots radītājs ar kura palīdzību mainām komponentes īpašības uz tādām īpašībām, kādas mums vajadzīgas. ParentTControl klases īpašību satur sevī norādi uz vecāku komponenti. Tā nepieciešama, lai pareizi izvadītos jaunā komponente. Priekš vārdu pārnešanas uzdod WordWrap īpašību, tālāk tiek norādītas īpašības priekš lietotāj programmas Testesana konkrētas formas.
Ir izveidots piezīmju masīvs, lai noklikšķinot uz attiecīgās piezīmes vai radio pogas, pārķertu nospiešanu uz piezīmes.
AtbildesLabels : array [1..MaxAtbildSkaits] of TAtbildesLabel;
Tā kā notikums OnClick neizdod koordinātes, tad notikumu apstrādātājā MouseUp tika izveidota procedūra, kas nosaka darbu ar peli:
procedure TAtbildesLabel.MouseUp  ( Button: TMouseButton;
                                   Shift: TShiftState; X, Y: Integer);
begin
 (parent as Panel).OnMouseUp(parent,button,shift,left+x,top+y);
end;
Nospiešana uz Label komponenti nozīmē nospiešanu uz komponenti Panel. Procedūra Panel1MouseUp nosaka peles nospiešanu nevis uz sevi, bet uz vecāku klasi.
procedure TTestesana.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbleft then
   rg2.ItemIndex:=(Y-(rg2.Height div rg2.Items.Count) div 2) div (rg2.Height div rg2.Items.Count);
end;
mbLeft – tas ir galvenais peles taustiņš. Tālāk izskaitļojam, kur atradīsies atbildes teksts.
Testēšanas process tiek īstenots ar dažām procedūrām. Procedūra AizpildAtb aizpilda atbildes un tiek izsaukta no procedūrām FormShow, Button3Click, Button2Click:
procedure TTestesana.AizpildAtb;
var aizpildits: array [1..MaxAtbildskaits] of boolean;
    step, i, n, LSkait, augst : integer;
begin
 rg2.Items.Clear;
 LSkait:=1;
 augst:=(rg2.Height-15) div dm.Atb.RecordCount;
 for i:=1 to MaxAtbildskaits do aizpildits[i]:=false;
 for step:=dm.Atb.RecordCount downto 2 do
     begin
     n:=random(step)+1;
     for i:=1 to n do if aizpildits[i] then inc(n);
     while aizpildits[n] do inc(n);
     aizpildits[n]:=true;
     dm.Atb.First;
     dm.Atb.MoveBy(n-1);
     rg2.Items.Append(dm.AtbAtbID.AsString);
     if Atbildes[Tekjautajums]=dm.AtbAtbID.Value then rg2.ItemIndex:=rg2.Items.IndexOf(dm.AtbAtbID.AsString);
     if AtbildesLabels[Lskait]=nil then    AtbildesLabels[Lskait]:=TAtbildesLabel.Create(Panel1);
     AtbildesLabels[Lskait].top:=rg2.top+8+(((Lskait-1)*augst)+(augst div 2));
     AtbildesLabels[Lskait].height:=augst-2;
     AtbildesLabels[Lskait].caption:=dm.AtbAtbilde.AsString;
     inc(LSkait);
     end;
 n:=1;
 while aizpildits[n] and (n<=dm.Atb.RecordCount) do inc(n);
 dm.Atb.First;
 dm.Atb.MoveBy(n-1);
 rg2.Items.Append(dm.AtbAtbID.AsString);
 if Atbildes[Tekjautajums]=dm.AtbAtbID.Value then rg2.ItemIndex:=rg2.Items.IndexOf(dm.AtbAtbID.AsString);
 if AtbildesLabels[Lskait]=nil then AtbildesLabels[Lskait]:=TAtbildesLabel.Create(Panel1);
 AtbildesLabels[Lskait].top:=rg2.top+5+(((Lskait-1)*augst)+(augst div 2));
 AtbildesLabels[Lskait].height:=augst-2;
 AtbildesLabels[Lskait].caption:=dm.AtbAtbilde.AsString;
 inc(LSkait);
 for i:=LSkait to MaxAtbildSkaits do
     begin
     AtbildesLabels[Lskait].free;
     AtbildesLabels[Lskait]:=nil;
     end;
end;
Kad parādās teksts, neviena radio poga nav iezīmēta: rg2.Items.Clear.
Mainīgais LSkait – papildus Label skaitītājs – aizpilamās atbildes indekss (dublē atbilžu skaitu uz augšu). Mainīgais augst- augstums, kurā izskaitļojas komponentes Label faktiskais augstums. Move by – metode kura pārvietojas par dažiem ierakstiem datu bāzes tabulā.
Procedūra FormShow parāda uz ekrāna atbildes:
procedure TTestesana.FormShow(Sender: TObject);
var i:integer;
begin
randomize;
for i:=1 to MaxJautSkaits do atbildes[i]:=0;
Tekjautajums:=dm.JautNumurs.Value;
AizpildAtb;
end;
Procedūra Button3Click apstrādā notikumu nospiežot pogu “Nāk. Jautājums”:
procedure TTestesana.Button3Click(Sender: TObject);
var i : integer;
begin
if rg2.ItemIndex>=0 then
   begin
   Atbildes[TekJautajums]:=strtoint(rg2.Items[rg2.ItemIndex]);
   end;
dm.Jaut.Next;
if not dm.Jaut.EOF then
   begin
   Tekjautajums:=dm.JautNumurs.Value;
   AizpildAtb;
   end
   else
   begin
   if messagedlg('Jūs pabeidzāt testu. Vai vēlaties apskatīt savas atbildes vēlreiz?',mtinformation,[mbno,mbyes],0)=mryes then exit;
   dm.Rez.Insert;
   dm.RezGrupa.Value:=parolesdlg.Grupa.Text;
   dm.RezVUzv.Value:=parolesdlg.Vards.Text;
   dm.RezTema.Value:=dm.JautTema.AsString;
   dm.RezDatums.Value:=date;
      dm.Jaut.First;
      i:=1;
      dm.RezJautajumi.Value:='';
      dm.RezAtbildes.Value:='';
      dm.RezPareizi.Value:=0;
      dm.RezNavAtbildes.Value:=0;
      while not dm.Jaut.EOF do
      begin         dm.RezJautajumi.Value:=dm.RezJautajumi.Value+dm.JautNumurs.AsString+'; ';
      dm.RezAtbildes.Value:=dm.RezAtbildes.Value+inttostr(atbildes[i])+'; ';
      if atbildes[i]>0 then
         begin
         dm.Atb.Locate('AtbID',atbildes[i],[]);
         if dm.AtbPareizs.Value then  dm.RezPareizi.Value:=dm.RezPareizi.Value+1;
         end
         else dm.RezNavAtbildes.Value:=dm.RezNavAtbildes.Value+1;
      dm.Jaut.Next;
      inc(i);
      end;
   dm.RezKopa.Value:=dm.Jaut.RecordCount;
   dm.Rez.Post;
   dm.Rez.FlushBuffers;
   self.ModalResult:=mrok;
end;
end;
Procedūra Button2Click apstrādā notikumu OnClick pogai “Iepr.jautājums”:
procedure TTestesana.Button2Click(Sender: TObject);
begin
if rg2.ItemIndex>=0 then
   begin
   Atbildes[TekJautajums]:=strtoint(rg2.Items[rg2.ItemIndex]);
   end;
if not dm.Jaut.BOF then
   begin
   dm.Jaut.Prior;
   Tekjautajums:=dm.JautNumurs.Value;
   AizpildAtb;
   end;
end;
Procedūra FormClose apstrādā notikumu OnClose formai Testesana :
procedure TTestesana.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
 for i:=1 to MaxAtbildSkaits do
  if AtbildesLabels[i]<>nil then
     begin
     AtbildesLabels[i].free;
     AtbildesLabels[i]:=nil;
     end
end;
Modulis Unit8 kalpo, lai aizpildītu datu bāzes tabulu, apraksta klase TJauIevad, saistīts ar moduli DataModule.
Satur divas pogu “Ierakstīt” procedūras, kas apraksta notikumu OnClick.
Procedūra Button1Click ievieto ierastu rindas tabulā “Jautājumi”:
procedure TJautIevad.Button1Click(Sender: TObject);
begin
dm.Jaut.Insert;
dm.JautTema.Value:=edit1.Text;
dm.JautNumurs.Value:=SpinEdit1.Value;
dm.JautJautajums.Value:=memo1.Text;
dm.Jaut.Post;
memo1.Lines.Clear;
end;
Procedūra Button2Click ievieto ierakstus tabulā “Atbildes”:
procedure TJautIevad.Button2Click(Sender: TObject);
begin
dm.Atb.Insert;
dm.AtbTema.Value:=edit1.Text;
dm.AtbNumurs.Value:=spinedit1.Value;
dm.AtbAtbilde.Value:=edit3.Text;
dm.AtbPareizs.Value:=checkbox1.Checked;
dm.Atb.Post;
dm.Atb.Insert;
dm.AtbTema.Value:=edit1.Text;
dm.AtbNumurs.Value:=spinedit1.Value;
dm.AtbAtbilde.Value:=edit4.Text;
dm.AtbPareizs.Value:=checkbox2.Checked;
dm.Atb.Post;
dm.Atb.Insert;
dm.AtbTema.Value:=edit1.Text;
dm.AtbNumurs.Value:=spinedit1.Value;
dm.AtbAtbilde.Value:=edit5.Text;
dm.AtbPareizs.Value:=checkbox3.Checked;
dm.Atb.Post;
dm.Atb.Insert;
dm.AtbTema.Value:=edit1.Text;
dm.AtbNumurs.Value:=spinedit1.Value;
dm.AtbAtbilde.Value:=edit6.Text;
dm.AtbPareizs.Value:=checkbox4.Checked;
dm.Atb.Post;
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit6.Text:='';
checkbox1.Checked:=false;
checkbox2.Checked:=false;
checkbox3.Checked:=false;
checkbox4.Checked:=false;
end;
Modulis Unit9 satur TResultTesta  - TForm tipa objekta eksemplārs, kas nodrošina formu ResultTesta. 
Procedūra FormCreate izveido formu, lai parādītu uz ekrāna testa rezultātus, ielādē failu Grupa.txt, kurā glabājas grupu numuri:
procedure TRezultTesta.FormCreate(Sender: TObject);
begin
combobox1.Items.LoadFromFile('Grupas.txt');
end;
procedure TRezultTesta.ComboBox1Change(Sender: TObject);
begin
if combobox1.text<>'' then dm.Rez.Filter:='Grupa='+#39+combobox1.Text+#39
                      else dm.Rez.Filter:='';
dm.QVUzv.ParamByName('Grupa').value:=combobox1.text;
dm.QVUzv.Active:=true;
combobox2.Items.Clear;
dm.QVUzv.First;
while not dm.QVUzv.EOF do
      begin
      combobox2.Items.Append(dm.QVUzvVUzv.asstring);
      dm.QVUzv.next;
      end;
dm.QVUzv.Active:=false;
combobox2.Text:='';
combobox3.Text:='';
panel1.visible:=false;
dbgrid1.visible:=false;
end;
Procedūra ComboBox2Change apstrādā notikumu OnChange kmponnentei ComboBox2:
procedure TRezultTesta.ComboBox2Change(Sender: TObject);
begin
if combobox2.Text<>'' then
   begin
   dm.QTema.ParamByName('Grupa').value:=combobox1.text;
   dm.QTema.ParamByName('VUzv').value:=combobox2.Text;
   dm.QTema.Active:=true;
   dm.QTema.First;
   combobox3.Items.Clear;
   while not dm.QTema.EOF do
      begin
      combobox3.Items.Append(dm.QTemaTema.asstring);
      dm.QTema.Next;
      end;
   dm.QTema.Active:=false;
   combobox3.Text:='';
   dm.Rez.Filter:='Grupa='+#39+combobox1.text+#39+' and VUzv='+#39+combobox2.text+#39;
   dbgrid1.visible:=true;
   panel1.visible:=true;
   end
   else
   begin
   panel1.visible:=false;
   dbgrid1.visible:=false;
   end;
end;
Procedūra ComboBoxChange ielādē komponenti ComboBox3 tēmu nosaukumus no tabulas ”Rezultāti” un ļauj  izvēlēties neatkarīgi no tā, kas ir tabulas lietotājs uz to momentu.
procedure TRezultTesta.ComboBox3Change(Sender: TObject);
begin
dm.Rez.Locate('Tema',combobox3.text,[]);
end;
Procedūra FormShow aizspoguļo uz ekrāna testa rezultātus un padara redzamas un pieejamas komponentes atkarībā no tā, kas ir lietotājs : skolēns vai skolotājs (administrators):
procedure TRezultTesta.FormShow(Sender: TObject);
begin
if groupbox1.Visible then
begin self.Height:=groupbox1.Height+dbgrid1.Height+panel1.Height+Button18.Height+44;
panel1.Top:=groupbox1.Height+dbgrid1.Height;
if not parolesdlg.Parole.Visible then
begin
combobox1.Text:=parolesdlg.Grupa.Text;
combobox1change(self);
combobox2.ItemIndex:=combobox2.Items.IndexOf(parolesdlg.Vards.Text);
combobox2change(self);
combobox1.Enabled:=false;
combobox2.Enabled:=false;
end;
              end
              else self.Height:=panel1.Height+Button18.Height+44;
Button18.Top:=self.Height-Button18.Height-40;
self.Top:=trunc((screen.Height-40-self.Height)/2);
self.Left:=trunc((screen.Width-self.Width)/2);
end;
Procedūra FormClose apstrādā formas ResultTesta OnClose notikumu:
procedure TRezultTesta.FormClose(Sender: TObject; var Action: CloseAction);
begin
if groupbox1.Visible then
   begin
   combobox1.Text:='';
   combobox1.ItemIndex:=-1;
   combobox2.Text:='';
   combobox2.ItemIndex:=-1;
   combobox3.Text:='';
   end;
DBGrid1.Visible:=false;
panel1.Visible:=false;
dm.Rez.Filter:='';
end;
Modulis IzdrukIzsaukUnit nosaka objektu TIzdrukIzsauk – klases TForm eksemplāru, kas ir forma IzdrukIzsauk. Saistīts ar lietojumprogrammas moduļiem  DataModule un IzdrUnit. 
Procedūra EnablePrintButton, kas deklarēta sadaļā private un padara pieejamu pogu BitBtn1 (“Izdrukāt”) tajā gadījumā, ja komponente ComboBox1 (grupas saraksts) nav tukša. Izpildās no procedūrām FormShow, ComboBox1Change, ComboBox2Change, ComboBox3Change.
procedure  TIzdrukIzsauk.EnablePrintButton ;
begin
  BitBtn1.Enabled:= (combobox1.Text<>'');
end;
Procedūra FormClose apstrādā formas IzdrukIzsauk notikumu OnClose, kas izpildās aizverot formu. Parametrs Action nosaka formas aizvēršanas tipu:
procedure TIzdrukIzsauk.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
cb1.Checked:=false;
dm.Rez.IndexFieldNames:='Grupa;VUzv;Tema;Datums';
end;
Procedūra BitBtn1Click apstrādā  notikumu OnClick nospiežot pogu BitBtn (“Izdrukāt”). Šajā procedūrā notiek atskaites ģenerēšana par testēšanu:
procedure TIzdrukIzsauk.BitBtn1Click(Sender: TObject);
var oldfilter:string;
begin
 try
 if combobox2.Text<>'(Visas)' then  
    begin
    dm.Rez.IndexFieldNames:='Grupa;Tema;VUzv;Datums';
    if combobox3.Text<>'(Visi)' then
                                     begin 
                                     dm.Rez.Filter:='Grupa='+#39+combobox1.Text+#39+' and Tema='+#39+combobox2.Text+#39+' and VUzv='+#39+combobox3.Text+#39;
                                     RepTestaRez.QRGroup1.Expression:='Rez.Tema or Rez.VUzv';
                                     RepTestaRez.QRDBText2.Enabled:=false;
                                     RepTestaRez.QRDBText3.Enabled:=false;
                                     end
                                else begin
                                     dm.Rez.Filter:='Grupa='+#39+combobox1.Text+#39+' and Tema='+#39+combobox2.Text+#39;
                                     RepTestaRez.QRGroup1.Expression:='Rez.Tema';
                                     RepTestaRez.QRDBText11.Enabled:=false;
                                     RepTestaRez.QRLabel6.Enabled:=false;
                                     RepTestaRez.QRDBText3.Enabled:=false;
                                     end;
    end
    else
    begin 
    if combobox3.Text<>'(Visi)' then begin
dm.Rez.IndexFieldNames:='Grupa;VUzv;Tema;Datums';
dm.Rez.Filter:='Grupa='+#39+combobox1.Text+#39+'           and VUzv='+#39+combobox3.Text+#39;
                                     RepTestaRez.QRGroup1.Expression:='Rez.VUzv';
                                     RepTestaRez.QRLabel3.Enabled:=false;
                                     RepTestaRez.QRDBText9.Enabled:=false;
                                     RepTestaRez.QRDBText2.Enabled:=false;
                                     end
                                else begin
dm.Rez.IndexFieldNames:='Grupa;Tema;VUzv;Datums';
dm.Rez.Filter:='Grupa='+#39+combobox1.Text+#39;
RepTestaRez.QRGroup1.Expression:='Rez.Tema';
                                     RepTestaRez.QRDBText11.Enabled:=false;
                                     RepTestaRez.QRLabel6.Enabled:=false;
                                     RepTestaRez.QRDBText3.Enabled:=false;
                                     end;
    end;
 if not cb1.Checked then
    begin
    oldfilter:=dm.Rez.Filter;
    dm.Rez.Filter:=dm.Rez.Filter+' and Datums>='+#39+datetostr(datno.Date)+#39+' and Datums<='+#39+datetostr(datlidz.Date)+#39;
    RepTestaRez.qrlabel5.Caption:=' no   '+datetostr(datno.Date)+'   līdz   '+datetostr(datlidz.Date)+'.';
    if dm.Rez.RecordCount=0 then
       if messagedlg('Izvēletā datumu intervalā testēšana nenotikusi. Vai Jūs vēlaties izdrukāt informāciju par testēšanu citos datumos?', mtinformation, [mbyes,mbno],0)= mryes
          then begin
               cb1.Checked:=true;
               dm.Rez.Filter:=oldfilter;
               RepTestaRez.qrlabel5.Caption:='nav uzradīts.';
               end
          else exit;
    end
    else
    begin
    RepTestaRez.qrlabel5.Caption:='nav uzradīts.';
    end;
 RepTestaRez.Preview;
 finally
 dm.Rez.Filter:='';
 RepTestaRez.QRDBText2.Enabled:=true;
 RepTestaRez.QRDBText3.Enabled:=true;
 RepTestaRez.QRDBText11.Enabled:=true;
 RepTestaRez.QRLabel6.Enabled:=true;
 RepTestaRez.QRLabel3.Enabled:=true;
 RepTestaRez.QRDBText9.Enabled:=true;
 end;
end;
Ārkārtēju situāciju rašanās gadījumā var būt nepieciešama kāda nebūt darbība, piemēram, atmiņas iztīrīšana pirms ārkārtējās situācijas apstrādes. Tam kalpo bloks try..finnaly..end. Bloka iekšienē kods izpildās parastajā veidā. Ārkārtējas situācijas rašanas gadījumā izpildās kods, kas ir blokā finally . Šis bloks nesatur tiešu ārkārtējo situāciju apstrādātāju.
Metode Expressions norāda, kā grupējas dati atskaitē.
Procedūra cb1Click apstrādā indikatora notikumu OnClick, kas nosaka vai datums ir svarīgs atskaitē vai nē. Label4 – pazīme datumu intervāla sākumam, label5 – datumu intervāla beigas.
procedure TIzdrukIzsauk.cb1Click(Sender: TObject);
begin
label4.Enabled:=not cb1.Checked;
label5.Enabled:=not cb1.Checked;
end;
Procedūra ComboBox1Change apstrādā komponentes ComboBox1 notikumu OnChange, kurā tiek attēlots grupu saraksts:
procedure TIzdrukIzsauk.ComboBox1Change(Sender: Object);
begin
animate1.Visible:=true;
animate1.Active:=true;
dm.QVUzv.ParamByName('Grupa').value:=combobox1.text;
dm.QVUzv.Active:=true;
combobox3.Items.Clear;
combobox3.ItemIndex:=combobox3.Items.Add('(Visi)');
dm.QVUzv.First;
while not dm.QVUzv.EOF do
      begin
      combobox3.Items.Append(dm.QVUzvVUzv.asstring);
      dm.QVUzv.next;
      end;
dm.QVUzv.Active:=false;
dm.QTema2.ParamByName('Grupa').value:=combobox1.text;
dm.QTema2.Active:=true;
combobox2.Items.Clear;
combobox2.ItemIndex:=combobox2.Items.Add('(Visas)');
dm.QTema2.First;
while not dm.QTema2.EOF do
      begin
      combobox2.Items.Append(dm.QTema2Tema.AsString);
      dm.QTema2.Next;
      end;
dm.QTema2.Active:=false;
EnablePrintButton;
animate1.Active:=false;
animate1.Visible:=false;
end;
Procedūra ComboBox2Change apstrādā komponentes ComboBox2 notikumu OnChange, kurā tiek attēlots testējamo uzvārdu saraksts:
procedure TIzdrukIzsauk.ComboBox2Change(Sender: TObject);
var s:string;
begin
animate1.Visible:=true;
animate1.Active:=true;
s:=combobox3.Text;
if combobox2.Text<>'(Visas)' then
   begin   dm.QVUzv2.ParamByName('Grupa').value:=combobox1.text;
   dm.QVUzv2.ParamByName('Tema').value:=combobox2.text;
   dm.QVUzv2.Active:=true;
   combobox3.Items.Clear;
   combobox3.Items.Append('(Visi)');
   dm.QVUzv2.First;
   while not dm.QVUzv2.EOF do
      begin
      combobox3.Items.Append(dm.QVUzv2VUzv.asstring);
      dm.QVUzv2.next;
      end;
   dm.QVUzv2.Active:=false;
   end
   else
   begin
   m.QVUzv.ParamByName('Grupa').value:=combobox1.text;
   dm.QVUzv.Active:=true;
   combobox3.Items.Clear;
   combobox3.Items.Append('(Visi)');
   dm.QVUzv.First;
   while not dm.QVUzv.EOF do
      begin
      combobox3.Items.Append(dm.QVUzvVUzv.asstring);
      dm.QVUzv.next;
      end;
   dm.QVUzv.Active:=false;
   end;
combobox3.ItemIndex:=combobox3.Items.IndexOf(s);
if (combobox3.ItemIndex=-1) then combobox3.ItemIndex:=0;
animate1.Active:=false;
animate1.Visible:=false;
EnablePrintButton;
end;
Procedūra cb1Click  apstrādā notikumu, kad ir uzspiests uz komponentes cb1.
procedure TIzdrukIzsauk.cb1Click(Sender: TObject);
begin
label4.Enabled:=not cb1.Checked;
label5.Enabled:=not cb1.Checked;
end;
Procedūra ComboBox3Change apstrādā komponentes ComboBox3 notikumu OnChange, kurā tiek attēlots tēmu saraksts, pēc kurām notiek testēšana:
procedure TIzdrukIzsauk.ComboBox3Change(Sender: TObject);
var s:string;
begin
animate1.Visible:=true;
animate1.Active:=true;
s:=combobox2.Text;
if combobox3.Text<>'(Visi)' then
   begin
   dm.QTema.ParamByName('Grupa').value:=combobox1.text;
   dm.QTema.ParamByName('VUzv').value:=combobox3.Text;
   dm.QTema.Active:=true;
   combobox2.Items.Clear;
   combobox2.Items.Append('(Visas)');
   dm.QTema.First;
   while not dm.QTema.EOF do
         begin
         combobox2.Items.Append(dm.QTemaTema.AsString);
         dm.QTema.Next;
         end;
   dm.QTema.Active:=false;
   end
   else
   begin
   dm.QTema2.ParamByName('Grupa').value:=combobox1.text;
   dm.QTema2.Active:=true;
   combobox2.Items.Clear;
   combobox2.Items.Append('(Visas)');
   dm.QTema2.First;
   while not dm.QTema2.EOF do
         begin
         combobox2.Items.Append(dm.QTema2Tema.AsString);
         dm.QTema2.Next;
         end;
   dm.QTema2.Active:=false;
   end;
combobox2.ItemIndex:=combobox2.Items.IndexOf(s);
if combobox2.ItemIndex=-1 then combobox2.ItemIndex:=0;
animate1.Active:=false;
animate1.Visible:=false;
EnablePrintButton;
end;
Procedūra FormCreate apstrādā formas IzdrukIzsauk notikumu OnCreate .Tas notiek formas veidošanas sākumā. Šeit  var uzdot dažādas darbības, kurām ir jānotiek veidojot formu. Šajā gadījumā – tas ir grupas saraksta aizpildīšana komponentes failā no faila Grupas.txt.
procedure TIzdrukIzsauk.FormCreate(Sender: TObject);
begin
combobox1.Items.LoadFromFile('Grupas.txt');
end;




Modulis IzdrUnit apraksta objektu TRepTestaRez – klases TForm eksemplārs, kurš nosaka testēšanas rezultātu atskaites formu. Saistīts ar moduli DataModule neastur procedūras.
Universāls datu glabāšanas veids ir datu bāzes. Tās ir nodrošinātas ar datu manipulācijas un pārskates līdzekļiem. Delphi ir iebūvēts jaudīgs datu bāzu uzturēšanas mehānisms. Tāpēc, lai nodrošināti programmas efektivitāti un modificēšanu, testa jautājumi, atbildes, rezultāti un saraksts vismaz vienu reizi testēto  tiek glabāts datu bāzē.
Patreiz paši tiek izmantotas relāciju datu bāzes. Relāciju datu bāze glabā informāciju loģisko tabulu veidā, kas sastāv no kolonnām un rindām. Katra tabulas rinda ir viens ieraksts, katra kolonna – viens lauks.
Lauks (field)- datu bāzes datu elements. Laukam ir nosaukums un tips. Simbolu virknēm Paradox izmanto tipu Alpha. Daži datu tipi prasa norādīt izmēru. Te var runāt datu bāzē par nelielu datu apjomu, kuru var glabāt laukā.
Ieraksts (record) – lauku kopums, kuri satur saistītu informāciju. Piemēram, ieraksts tabulā “Jautajumi”  satur nosauktās tēmas, jautājuma numuru, un pašu jautājumu.
 Indekss (Index) tāpat kā grāmatas nosaukums ļauj atrast vajadzīgo tēmu, tā arī datu bāzes indekss ļauj atrast ierakstus, kam ir dotā lauka vērība.
Primāro indeksu (primary index) – izmanto daudzās datu bāzes funkcijās. Primārais indekss nosaka kārtību kādā tiks attēloti ieraksti datu bāzē. Primārā indeksa laukam ir jābūt unikālam, t.i. divi ieraksti nevar būt vienādi.
Sekundārais indekss (secondary index) – indekss, kas var bāzēties uz  lauku kombinācijas un kuram obligāti nav jābūt unikālam. Sekundāros indeksus izmanto, lai varētu saistīt savā starpā tabulas.
Pieprasījums (query) – SQL (Structured Query Language – strukturēto pieprasījumu valoda) operators, kurš izvēlas lauku ierakstus no vienas vai vairākām tabulām. Pieprasījumus var izmantot, lai iegūtu informāciju no datu bāzes.
Programma satur 4 tabulas, kuras glabājas atsevišķos failos Jautajumi.db, Atbildes.db, Rezultati.db un Uzvardi.db. Lai izveidotu tabulas izmanto Borland Database Desktop . Lietojumprogrammas izstrādē izmanto Paradox datu bāzi. Tabulas struktūras ir parādīta pielikumā Nr.10.
Tāpat programmā izmanto 4 SQL pieprasījumus.
Vairākas programmas formas izmanto vienas un tās pašas tabulas, tas ir ērti, lai visas viņas grieztos pie datu bāzes komponentēm, kas glabājas datu modulī. Programmā tāds modulis ir DataModule.
2.18. Datu modulī glabājas nevizuālās komponentes darbam
ar datu bāzēm.
Komponente Table ir saistošais posms starp programmu un fizisku datu failu. Datu avots (komponente DataSource) darbojas kā vidutājs datu apmaiņai tabulām un datu komponentēm. Tas nozīmē, ka datu izmaiņas komponentē, kas saistīta ar šo datu avotu, automātiski izmainīs datus tabulā. Lai izmainītu tekošo ierakstu TTable ir piecas metodes: Next- pārvieto uz nākošo datu kopas ierakstu, Prior - pārvieto uz iepriekšējo datu kopas ierakstu, First- pārvieto uz pirmo datu kopas ierakstu, Last - pārvieto uz pēdējo datu kopas ierakstu, Move By – pārvieto par noteiktu skaitu pozīcijām. Piemēram, Move By (-2) – par divām pozīcijām atpakaļ, Move By (3) – par trīs pozīcijām uz priekšu. Pārvietojoties pa tabulu bieži ir jāzina kad ir sasniegts tabulas sākums vai
beigas. To var noteikt ar īpašību EOF (End of File – faila beigas) un BOF (Begginning of File – faila sākums)
Parādot testēšanas rezultātus ir jāparādās pareizo atbilžu procentam. To var panākt izmantojot izskaitļojamos laukus (calculated fields). Izskaitļotā lauka priekšrocības ir tur, ka tas neglabājas datu bāzē, bet tā parādās katrā ieraksta izmainīšanas gadījumā. Lai pievienotu izskaitļojamos laukus izmanto lauku redaktoru, kuru izsauc ar dubultklikšķi uz komponentes TTable. Jaunajam laukam uzrāda nosaukumu un tipu. Delphi izsauc procedūru OnCalcFields katru reizi, kad ir nepieciešams pārskaitļot laukus. Modulī DataModule šī procedūra izskatās šādi:
procedure TDM.RezCalcFields(DataSet: TDataSet);
begin
RezNepareizi.Value:=rezkopa.AsInteger-reznavatbildes.AsInteger-rezpareizi.AsInteger;
if rezkopa.AsInteger<>0 then RezPareziProc.Value:=round(rezpareizi.AsInteger/rezkopa.AsInteger*100)
                        else RezPareziProc.Value:=0;
end;
Datu aizsardzība – tas ir process kas ļauj noteiktiem lietotājiem, grupām vai procesiem nolasīt datus un manipulēt ar tiem. Datu aizsardzība var būt piesaistīta pie lietojumprogrammas.
Atkarībā no datu bāzes tiek pielietoti dažādi aizsardzības līmeņi. Pie vairāk izplatītiem aizsardzības līmeņiem attiecas sekojošie:
·        Aizsardzības nav. Katrs lietotājs, kam ir fiziska pieeja  datu bāzei, var pārskatīt un modificēt to.
·        Visu vai neko. Šajā gadījumā, lai iegūtu pieeju datu bāzei  ir nepieciešamas dažas darbības. Tomēr kā lietotājs iegūs pieeju, viņam būs pieeja visiem datiem un iespēja modificēt tos.
·        Daudzlietotāju pieeja tabulas līmenī. Ļauj lietotājiem vērsties pie tabulas vai nu tikai lasīšanas režīmā, vai arī modificēšanas režīmā.
·        Daudzlietotāju pieeja lauku līmenī. Tas ir elastīgāks aizsardzības veids. Pieejai lauku līmenī lietotājam var būt piešķirta pieeja katram laukam, vai tikai izvēlētiem laukiem, pie kam pieeja var dot atļauju modificēt atsevišķus laukus, tā kā priekš citiem laukiem nebūs atļauta pat lasīšana.
Lietojumprogrammā “Ekonomika” datu bāzes informācijas aizsardzība  ir ar paroli, kas nosaka pieeju pie tabulām. Priekš skolēniem ir izveidota iekšējā parole “mācību”, kas dod tiesības redzēt datus Read Only režīmā, to nevajag ievadīt reģistrācijas brīdī. Database Desktop tabulu īpašības Password Security ar Master Password  ir noteikta administratora parole, kam ir pilnas tiesības uz datu bāzi “15xfc16vby”, Auxilary Passwords nosaka papildus paroles, kur arī tiek noteikts lietotāja parole un lietotāja tiesības. Paroles ievades lauks būs pieejams, ja administrators iees ar vārdu “Oksana Kominska autore”.
DataModule modulī ir izveidota DMCreate, kura nosacīs ceļu uz tabulām uz diska:
procedure TDM.DMCreate(Sender: TObject);
var cels : string;
begin
cels:=extractfilepath(application.ExeName)+'Tabulas';
sakars.NetFileDir:=cels;
jaut.DatabaseName:=cels;
Atb.DatabaseName:=cels;
Rez.DatabaseName:=cels;
QVuzv.DatabaseName:=cels;
QTema.DatabaseName:=cels;
QTema2.DatabaseName:=cels;
QVuzv2.DatabaseName:=cels;
end;
Procedūra SakarsPassword komponentes Session notikumā OnPassword kontrolējas pieja pie datu bāzes.
procedure TDM.SakarsPassword(Sender: TObject; var Continue: Boolean);
begin
continue:=false;
end;
begin
continue:=false;
end;

3. Lietojumprogrammas “Ekonomika”
praktiskais pielietojums zināšanu kontrolē

3. 1. Mācībās izmantojamās kontroles un paškontroles metodes

Mācības – divpusējs process, mācīšanās un mācīšana to savstarpējā vienotībā, atkarībā un nosacītībā. Mācības raksturo:
* skolotāja mācīšanas un skolēna mācīšanās mērķu atbilstība,
* skolotāja un skolēna darbības motivācijas atbilstība,
* skolotāja mācīšanas līdzekļu (satura, metožu, organizatorisko formu) atbilstība skolēna mācīšanās prasmei un pastāvībai,
* mācību rezultātu novērtēšanas un pašnovērtēšanas tuvināšanās.
Mācīšana iegūst jēgu, ja tā rosina, intensificē un bagātina skolēna mācīšanos. Mācības ir speciāli organizēts process, lai radītu optimālus apstākļus skolēna pieredzes bagātināšanai, intelektuālajai, estētiskajai, tikumiskajai attīstībai, pašaudzināšanai.
Zināšanas – izziņas rezultāts faktos, jēdzienos, noteikumos, teorijas, ko cilvēks iegūst mācoties. Mācīties var praktiskajā darbībā, saskarsmē ar cilvēkiem, mācību iestādē. Tādēļ ir pazīstama praktiskā, mācību un zinātniskā izziņa, kas bagātina zināšanas. Zināšanām ir kvalitāte: plašas vai šauras, izvērstas vai koncentrētas, noturīgas vai paviršas, izmantojamas vai pasīvas, deklaratīvas vai procesuālas. Tās aptver triju veidu informāciju: konceptuālu)par dabu, sabiedrību, domāšanu), metakognitīvu (par zināšanām un iegūšanu), sociokulturālu (tikumiskās un estētiskās normas, garīgās vērtības, tradīcijas u. c.). Zināšanas ir pamats, zināšanas raksturojas ar cilvēka prasmi tās izmantot praktiski vai jaunu zināšanu iegūšanai. Zināšanas var iegūt dažādos veidos.
Par mācību metodi sauc sistemātisku skolotāja un skolēnu savstarpēji saistītas darbības veidu, kurš vērsts uz izglītošanas, audzināšanas un attīstības uzdevumu risināšanu mācību procesā.
Mācību metodes ir viens no vissvarīgākajiem mācību procesa komponentiem. Bez atbilstošām darbības metodēm nav iespējams realizēt mācību mērķus un uzdevumus, panākt, lai skolēni apgūtu noteiktu mācību vielas saturu.
Ievērojot viengabalainuma pieeju, jāizšķir trīs lielas mācību metožu grupas:
*      mācību izziņas darbības organizācijas un īstenošanas metodes;
*      mācību izziņas darbības stimulēšanas un motivācijas metodes;
*      mācību izziņas darbības efektivitātes kontroles un paškontroles metodes.
Katrā no trim grupām ir atspoguļota pedagogu un skolēnu mijiedarbība. Skolotāja organizatoriskās ietekmes saplūst ar skolēnu darbību un pašorganizāciju. Skolotāja stimulētājietekme rada mācīšanas motivāciju skolēnos, t. i., mācīšanās iekšējo stimulēšanu. Skolotāja kontroles darbības veidi apvienojas ar skolēnu paškontroli.
Mācību rezultātu novērtēšana un pašnovērtēšana ir vienmēr orientēta uz rezultāta uzlabošanu. To izdara ar noteiktu mērķi pēc kritērijiem, kas zināmi kā skolotājam, tā skolēnam. Novērtē mācību rezultātu kvalitāti, to atbilstību mērķiem, mērķu un līdzekļu kā arī līdzekļu un rezultāta atbilstību, rezultāta kvalitāti un tā sasniegšanai patērēto laiku un skolotāja un skolēna enerģiju.
Skolotājs var izmantot dažādas kontroles metodes:
1.  Vārdiskā kontrole tiek realizēta ar individuālo un frontālo atprasīšanu. Individuālajā atprasīšanā skolotājs uzdod skolēnam vairākus jautājumus, uz kuriem atbildot skolēns parāda mācību vielas apguves līmeni. Frontālajā atprasīšanā skolotās izvēlas loģiski savstarpēji saistītu jautājumu sēriju un uzdod visai klasei, izsaucot atsevišķus skolēnus īsai atbildei.
2.  Rakstveida kontroles metodes mācību procesā nozīmē kontroldarbu, atstāstījumu, diktātu, rakstveida ieskaišu un citu rakstveida darbu organizēšanu. Rakstveida kontroldarbi, atstāstījumi, diktāti var būt īsi, ko veic 15–20 minūtēs, kā arī tie var aizņemt visu stundu. Pēdējos gados arvien biežāk izmanto programmēšanas tipa rakstveida kontroldarbus. Tādā gadījumā skolotājs sastāda jautājumu sarakstu, uz veidlapas uzraksta katram jautājumam iespējamos atbilžu variantus, no kuriem viens ir pilnīgāks un precīzāks, bet pārējie ir nepilnīgāki un tajos ir dažas neprecizitātes. Skolēnu uzdevumus ir izvēlēties no dotajām atbildēm visprecīzāko un vispilnīgāko. Rakstiskie parbaudes darbi var būt arī grafiskie uzdevumi, noteiktu procesu grafiku konstruēšanu u.c.
3.  Kontroles nolūkā var izmantot arī laboratorijas darbu metodes. Laboratorijas kontroldarbi izmanto fizikā, ķīmijā un citos mācību priekšmetos. Pie šīm metodēm pieskaitāma arī eksperimentālo uzdevumu risināšana, kas saistīta ar izmēģinājumiem, kurus var reāli realizēt kontroldarba laikā.
4.  Programmetās kontroles metodes. Kontroles programmas parasti sastāda pēc programmēto kontrolvingrinājumu metodikas. Ar šo metodi nav iespējams pārbaudīt skolēna valodas loģiku, pareizību, kā arī savlaicīgi sniegt skolēnam palīdzību grūtībās. Tāpēc ir nepieciešams skolēnu zināšanu pārbaudē racionāli savienot programmeto kontrole ar citām kontroles metodēm.
5.  Paškontroles metodes. Kontroles pilnveidošanas mūsdienu posma būtiska īpatnība skolā ir vispusīga mācību vielas apguves pakāpes paškontroles iemaņu attīstība skolēniem, prasme pastāvīgi saskatīt pieļautās kļūdas, neprecizitātes un izraudzīties ceļus konstatēto trūkumu novēršanai.

3. 2. Testu sastādīšanas metodika.

Pēdējos gados skolēnu zināšanu kontrolei arvien plašāk tiek izmantoti testi. Testi var tikt pieskaitīti pie programmētajām kontroles metodēm.
Vārds “Tests” ir nācis no angļu valodas un tulkojumā nozīmē “pārbaudījums”. Šo vārdu sāka izmantot zinātniskajā literatūrā, kad tika izstrādātas speciālas procedūras zināšanu izmērīšanai kā arī personības raksturošanai. Testi pēc sarežģītības un iegūstamās informācijas var būt dažādi.
Testi ir arī mērinstrumenti, kas sniedz informāciju par audzēkni, kā ar citiem izglītības procesa aspektiem, bet uzsvars noteikti tiek likts uz audzēkņiem. Skolotāja ikdienas darbā audzēkņu zināšanu, prasmju un iemaņu novērtēšana ir svarīgs un grūts viņu darba aspekts. Testu sagatavošana un izmantošana, prasmju novērtēšana, punktu skaita pārvēršana atzīmēs, testa punktu skaita interpretācija un lēmumu pieņemšana bieži vien nav ietverta skolotāju apmācībā.
Specifiskie testēšanas iemesli ir daudz un dažādi. Galvenokārt testi tiek izmantoti, lai iegūtu informāciju par audzēkņu raksturīgajām iezīmēm un zināšanām. Psiholoģijā testus parasti izmanto, lai iegūtu informāciju, kuru, iespējams, nevar iegūt citos veidos, vismaz ne tik ātri un efektīvi. Pastāv pretrunīgi viedokļi par testēšanas pielietojuma pakāpi un faktu, ka daudzi svarīgi lēmumi tiek pieņemti, balstoties uz testu rezultātiem. Ir daudzi testu piekritēji, bet ir arī to noliedzēji. Šai metodei ir gan plusi, gan mīnusi. Pat vispārliecinātākie testēšanas aizstāvji atzīst, ka testi nav pati pilnība. Tomēr izglītības testi un citi izmērīšanas līdzekļi ir noderīgi un būtiska mācīšanas un mācīšanās sastāvdaļa.
Zināšanas par to, kā testa vadīšanas faktori ietekmē rezultātā iegūto punktu skaitu, var palīdzēt izstrādāt tādus testu vadīšanas paņēmienus, kas būtu godīgi pret visiem audzēkņiem un maksimāli paaugstinātu audzēkņu izredzes labi nokārtot testu. Lai sekmīgi varētu izpildīt testus zināšanu kontrolei vajag pareizi organizēt testēšanas norisi. Tās veikšanai ir nepieciešams sagatavot:
1.  Atsevišķu atbilžu lapu.
2.  Precīzu testa izpildes instrukciju.
3.  Palīglīdzekļus (lineāls, zīmulis, kalkulātors u. c.), ja tie ir nepieciešami.
Par testa norises organizāciju audzēkņi jāinformē savlaicīgi, viņiem jāizprot telpas izkārtojums un jāzina kā testa atbildes tiks vērtētas. Pirms testa audzēkņi ir arī jāinformē par testam atvēlēto laiku.
Testos izmanto atbildes izvēles jautājumus, kurus var iedalīt trijās grupās:
1.  Atbilstošās atbildes jautājumi.
2.  Izvēles jautājumi.
3.  Pareizās – nepareizās atbildes jautājumi.
Atbildes izvēles jautājumiem ir divas galvenās pozitīvās iezīmes: tiem var precīzi piešķirt iegūtos punktus, kā arī var adekvāti pārbaudīt saturu. Šādu jautājumu negatīvā iezīme ir tā, ka tie ierobežo nenozīmīgāko detaļu izmērīšanu.
Daži ieteikumi jautājumi sastādīšanai visiem atbildes izvēles jautājumu tipiem ir kopīgi. Jāatceras, ka audzēkņiem izvēloties no dotajām atbildēm pareizo, pastāv iespēja, ka viņi izvēlēsies pareizo atbildi nejauši.
Testa jautājumiem jābūt neatkarīgiem vienam no otra. Viena jautājuma saturs nedrīkst dot atbildi uz kādu citu jautājumu. Arī pareiza atbilde uz vienu jautājumu nedrīkst būt par priekšnosacījumu pareizai atbildei uz kādu citu jautājumu.
Testa lasīšanas līmenis nedrīkst ietekmēt atzīmi, ja vien netiek pārbaudīta lasītspēja.
Testēšanas laika ierobežotība var iespaidot tā rezultātu, jo audzēkņiem ir dažāds uzstveres ātrums, cits strādā lēnāk, cits ātrāk. Tādēļ var būt gadījumi, kad lēnāk domājošajiem, ja testa izpildei ir limitēds laiks, rezultāti ir sliktāki. Tāpēc testos nav ieteicams izmantot sarežģītus uzdevumus. Šādos gadījumos skolotājam ir jādomā par to vai nevajag izmantot individuālo darbu.
1. Atbilstošās atbildes jautājumi. Atbilstošās atbildes nozīme jau dota to nosaukumā; tās prasa, lai audzēknis uz asociāciju pamata atrastu atbilstošos vārdus vai frāzes, kas izsaka vienu ideju, koncepciju, principus vai jēdzienus. Atbilstošās atbildes parasti ir izkārtotas divās ailēs; vienā ailē ir dots nosacījums, otrā – atbilde. Atbilstošo atbilžu jautājumi skolotāju veidotajos testos visbiežāk tiek izmantoti, lai pārbaudītu faktu, definīciju, simbolu lietošanas un tamlīdzīgas zināšanas. Izmantojot atbilstošās atbildes, vienā jautājumā var parādīties vairākas problēmas. Bet, ja šādos jautājumos ir kādas tehniskas nepilnības, tad arī iegūtie mērījumi būs virspusēji. Testos var efektīvi izmantot tikai labi sastādītus atbilstošo atbilžu jautājumus.
Vispārēja kļūda atbilstošo atbilžu jautājumu sastādīšanā ir neviendabīga satura iekļaušana tajos, tādējādi dodot audzēkņiem iespēju dažas kombinācijas vispār izslēgt, jo nav atbilstības starp nosacījumu un tam atbilstošo atbildi. Atbilstošās atbildes ir ļoti uzmanīgi jāpārbauda, vai nav kādas norādes, jo citādāk audzēkņi tās atšifrēs un pēc izslēgšanas principa svītros nepareizās atbildes, balstoties tikai uz kādu tehnisku faktoru testa uzbūvē.
Nosacījumu un atbilžu skaitam nav jābūt vienādam; parasti atbilžu skaits ir lielāks nekā nosacījumu skaits. Var būt gadījumi, kad vienu atbildi var izmantot vairāk nekā vienu reizi. Šādi apstākļi sarežģī iespēju uzminēt, un samazina iespēju dot pareizo atbildi, vienkārši svītrojot jau izmantotās atbildes.
2. Izvēles jautājumi. Par izvēles jautājumiem sauc tādus jautājumus, kuros audzēkņiem no diviem vai vairākiem atbilžu variantiem jāizvēlas viena vai vairākas atbildes. Šie jautājumi sastāv no divām daļām: saknes, kurā ietilpst visa atbilstošā informācija (respektīvi, jautājums), kas nepieciešama, lai uzstādītu jautājumu, un izvēles, kas sastāv no pareizajām un maldinošajām atbildēm, no kurām audzēkņiem jāizvēlas pareizā.
Sakni var formulēt trīs veidos:
1.  kā tiešu jautājumu;
2.  kā paplašinātu teikumu;
3.  kā teikumu, kurā vajag kādu daļu ievietot/ papildināt.
Visbiežāk izvēles jautājumi liek audzēkņiem izvēlēties vienu pareizo atbildi. Vairums izvēles jautājumu ir ar četrām iespējamajām atbildēm. Jo vairāk izvēles iespēju, jo lielākus sarežģījumus tas rada sastādītājam, lai gan, palielinot iespējamo atbilžu skaitu, samazinās iespēja uzminēt pareizo atbildi, pieņemot, ka maldinošās atbildes ir vienlīdz ticamas.
Pamatprincipi izvēles jautājumu sastādīšanai ir:
·     saknē ir skaidri jāformulē problēma;
·     jāizvairās no gramatiskām norādēm (laiks, skaitlis);
·     labāk, ja visām izvēles atbildēm ir vienāds garums;
·     labāk izmantot ticamas maldinošās atbildes;
·     izvairīties no “atslēgas” vārdu izmantošanas gan saknē, gan piedāvātajās atbildēs;
·     labāk izvairīties no nolieguma vai dubultā nolieguma izmantošanas.
3. Pareizās – nepareizās atbildes jautājumi. Pareizās – nepareizās atbildes jautājumi faktiski ir apgalvojumi, uz kuriem audzēkņi dod atbildi, ka tie atbilst vai neatbilst patiesībai (pareizi vai nepareizi, jā vai nē). Pareizās – nepareizās atbildes jautājumu sastādīšanas pamatprincipi ir:
·     apgalvojumu jāraksta skaidri izteikti pareizi vai nepareizi. Apgalvojums nedrīkst būt divdomīgs. Izmanīgs formulējums tikai apmāna audzēkņus un izraisa apjukumu.
·     izvairīties izrakstīt teikumus tieši no mācību grāmatas. Kad audzēkņi to atšifrē, tas varētu sekmēt vienkārši mehānisku grāmatas teksta atcerēšanos, nevis koncepciju un principu iemācīšanos.
·     izvairīties no kādām konkrētām norādēm. Apgalvojumā nevajadzētu ietvert tādas vispārīgas norādes kā visi, nekad, vienmēr, neviens.
·     izvairīties no viltīgiem jautājumiem. Dažkārt, lai sastādītu pareizās – nepareizās atbildes jautājumu nepareizo apgalvojumu, tiek izdarītas minimālas izmaiņas. Šīs izmaiņas, lai apgalvojumu pārvērstu par nepatiesu, patiešām ir ļoti nenozīmīgas.
·     neierobežot jautājumus tikai ar faktu atcerēšanos: šī jautājumu forma ir ļoti piemērota, lai novērtētu atsevišķu vārdu, datumu un terminu zināšanu. Bet ar to palīdzību var izmērīt arī daudz augstākus izzinošās sfēras līmeņus. Pielietojot nedaudz radošu pieeju, pareizās – nepareizās atbildes jautājumus no vienkāršas zināšanu pārbaudes līmeņa var pārvērst par jautājumu, kas izmēra daudz augstāka līmeņa sasniegtos rezultātus.
·     sekojot, lai pareizās – nepareizās atbildes jautājumu apgalvojumi būtu apmēram vienādi garuma un skaita ziņā. Audzēkņiem nevajadzētu dot neatbilstošus mājienus par pareizajām atbildēm, jo tas varētu traucēt, īpaši jau mazāk zinošajiem audzēkņiem izvēlieties pareizo atbildi.
·     izvairīties no pazīstamas sistēmas izmantošanas atbilžu izvēlē. Nav nepieciešams izmantot nejaušības principu jautājumu izkārtojumā, nepareizos (vai pareizos) jautājumus nevajadzētu sagrupēt kopā vienā vai vairākās testa daļās.

3. 3. Datorprogramma “Ekonomika” zināšanu kontrolei kursā
“Ievads ekonomiskajā teorijā” kā mācību procesa būtiska sastāvdaļa

1993. gadā LR profesionāli tehniskās izglītības sistēmā visās arodskolās tika ieviests jauns mācību priekšmets – “Mazā biznesa kurss”, kura mērķis ir veidot audzēkņu ekonomisko domāšanu, dodot pamatzināšanas ekonomikā un uzņēmējdarbībā. Sākot ar 1997. gadu Rīgas 13. AVS mazā biznesa kursa pasniegšana balstās uz PHARE programmas “Profesionālās izglītības reforma Latvijā” ietvaros izstrādāto mācību programmu.
“Ievads ekonomiskajā teorijā” ir viena no mazā biznesa kursa sastāvdaļām. Priekšmetam kopumā paredzētas 142 stundas, bet kursa “Ievads ekonomiskajā teorijā” apgūšanai atvēlētas 34 stundas.
Arodskolu audzēkņiem pēc pamatskolas beigšanas raksturīgs diezgan zems sagatavotības līmenis vispārizglītojošajos priekšmetos. Viņiem ir zināmas grūtības precīzi formulēt savu domu, atbildot izņemto vielu. Ekonomiskā terminoloģija lielākajai daļai no viņiem ir kaut kas jauns un tās analīze rada audzēkņiem grūtības.
Skolotājam vienmēr ir jāpatērē daudz laika, lai pārbaudītu audzēkņu zināšanas, jo tas ir darbietilpīgs process. Sevišķi labi tas redzams arodskolās, jo lielākajai daļai audzēkņu nepieciešams vairāk laika, lai noformulētu savas atbildes.
Vēl ir liela problēma tā, ka daudzi no viņiem arī uzskata, ka pats galvenais – iegūt profesiju, bet vispārizglītojošā un kultūras līmeņa paaugstināšana nav tik svarīga un tāpēc viņi vispārizglītojošos priekšmetus mācās nelabprāt.
Šādos apstākļos aktuāla kļūst problēma kā samazināt laiku zināšanu kontrolei, lai vairāk uzmanības varētu veltīt jaunās vielas izskaidrošanai un apgūtā materiāla nostiprināšanai, lai atliktu arī laiks individuālajām darbam ar audzēkņiem. Laika trūkuma dēļ pārbaudīt visu audzēkņu zināšanas mutiski par katru tēmu nav iespējams.
Mazā biznesa kursa stundās es izmantoju dažādas zināšanu kontroles metodes.
Tabula 3. 1.                                                                             Metodikas metodes
Mutiskās pārbaudes metodes
Rakstveida kontroles metodes
Pašnovērtējuma metodes
Individuālā mutiskā aptauja
Terminu diktāti
Savstarpējie mutiskie jautājumi
Īsā frontālā aptauja
Diktāts – pareizi/ nepareizi
Darbs grupās
Diskusija
Ieskaites testu veidā
Diktātu pārbaude

Radošie darbi


Uzdevumi

Tematiskais  bloks “Ievads ekonomiskajā teirojā” ir sadalīts trijās daļās:
Pēc katra bloka apguves ir ieskaite, kurā lielākā daļa jautājumu ir testa veida. Šādā zināšanu pārbaude pozitīvais ir tas, ka var ātri pārbaudīt darbus un izlikt atzīmes, bet pārbaudes formai rakstiskā testa veidā ir arī vairāki būtiski trūkumi:
1.  Tiem ir ierobežots jaunrades raksturs.
2.  Audzēkņi cenšas padalīties zināšanās par pareizo atbildi ar kaimiņu, lai gan ir izstrādāti 5 testa varianti katrai ieskaitei.
3.  Ieskaiti nokārtojušie grupu audzēkņi dalās pieredzē par saviem panākumiem ar citu grupu audzēkņiem, kuri vēl ieskaiti nav kārtojoši un daži no viņiem pēc tam mehāniski atzīmē pareizo atbildes burtu vai ciparu, nedomājot par jautājuma būtību.
4.  Pirms ieskaites ir jāsagatavo testu lapas un tomēr jātērē laiks, lai pārbaudītu darbus un izliktu atzīmes.
Šos trūkumus lielā mērā varētu novērst, izmantojot datorus, kas autamātiski apstrādā testa rezultātus. Šim nolūkam es izstrādāju lietojumprogrammu “Ekonomika”. Šai programmai testi ir sastādīti par katru tēmu. Katrā testā ir 8 jautājumi. Tāds jautājumu skaits nav izvēlēts nejauši. Pašreizējā zināšanu novērtēšanas sistēmas paredz ka novērtējumu 9 un 10 var iegūt tikai tajā gadījumā, ja audzēknis papildus strādā pie mācību programmas. Bet tā kā testi iekļauj sevī tikai tādus jautājumus, kuri ir aplūkoti mācību stundā, tad viegli būs izlikt atzīmi atkarībā no pareizo atbilžu skaita. Audzēkņi ir informēti, ka par katru pareizu atbildi viņi iegūst 1 balli. Testi attiecas uz “Atbildes izvēles jautājumi” grupu. Katram jautājumam ir 4 atbilžu varianti, no kuriem tikai viens ir pareizs.
Lietojumprogrammā “Ekonomika” atbildes nav numurētas, kas samazina priekšā teikšanas varbūtību, bet pats galvenais – atbildes sakārtojas pēc nejaušības principa. Un pat blakus sēdošie pie datora nevarēs vienoties, jo atbilžu kārtība nesakritīs. Pilnīgi izslēgt atbilžu izvēles mehānisku iespēju nevar, bet varbūtība samazinas salīdzināt ar parasto rakstveida testēšanu.
Lietojumprogramma “Ekonomika” dod iespēju pirmstestēšanu atkārtot (izlasīt) konkrētās tēmas pamattēzes, kas ir ļoti būtisks moments arodskolas audzēkņiem. Šī iespēja dod papildus pozitīvu stimulu, lai pārdomātāk izvēlētos pareizo atbildi. Vēl viens no stimuliem, lai audzēknis koncetrētos darbā, ir tas, ka rezultātus audzēknis uzzina uzreiz pēc testēšanas. Un faktiski atzīmi viņam ieliek nevis skolotājs, bet gan dators. Tas dod audzēknim pārliecību, ka skolotāja subjektivitāte audzēkņa novērtēšanā nav iespējama. Šī programma palīdz arī palielināt atzīmju blīvumu, kas arī ir pozitīvs stimuls audzēknim, jo katram būs atzīme par katru tēmu.
Lietojumprogrammas “Ekonomika” darbības pārbaude tika veikta Rīgas 13. AVS skolotājas Ligitas Lapušinskas vadībā starp otrā kursa audzēkņiem latviešu valodas apmācības plūsmā mazā biznesa kursa stundās uz datoriem 486DX2, 66Mz, RAM 16Mb Windows 95 operētājsistēmā, izmantojot tīklu.
Zināmas problēmas rada tas, ka vienlaicīgi testēties var tikai 12 audzēkņi, jo datorklase ir tikai 12 darba vietas. Tāpēc skolotājam ir jāizlemj, kā labāk organizēt darbu stundā, lai no šīs lietojumprogrammas iegūtu labumu, nevis kaitētu mācību procesam. Šī lietojumprogramma pagaidām tika izmantota eksperimenta veidā. Šis eksperiments parādīja, ka audzēkņiem ir liela ieinteresētība strādāt pie datora mazā biznesa kursa stundās.
Ka ekonomisko zināšanu kontroles sistēmas sastāvdaļa lietojumprogramma “Ekonomika” atbilst visiem sekmības diagnosticēšanas un kontroles principiem:
1. Objektivitāte. Tā izpaužas:
a) testa jautājumu saturā, kuri atbilst apgūstamajam materiālam;
b) vienādos kritērijos visiem audzēkņiem;
c) skolotāja personības nespēja ietekmēt rezultātu, jo audzēknis pats uzreiz redz savu atzīmi. Jo atzīme ir viens no galvenajiem pedagogu līdzekļiem, lai stimulētu mācīšanos, veidotu pozitīvu motivāciju. Tieši objektīvas novērtēšanas ietekmē audzēkņiem veidojas adekvāts pašvērtējums un kritiska attieksme pret saviem panākumiem.
2. Sistemātiskums. Kontrole tiek veikta visos didaktiskā procesa etapos. Testēšana ir noslēdzošais etaps. Testa jautājumi balstās ne tikai uz konkrētas tēmas materiāla, bet arī uz iepriekš apgūto.
3. Uzskatāmība. Testēšana visiem audzēkņiem notiek pēc vienādiem noteikumiem un par vienām un tām pašām tēmām. Datora izmantošana dod papildu stimulu, lai mācītos.
Lietojumprogrammas “Ekonomika” instalācijas pakete ietilpst 9 disketēs. Instalācijas procesa secība:
1.  Instalēt “Ekonomiku” serverī.
2.  Pārbaudīt vai tā strādā serverī.
3.  No apakškataloga Client instalēt “Ekonomika Client” uz audzēkņu datoriem.
4.  BDE Administrator norādīt ceļu uz tabulām, kas ir uzstādītas serverī:
Program Files\Borland\CommonFiles\BDE.
Lappusē Configuration izvēlēties Drivers – Native – Paradox un pēc tam saglabāt izvēlēto ceļu.
5.  Audzēknim jāpalaiž no servera “Ekonomika.exe”.
Pēc mācību gada beigām, ja nav vajadzības saglabāt atsevišķu audzēkņu testēšanus rezultātus, tos var izdzēst ar DataBase Desktop.
Audzēkņa darba kārtība ar lietojumprogrammu “Ekonomika”:
1.  Audzēkņi palaiž programmu no servera.
2.  Reģistrējas – izvēlas no saraksta “Grupa” savas grupas numuru un ievada savu vārdu un uzvārdu.
3.  Pēc skolotāja norādījuma atver vienu vai otru tematisko bloku.
4.  Atvērtajā logā audzēknis izvēlas nepieciešamo tēmu un ar peles klikšķi to atver.
5.  Lasa tekstu un pēc tam, nospiežot pogu “Izeja”, ekrānā parādās informatīvs paziņojums: testēties vai ne.
6.  Ja audzēknis ir izvēlējies testēties, tad parādās logs “Testēšana”.
7.  Testēšanas logā viņš izvēlas atbildes uz testa jautājumiem.
8.  Ja ir nepieciešams, viņš var atgriezties pie iepriekšējiem jautājumiem.
9.  Pēc testēšanās audzēknis saņem informatīvu paziņojumu, ka viņš var
izvēlēties – beigt testu vai atgriezties vēlreiz pie kāda no jautājumiem.
10. Informatīvajā paziņojumā izvēlējies beigt testu, testējamais nākošajā logā ierauga sava testa rezultātus.
11. Pēc iepazīšanās ar testa rezultātiem, ja viņam nav vajadzība testēties citā tēmā, viņam ir jāaizver visi logi un jāiziet no programmas.
Skolotājam nav nepieciešamība pieiet pie katra datora. Pēc grupas testēšanas vai citā viņam izdevīgā laikā skolotājs var iegūt serverī testēšanas rezultātus par visu grupu vai, ja nepieciešams, par atsevišķu audzēkni vai tēmu un par dažādu laika periodu. Pēc šiem apkopotajiem testa rezultātiem skolotājs, ja ir vajadzīgs, var izdrukāt testa atskaiti un izlikt atzīmes žurnālā. Lai to izdarītu, skolotājs izmanto administratora paroli. Ievadīšanas laukumā “Vārds, uzvārds” loga “Lietotājs” jāieraksta “Oksana Kaminska – autore” un kad parādās paroles ievadīšanas laukums, tad ir jāuzraksta parole: 15xfc16vby.

KOPSAVILKUMS

Maģistra darba gaitā, reālizējot izvirzītos uzdevumus, tika izstrādāts jauns programmprodukts ekonomisko zināšanu kontrolei kursā “Ievads ekonomiskajā teorijā” arodskolas audzēkņiem.
Tajā iekļaujās 14 HTML-faili blokā “Ekonomiskaš sistēmas” (Pielikums
Nr. 12):

1. 1.  Ekonomiskās domas vēsture.
1. 2.   Kas ir ekonomika?
1. 3.   Vajadzības.
1. 4.   Vajadzību un ražošanas klasifikācija.
1. 5.   Ekonomiskie resursi.
1. 6.   Ekonomiskās pamatproblēmas.
1. 7.   Ekonomiskās sistēmas.
1. 8.   Ekonomiskā aprite.
1. 9.   Ekonomiskās aktivitātes svārstības.
1. 10. Bezdarbs.
1. 11. Inflācija.
1. 12. Tirgus regulēšanas mehānisms.
1. 13. Specializācija.
1. 14. Nauda.

7 HTML-faili blokā “Pieprasījuma un piedāvājuma pamati” (Pielikums Nr. 13):

2. 1.Pieprasījums.
2. 2. Pieprasījuma ārpuscenas faktori.
2. 3. Pieprasījuma elastīgums.
2. 4. Piedāvājums.
2. 5. Piedāvājuma ārpuscenas faktori.
2. 6. Piedāvājuma elastīgums.
2. 7. Tirgus līdzsvars.

9 HTML-faili blokā “Ražošanas pamati” (pielikums Nr. 14):

3. 1.Biznesa ekonomiskā aprite.
3. 2. Trīs galvenie sektori ekonomikā.
3. 3. Tirgus veidi.
3. 4. Tirgus raksturojums.
3. 5. Ražošanas izmaksas.
3. 6. Pastāvīgās izmaksas.
3. 7. Mainīgas izmaksas.
3. 8. Ieņēmumi.
3. 9. Analīze.

Sameklēti un sastādīti 240 jautājumi un 960 atbilžu varianti pa četriem atbilžu variantiem katram jautājumam 30 temās kursā “Ievads ekonomiskajā teorijā” (Pieliekums Nr. 15).
Lietotāja interfeisa grafiskā projektēšana balstijas uz principiem, kurus piedāva firma Microsoft:

1.     Uzskatāmība.
2.     Viendabīgums.
3.     Iecietība pret lietotāju.
4.     Estētika.
5.     Vienkāršība.

Jautājumu, atbilžu, testa rezultātu un lietotāja uzvārdu glābāšanai tiek izveidota datu bāze, kas sastāv no četrām tabulām. Datu aizsardzība tiek realizēta ar datu pieejamības paroli administratoram un lietotājiem.
Projektēšanas gaitā tika izveidotas divas jaunas klases. Klase TNepareizaParole tika izveidota uz ārkārtas situācijas apstrādāju bāzes klases Exception pamata. Tā tiek izmantota administratora paroles nepareizas ievadīšanas gadījumā. Tādā  situācijā parādās paziņojums “Parole nav pareiza” un programmas izmantošana beigsies. Otra klase TAtbildesLabel izveidota kā klases TLabel eksemplārs, lai attēlotu jautājumu atbilžu variantus vairākās rindiņās uz komponentu Panel, kurām nav WordWrap īpašību.
Lai organizētu dialogu starp programmu un tās lietotāju tika izmantota funkcija MessageDlg, kuru piedāvā Delphi. Darbā ar lietojumprogrammu “Ekonomika” lietotājs saņem informatīvu paziņojumu, kurš, piemēram, piedāvā viņam izvēlēties – testēties vai nē, pēc tēmas izlasīšanas.
Lietojumprogrammas “Ekonomika” instalācijas pakete ir izveidota ar gatava instalātora InstallShield palīdzību un iekļauj sevī paketi serverim un klientam.
Programmas pozitīvās īpašības ir:
1.  Lietošanas vienkāršība.
2.  Pieejas pie datiem ierobežotība.
3.  Atbilžu sajaukšanās pirms nākošās testēšanās.
4.  Iespēja testēšanās gaitā vēlreiz pārbaudīt izvēlētās atbildes pareizību.
5.  Testēšanās rezultātu iegūšana uzreiz pēc tā pabeigšanas.
6.  Audzēknis var apskatīt tikai savus testa rezultātus pa visām tēmām.
7.  Ātra testu rezultātu atskaites izveidošana un izdrukāšana.
8.  Tēmu tekstu glābāšana HTML failos, kuri viegli modificējas.
9.  Jautājumu, atbilžu, testa rezultātu un uzvārdu glābāšana datu bāzē, kura viegli modificējas.
10. Nav nepieciešamība no jauna ievadīt savu uzvārdu, ja audzēknis ir jau testējies.
11. Programmas struktūru ir diezgan viegli izmantot, lai veidotu citu lietojumprogrammu zināšanu kontrolei kādā citā mācību priekšmetā.
12. Tīkla izmantošana testēšanā.
Programmas trūkumi:
1.  Lai atvērtu tabulas katrā klienta datorā tīklā, vajag norādīt ceļu uz tabulu datiem serverī.
2.  Paziņojums ‘Parole nav pareiza!” pārādās ne tikai lietotāja nepareizas reģistrācijas gadījumā.
3.  Var būt problēmas ar ekrāna izšķirtspējam.
Konstatētie trūkumi ir novēršami, bet maģistra darba ierobežotā laika dēļ, to neizdevās izdarīt.
Lietojumprogrammas “Ekonomika” mērķis nav aizstāt tradicionālo zināšanu pārbaudes sistēmu, bet gan kļūt par tās sastāvdaļu, lai palīdzētu skolotājam ātrāk veikt zināšanu kontroli.
Dotā lietojumprogramma paredzēta ne tikai mācību priekšmeta “Mazā biznesa kurss” arodskolas skolotājiem, bet arī citiem skolotājiem, kuri māca ekonomikas pamatus.
Lietojumprogramma “Ekonomika” aprobēta Rīgas 13. AVS (Pielikums Nr. 16).

Literatūras saraksts

1.  Babanska J. redakcijā. Pedagoģija. – R.: Zvaigzne, 1987. – 509 lpp.
2.  Бард Т. Объектно-ориентированное программирование в действии. – СПб.: Питер, 1997. – 464 с., ил.
3.  Bikse V. Ekonomikas pamatprincipi. Testi. – R.: Zvaigzne ABC, 1998. – 160 lpp.
4.  Bikse V. Tirgus ekonomikas pamati. I daļa. – R.: Mācīdu Apgāds, 1995. – 108 lpp.
5.  Bikse V. Tirgus ekonomikas pamati. II daļa. – R.: Mācību Apgāds, 1996. – 108 lpp.
6.  Biznesa pamati. Eksperimentāla mācību grāmata. – R.: Raka, 1998.
7.  Ekonomika un ārējās tirdzniecības pamati. Mācību līdzeklis. – R.: Jumava, 1997. – 75 lpp.
8.  Ekonomika. Mācību līdzeklis. – R.: Jumava, 1996. – 112 lpp.
9.  Федоров А. Г. Delphi 3.0 для всех. – М.: Компьютер Пресс, 1998. – 544 с.
10. Krieviņš V. Mājsiamniecības ekonomika. – R.: Raka, 1997. – 212 lpp.
11. Krieviņš V. Ekonomikas pamatkurss. – R.: Raka, 1996. – 105 lpp.
12. Krūmiņa I. Zināšanu testi ģimnāzijā //Skolotājs, 5/97.
13. Макконелл К. Р., Брю С. Л. Экономикс: Принципы, проблемы и политика, в 2 т. Т. 1.
14.Ларсон Майкл А. Создание Web-страниц с помощью Microsoft Office 97. – М.: 1998. – 480 с: ил.
15.Мак-Клеланд Д.. Филипс Р. Photoshop 3 для Windows 95. Библия пользователя. – К.: Диалектика, КОМИЗДАТ

Nav komentāru:

Ierakstīt komentāru