VILNIAUS PEDAGOGINIS UNIVERSITETAS

MATEMATIKOS IR INFORMATIKOS FAKULTETAS

INFORMATIKOS KATEDRA

Arnoldas Judinas

C# ir VB.NET palyginimas taikomųjų programų kūrimo požiūriu

Magistro baigiamasis darbas

Darbo vadovas – prof. dr. (HP) V. Slivinskas Recenzentas – doc. dr. G. Melničenko

Vilnius, 2010 Patvirtinimas

Aš, Arnoldas Judinas, Vilniaus pedagoginio universiteto Matematikos ir informatikos fakulteto Informatikos magistrantūros studentas, patvirtinu, kad šį mokslinį darbą rašiau savarankiškai.

...... Data Parašas

2

Turinys

Patvirtinimas...... 2 Turinys ...... 3 Įvadas ...... 4 Lyginimo kriterijai ...... 4 Hipotezės ...... 4 Darbo uždaviniai ...... 4 1. Taikomoji programinė įranga ...... 5 2. .NET karkasas...... 6 3. C# ir VB.NET kalbų aprašas ...... 9 3.1. Visual Basic .NET ...... 9 3.2. C# ...... 10 3.3. Kalbų privalumai ...... 12 3.3.1. VB.NET kalbos privalumai ...... 12 3.3.2. C# kalbos privalumai ...... 13 4. C# ir VB.NET kalbų istorija ...... 14 4.1. Visual Basic ir Visual Basic .NET kalbų istorija ...... 14 4.2. C# istorija ...... 19 5. C# ir VB.NET kalbų sintaksė ...... 20 5.1. Raktiniai žodžiai ...... 20 5.2. Raktiniai žodžiai, išrikiuoti pagal abėcėlę ...... 23 5.3. Kalbų duomenų tipai ...... 26 5.4. Operatorių skirtumai ...... 27 5.5. Elementarūs kodo fragmentai...... 28 5.5. C# ir VB.NET kodo fragmentai ...... 33 6. Programavimo eksperimentai ...... 37 6.1. Programų kūrimo aplinka ...... 37 6.2. Matematinių ir įvesties/išvesties operacijų spartos palyginimas...... 42 6.3. Householderio transformacija ...... 47 7. Rezultatai ...... 51 8. Išvados ...... 51 Priedas 1. Terminų žodynas ...... 52 Priedas 2. .NET kalbos ...... 75 Literatūros šaltiniai ...... 83 Anotacija ...... 85 Santrauka ...... 86 Summary ...... 87

3 Įvadas

Darbe nagrinėjamos įvairiais požiūriais lyginamos dvi populiarios Microsoft kompanijos kalbos: VB.NET ir C#.

Lyginimo kriterijai

Lyginimo kriterijai: • C# ir VB.NET kalbų istorija. Kas yra bendro tarp jų? • Sintaksės panašumai/skirtumai. • Vykdomo kodo greitaveika šiose srityse: o matematinės operacijos; o įvesties/išvesties operacijos;.

Hipotezės

Buvo iškeltos tokios hipotezės: • taikomųjų programų kūrimo galimybės yra panašios; • integruotos kūrimo aplinkos (IDE) vartotojo sąsaja toks pats, Windows Forms, meniu, mygtukai ir kiti įterpiami valdymo elementai; • kodo, parašyto C# kalba, vykdymo greitis, lyginant su kodu, parašytu Visual Basic .NET kalba bus: o didesnis vykdant matematinius skaičiavimus; o toks pat, vykdant įvesties/išvesties operacijas.

Darbo uždaviniai

Siekiant tikslo, reikia atlikti šiuos uždavinius: • apibrėžti svarbią sąvoką „taikomoji programa“; • apibūdinti Microsoft .NET platformą; • atlikti abiejų kalbų istorinę apžvalgą; • palyginti kalbų sintaksę; • atlikti programuotojo aplinkos analizę; • eksperimento metu nustatyti C# ir VB.NET vykdomo kodo greitaveiką.

4 1. Taikomoji programinė įranga

Šio darbo esmė – dviejų programavimo kalbų analizė taikomųjų programų kūrimo požiūriu. Norint tai daryti, būtina apibrėžti (kiek tai įmanoma) taikomosios programinės įrangos sąvoka. Tai galima padaryti lyginant taikomąją PĮ su sistemine PĮ. Toliau vartosiu sąvokos „programinė įranga“ sinonimą – „programa“. Sisteminės programos skirtos užtikrinti sklandų kompiuterio ir taikomųjų programų darbą [7]. Tiesioginio rezultato vartotojui jos neduoda. Sisteminių programų pavyzdžiai: • operacinė sistema (pvz., FreeBSD, Windows XP); • tvarkyklė (angl. driver , pvz., grafinės plokštės tvarkyklė); • kietų diskų skaidymo programa (pvz., Partition Logic); • kietų diskų defragmentavimo programa (pvz., UltraDefrag); • antivirusinė programa (pvz., Avira AntiVir). Taikomosios programos skirtos vykdyti tam tikras užduotis, susijusias su žmonių veikla. Jos sąveikauja tiesiogiai su vartotoju. [8] Paprastai taikomosios programos negali tiesiogiai prieiti prie kompiuterio resursų ir sąveikauja su aparatine įranga per sistemines programas. Taikomųjų programų pavyzdžiai: • tekstų apdorojimo programa (pvz., Microsoft WordPad); • skaičiuoklė (pvz., Microsoft Excel); • elektroninio pašto programa (pvz., Microsoft Outlook, Eudora); • naršyklė (pvz., Opera, Chrome); • buhalterinės apskaitos programa (pvz., Rivilė) • integruota kūrimo aplinka (pvz., Dev-C++); • nuotraukų ir grafikos peržiūros arba apdorojimo programa (pvz., GIMP); • programa, atkurianti įvairius skaitmeninius įrašus (pvz., WinAmp, GomPlayer); • žaidimas (pvz., Tetris);

5 2. Microsoft .NET karkasas

Microsoft .NET karkasas (angl. framework ) – programinis karkasas, skirtas taikomųjų ir tinklo programų kūrimui. .NET yra patentuota Microsoft kompanijos technologija, tačiau po susitarimo su kompanija Novell technologija buvo pripažinta kaip .NET platformos realizacija Unix tipo operacinėse sistemose. Ko gero, svarbiausia idėja, realizuota .NET karkase – modulių, parašytų skirtingomis programavimo kalbomis, suderinamumas. Pvz., kodas, parašytas C++ kalba .NET karkase, gali kreiptis į klasės, parašytos Delphi, metodą. Kiekviena .NET biblioteka turi duomenis apie savo versiją, tokiu būdu galima išvengti versijų nesuderinamumo problemos. NET programų kūrimo terpės (plačiau žr. straipsnį „IDE“ terminų žodyne): • Microsoft Visual Studio; • SharpDevelop; • MonoDevelop; • Elipse; • Borland Developer Sturio (kalbos: Delphi for .NET, C#); Programas galima kurti ir bet kokiame tekstų doroklyje, naudojant konsolinį kompiliatorių. Panašiai kaip Java technologijoje, .NET terpė sukuria bait-kodą, skirtą vykdyti virtualioje mašinoje, kuri vadinasi CLR (angl. ). Bait-kodo naudojimas leidžia turėti daugiaplatformiškumą. .NET programų rašymo ir vykdymo procesas vyksta taip: • kodo rašymas viena iš .NET kalbų; • parašyto kodo transliavimas į virtualios mašinos įeities kalbą – bait-kodą, kuris vadinama MSIL (angl. Microsoft Intermediate Language ) arba vėlesniu pavadinimu CIL (angl. Common Intermediate Language ); • CIL kodas iškart prieš taikomosios programos paleidimą transformuojamas į mašininį kodą specialiu JIT (angl. Just-in-time) kompiliatoriumi; • gautas mašininis kodas vykdomas aparatiniame procesoriuje;

6 Taip pat yra galimybė pačiam sukompiliuoti CIL kodą į mašininį, pasinaudojus programa NGen.exe (pvz., jeigu manoma, kad kompiuteryje, kuriame bus vykdoma parašyta programa, nebus instaliuotas .NET karkasas).

Pav. 1. .NET platforma

.NET karkaso savybės: • Common Language Runtime - .NET karkaso virtuali mašina. Visos .NET programos vykdomos esant CLR kontrolei. Užtikrinamas tam tikras programų elgesys (operatyvios atminties valdymas, saugumas, išimčių apdorojimas). • Base Class Library – biblioteka, prieinama visoms .NET kalbomis parašytoms programoms, Framework Class Library dalis. BCL sudėtyje yra klasės, kuriose yra dažnai naudojamos funkcijos (operacijos su failais, grafinės funkcijos, darbas su duomenų bazėmis, darbas su XML dokumentais).

7 • Atgalinis suderinamumas, kuris leidžia .NET terpėje sukurtoms programoms bendrauti su senesnėmis programomis. Suderinamumą užtikrina šios .NET dalys: o System.Runtime.InteropServices, suteikianti prieigą prie COM (Component Object Model, dvejetainis programų tarpusavio saveikos standartas, atsiradęs 1993 m.); o System.EnterpriseServices taip pat suteikianti prieigą prie COM; o Platform Invocation Services (dažnai trumpinama kaip P/Invoke), kuri leidžia valdomam kodui kreiptis į mašininį kodą. • Kalbų nepriklausomumas. .NET karkasas pristato Common , sutrumpintai – CTS. CTS specifikacija apibrėžia visus įmanomus duomenų tipus ir programines konstrukcijas, kurias palaiko CLR. Taip pat CTS specifikacija nustato būdus, kaip programinės konstrukcijos gali komunikuoti tarpusavyje (būdai atitinka Common Language Infrastructure specifikaciją). Dėl kalbų nepriklausomumo .NET karkase kodas, parašytas viena karkasui priklausančia kalba, gali bendrauti su kodu, parašytu kita karkasui priklausančia kalba (pvz., kreiptis į modulius). .NET programavimo kalbų sąrašas yra pateiktas 2-ame priede. • Saugumas. Kuriant .NET platformą, buvo atsižvelgta į tai, kad kai kurios programavimo klaidos (pvz., sukeliančios buferio perpildymą) išnaudojamos kenksmingomis programomis. Be to, .NET suteikia bendrą saugumo modelį visoms taikomosioms programoms. • Pernešamumas. Teoriškai .NET karkasas leidžia būti nepriklausomiems nuo operacinės sistemos. Kitaip tariant, programa, sukurta karkase, turėtų būti vykdoma be jokių pakeitimų bet kur, kur yra .NET karkaso realizacija. Tačiau pati Microsoft kūrė šį karkasą tik savo Windows OS šeimai. Iš kitos pusės, Microsoft kompanija pateikė Common Language Infrastructure (kuri susideda iš branduolio bibliotekų, ir Common Intermediate Language) bei C# kalbos specifikacijas standartizavimu užsiimančioms organizacijoms ECMA ir ISO, tokiu būdu padarydama išvardintas technologijas atvirais standartais. Tai leidžia trečioms šalims kurti savo .NET karkaso realizacijas.

8 3. C# ir VB.NET kalbų aprašas

3.1. Visual Basic .NET

Visual Basic .NET (sutrumpintai – VB.NET) – objektiškai-orientuota programavimo kalba, į kurią galima žiūrėti kaip į Visual Basic kalbos evoliucinį darinį. Kalba realizuota Microsoft .NET platformoje. VB.NET ne turi atvirkštinio suderinamumo su ankstesne versija – Visual Basic 6.0. Senųjų projektų (su plėtiniu *.vbp) plėtojimas galima tik po konvertacijos į VB.NET formatą naudojant specialų įrankį, kuris vadinamas Migration Wizard. Tačiau po konvertacijos reikalingas nemažas išeities tekstų koregavimas. Pokyčiai lyginant su VB 6.0, realizuoti VB.NET kalboje: • objektiškai-orientuoto programavimo koncepcijų palaikymas: konstruktoriai, destruktoriai, paveldimumas, metodų perkrova ir kt. (yra netgi operacijų ženklų perkrova); • kompiliacija į bait-kodą (angl. Intermediate Language ), kuris vykdomas virtualioje mašinoje Common Language Runtime (CLR); • viso objektinių bibliotekų rinkinio, įeinančio į .NET Framework, naudojimas, įskaitant galingus įrankius, skirtus darbui su formomis (Windows Forms), duomenų bazėmis (ADO.NET), grafika (GDI+), taip pat saugumo įrankių ir ASP.NET (darbas su tinklalapiais) naudojimas; • daugiagijiškumo palaikymas; • struktūrinio išimčių apdorojimo (angl. structurized exception handling ) palaikymas. Naujausia VB.NET versija – 10.0. Kodo, parašyto šia kalba, pavyzdys pateiktas 1- ame pav.

9

Pav. 2. VB.NET kodo pavyzdys

3.2. C#

C# (tariama „si-šarp“) – objektiškai-orientuota programavimo kalba, kuri pirmąkart buvo išleista 2001 m. Šiuo metu egzistuoja 4.0 kalbos versija. Ji atsirado išleidus integruotą kūrimo aplinką Visual Sturio 2010. Simbolį „#”, vadinamą oktotorpu, galima interpretuoti kaip dvi pliusų poras (++ ir ++), kurios pratęstų grandinę C, C++, C++ ++ (C#). Ko gero, siekiama parodyti tolesnį kalbos progresą, lyginant su jos pirmtakais. C# kodo pavyzdys pateiktas pav. 2. C# kalba palaiko: • statinę tipizaciją (žr. „tipizacija“ terminų žodyne); • operatorių perkrovą; • delegatus; • atributus; • įvykius; • savybes; • apibendrinto programavimo paradigmą (angl. ); • iteratorius; • anonimines funkcijas; • LINQ; • komentarus XML formatu. C# kalbos kūrėjus įtakojo šios programavimo kalbos:

10 • C++; • Java; • Delphi (arba Object Pascal); • 2; • Smalltalk. C# kalba įtakojo šias programavimo kalbas: • F#; • Nemeile; • Vala; • Windows PowerShell. C# buvo kuriama kaip taikomoji programavimo kalba CLR aplinkai (plačiau žr. straipsnį „ Common Language Runtime “ terminų žodyne), todėl kalbos galimybės priklauso nuo šios kalbos galimybių. Labiausiai tai liečia tipų sistemą, kuri atspindima Base Class Library bibliotekos. Tam tikrų elementų buvimas ar nebuvimas C# kalboje priklauso nuo galimybės transliuoti kalbos elementus į atitinkamas CLR konstrukcijas. Būtent dėl šios priežasties C# kalbos galimybės prasiplėtė, kai CLR aplinkos versija pakilo nuo 1.1 iki 2.0. CLR aplinka suteikia C# kalbai savybių, kurių neturi “klasikinės” programavimo kalbos. Pvz., šiukšlių surinkimas (nenaudojamas, bet ir neatlaisvintos operatyvios atminties naudojimas) nėra realizuotas pačioje kalboje, tačiau vykdoma CLR aplinkos, kuri tą patį daro ir VB.NET, ir J#, ir kitoms .NET platformos kalboms. C# kalba buvo standartizuota dviejose organizacijose: ECMA ir ISO. Yra kelios nepriklausomos C# kalbos realizacijos, kurios remiasi paskelbtomis specifikacijomis (šios realizacijos yra vystymosi stadijoje): • Mono. Projektas pradėtas Ximian kompanijoje ir tęsiamas kompanijoje Novell (atviro kodo). • dotGNU ir Portable.NET, kurie kuriami organizacijoje Free Foundation (atviro kodo). • SharpDevelop (atviro kodo). • DotNetAnywhere, skirta įvairiems įtaisams.

11 3.3. Kalbų privalumai

3.3.1. VB.NET kalbos privalumai

VB.NET kalbos privalumai pagal [5]): • Parametrų palaikymas, kuris įgalina patogų COM (angl. Component Object Model ) naudojimą. COM yra technologinis Microsoft kompanijos standartas, skirtas kurti programinę įrangą, kuri remiasi komponentais, kuriuos gali naudoti kelios programos vienu metu. • Vardinių indeksų (angl. named indexers ) palaikymas. • Įvairios legacy VB funkcijos (kurie pateikti Microsoft.VisualBasic vardų erdvėje (angl. namespace ), ir gali būti naudojamos kituose kalbose, nurodant Microsoft.VisualBasic.dll biblioteką). Tačiau daugelis jų gali sumažinti greitaveiką (jei bus naudojamos neapdairiai), be to, manoma, kad jų dažniausiai reiktų vengti. • „with“ konstrukcija: diskutuotinas dalykas, ar tai privalumas, ar trūkumas. • Paprastesnis (galbūt kiek sunkesnis supratimo požiūriu) įvykių apdorojimas. Metodas gali būti apibrėžtas kaip metodas, apdorojantis įvykį (nereikia specialaus metodo, vadinamo handler). • Galimybė realizuoti interfeisus naudojant metodus, kurių vardai skirtingi (tačiau ši ypatybė apsunkina duotojo interfeiso realizacijos suradimą). • Catch ... When ... sakiniai, kurie įgalina filtruoti išimtis remiantis vykdymo metu suformuotomis išraiškomis (angl. runtime expressions ), o ne remiantis tik išimčių tipais. • VB.NET kodo dalys jūsų Visual Studio .NET projekte kompiliuojamos foninio proceso metu. Mažiems projektams tai laikoma privalumu, tačiau žmonės, dirbantys su labai dideliais projektais, pastebi ženklų IKA (integruotos kūrimo aplinkos, angl. Integrated Development Environment , žr. straipsnį terminų žodyne) sulėtėjimą.

12 3.3.2. C# kalbos privalumai

Yra du svarbiausi C# kalbos privalumai: • populiarumas (žr. pav. 3) • standartas de-facto tarp Microsoft programavimo kalbų, skirtų kurti taikomąsias programas (ne web)

Pav. 3. Kalbų populiarumas [13]

13 4. C# ir VB.NET kalbų istorija

4.1. Visual Basic ir Visual Basic .NET kalbų istorija

Nors iš pradžių buvo Visual Basic buvo kurtas kaip savotiškas programavimo žaislas, ši programavimo kalba gana greitai išsikovojo nemažą populiarumą. Šis populiarumas sąlygotas santykiniu paprastumu ir produktyvumu. Programos, parašytos Visual Basic kalba veikia lėčiau nei C/C++ analogai, bet vis tiek jos yra pakankamai greitos, tuo labiau kad tų programų kūrimas reikalauja žymiai mažiau laiko. [1] Formos (nepainioti su Windows Formomis, kurios atsirado žymiai vėliau!) buvo taupanti pastangas abstrakcija, kurią pasaulio programuotojams pasiūlė programuotojai iš Microsoft kompanijos. VB IDE leido kurti langus grafiniu būdu, pertempiant iš instrumentų srities tokius valdymo elementus kaip mygtukai ar sąrašai (toks pertempimo būdas angl. vadinamas drag-and-drop ). Gavęs jo žvilgsnį tenkinančią formą, programuotojas galėjo pereiti prie kodo ir rašyti įvykių, susijusių su kiekvienu valdymo elementų, apdorojimo algoritmus. Tokiu būdu taikomųjų programų Visual Basic kalba kūrimas susidėjo iš kelių formų sukūrimo, kurios bendravo tarpusavyje ir, galbūt, kreipėsi į tam tikrą duomenų bazę. Formos leido naudoti langų privalumus žymiai patogesniu būdu. Visual Basic sumažino klaidų skaičių, pašalindamas kai kuriuos paslėptus C/C++ sintaksės elementus. Išskyrus ypatingus atvejus, reiškiniai aprašymas apsiribodavo viena kodo eilute, o kintamieji turėjo būti deklaruojami ir inicializuojami atskirose kodo eilutėse. Priskyrimo ir lyginimo operatoriai naudojo tą patį simbolį, tačiau Visual Basic kalbos gramatika reikalavo, kad šie operatoriai būtų naudojami taip, kad programuotojo ketinimai būtų visiškai aiškūs. Galima daiktas, kad svarbiausias dalykas, esantis VB – rodyklių nebuvimas. Jų nebuvo pradedant nuo pirmų Microsoft BASIC versijų. Nors rodyklės yra naudingos, nes įgalina pasiekti bet kurią atminties ląstelę, tačiau neatsargus rodyklių naudojimas susijęs su nemažais pavojais. Gramatinio paprastumo reikalavimas BASIC kalboje prasideda nuo šios kalbos pavadinimo: Beginner‘s All-purpose Symbolic Instructional Code (Daugiatikslis simbolinis komandų kodas pradedantiesiems).

14 Šestos versijos Visual Basic tampa galinga kalba, kuria galima rašyti paskirstytų skaičiavimų programas, naudojant komponentus COM ir Microsoft Transaction Server. Microsoft kompanija pasiūlė trijų lygių koncepciją architektūrai „klientas-serveris“, kurioje „plonieji“ (angl. thin ) vartotojų interfeisai tarpininkavo su nutolusiais VB komponentais tam, kad gautų duomenis iš duomenų bazės ar iš kito kompiuterio. Pradedant 5-ąja VB versija, VB programos yra kompiliuojamos į mašininį kodą, tačiau jos buvo pagrįstos DLL naudojimu. Įdomu tai, kad VB kompiliatorius transliavimui naudoja daugiapakopį režimą, be to, po tarpinio kodo konvertavimui į mašininį naudoja kompiliatorių Microsoft C++. Šioje Visual Basic savybėje (DLL naudojimas ir C++ vidinio interfeiso naudojimas) matomos .NET užuomazgos. Tačiau VB turi ne vieną trūkumą. Patyrę programuotojai dažnai stebisi, kad kai kuriuos dalykus (pvz., daugiagijiškumą, angl. multithreading) Visual Basic‘e realizuoti ganėtinai nelengva. Parašytos ištisos knygos apie tai, kaip priversti Visual Basic kalbą daryti sudėtingus dalykus, kuriuos be problemų parašytų C programuotojai. Pvz., pranešimų, siunčamų iš operacinės sistemos į VB Windows-formas, eilės peržiūra (angl. hooking ). Kadangi programos Visual Basic kalba remiasi vykdymo terpe (kaip ir Java kalba), jos vykdomos lėčiau, nei programos C kalba, be to, jų vykdymui kompiuteryje turi būti VB vykdymo aplinkos komponentai. Programavimo kalba Basic buvo sukurta 1964 m. dviejų profesorių iš Dartmouth College. Tai buvo John Kemeny ir Thomas Kurtz. Savo kalbą jie skyrė studentams mokyti. Kalba gavosi tokia paprasta ir suprantama, kad po kurio laiko pradėta naudoti ir kitose mokslo įstaigose. 1975 m., prasidėjus mikrokompiuterių erai, estafetę perėmė Bill Gates ir Paul Allen, Microsoft kompanijos įkurėjai. Būtent jie sukųrė naują Basic kalbos versiją pirmiems MITS Altair kompiuteriams, sugebančią dirbti 4 kilobaituose operatyvios atminties. Laikui bėgant, ši Basic kalbos atmaina tapo viena populiariausių kalbų pasaulyje [6]. Įdomu, kad nors buvo įvarių Basic versijų - GW-Basic, kuris buvo vienas iš standartų IBM PC tipo kompiuteriuose, Turbo Basic, QuickBasic, Basic PDS – kuriant naują kalbos versiją visada stengtasi išsaugoti suderinamumą su ankstesnėmis kalbos versijomos. Programa, parašyta pirmai Basic versijai, su nežymiais pakitimais (arba visai be jų) galėtų veikti vėlesnėse kalbos versijose. Tačiau kai 1990-ais metais atiranda operacinė sistema 3.0, pateikusi naują grafinę vartotojo sąsają,

15 programuotojų darbas tapo sudėtingesnis. Tam, kad sukurt paprastą programą, reikėdavo prirašyti ne vieną puslapį kodo: kurti meniu ir programos langą, keisti šriftus, valyti atmintį, „paišyti“ mygtukus. Nepaisant visko, naujo grafinio vartotojo interfeiso privalumai buvo tokie akivaizdūs, kad trečioji OS Windows versija tapo standartu asmeniniuose kompiuteriuose [6]. Tuo metu Microsoft viduje lygiagrečiai buvo vykdomi keli projektai, susiję su nauja kalba, kuri turėjo įsigalėti Windows OS terpėje. 1991 gegužę pasaulį išvydo vienas iš tokių projektų – nauja kalba, pavadinta Visual Basic. Programavimo sistema, sukurta Visual Basic kūrėjų, leido atsiriboti nuo sudėtingos langų struktūros ir kurti programas tarsi vaikiškame konstruktoriuje, iš atskirų elementų. Savo pirmą programą VB programuotojai sukurdavo po kelių minučių nuo kalbos pažinimo momento. Dar daugiau: Visual Basic leido programų plėtotojams kurti naujus elementus („konstruktoriaus elementus“), kurie galėjo būti naudojami programose taip pat kaip ir standartiniai. Ši Microsoft sukurta programavimo kalba dar labiau išpopuliarėjo 1994 m., po Visual Basic for Applications išleidimo. Būtent tuo metu, po VBA įtraukimo į Microsoft Office paketo sudėtį, Basic tapo standartu de-facto Windows operacinių sistemų terpėje. Vėliau buvo pildomos kalbos galimybės: OLE, DAO, JET, 32-jų bitų architektūra. Paskutinės kalbos versijos buvo tokios sėkmingos, kad jų pagrindu galima buvo kurti bet kokio sudėtingumo programas: buvo įtrauktas atšaukimo (angl. callback ) funkcijų palaikymas, puikus klaidų aptikimo modulis (žr. „derintuvas“ temrinų žodyne), bibliotekos DirectX palaikymas ir t.t. Pagrindiniu Visual Basic kalbos sėkmės faktoriumi buvo programų vykdymas, pagrįstas įvykiais ir jų apdorojimu. Būtent tokia schema leidžia pamiršti apie tai, kas vyksta už programos ribų ir apie tai, kaip programa bendrauja su operacine sistema. Visual Basic komponentai, atsakydami į vartotojo veiksmus, generuoja įvykius, o programos logika juos apdoroja. Tokia paprasta koncepcija sąlygojo tai, kad pradedantieji programuotojai nesunkiai įvaldydavo Visual Basic pagrindus. Tačiau VB nebuvo objektiškai orientuota kalba, ir buvo aišku, jog anksčiau ar vėliau bus permainų. 2002 m. vasario 13-ą dieną konferencijoje VSLive San-Francisko mieste Microsoft pristatė .NET Framewor platformą ir naują programavimo aplinkos Visual Studio versiją Visual Studio .NET nebuvo eiline populiarios programavimo aplinkos versija, tai buvo revoliucinė naujovė. .NET Framework – tai naujos kartos taikomųjų

16 programų vykdymo aplinka, kuri gali būti įdiegta į visas Windows OS versijas, pradedant nuo Windows 98. .NET Framework pagrįstas virtualia vykdymo sistema (angl. ). Taikomųjų programų, sukurtų .NET Framework terpėje pagrindinė ypatybė – programos sudarytos ne iš x86 procesorių šeimos instrukcijų, o iš virtualios mašinos instrukcijų, parašytų Microsoft Intermediate Language (MSIL) kalba. .NET Framework savo sudėtyje turi JIT kompiliatorių. Esant pirma kreipimuisi į programą, JIT kompiliatorius ne vykdo viso MSIL kodo, o kompiliuoja kiekvieną atskirą metodą, į kurį kreipiamasi programos vykdymo metu. Sukompiliuotas kodas saugomas atmintyje, ir sekantys kreipiniai į programą vykdo jau tą paruoštą vykdymui kodą. Būtent dėl šios priežasties esant pirma kreipiniui į programą pastebima kelių sekundžių pauzė tarp programos paleidimo ir jos vykdymo pradžios. Kai kas tai vadina rimtu .NET platformos trūkumu, bet mano nuomone, taip nėra, tuo labiau, kad Microsoft suteikia specialų kompiliatorių CLR Native Image Generator (NGEN), kuris vykdo viso programos MSIL kodo kompiliavimą ir išsaugo rezultatą kietajame diske. .NET Framework yra plati ir sąlyginai paprastos struktūros biblioteka, kurios pagrindu galima kurti rimtas taikomąsias programas. Kas svarbu – tai pilnai objektiškai- orientuota biblioteka. Kaip mano Microsoft ideologai, po tam tikro laiko .NET taps daugumos Windows OS programų pagrindu ir, galiausiai, turėtų pakeisti taikomųjų programų (angl. API , Application Programming Interface ) interfeisą. Taip pat Microsoft žada, kad Visual Studio.NET visada bus atvira trečioms šalims pagalbinių instrumentų gamybos prasme (remiantis Open Tools platform technologija). Kadangi .NET Framework – pilnai objektiškai-orientuota platforma, o Visual Basic kalba niekada tokia nebuvo, tai koncepcijos pakeitimas pareikalavo rimtų kalbos pakeitimų, kurie sąlygojo tai, jog dabar jau nebėra visiško (arba beveik visiško) suderinamumo su ankstesnėmis kalbos versijomis. Kitaip tariant, iš esmės turime naują programavimo kalbą – Visual Basic .NET. [6] Visual Basic .NET naudoja visiškai naujas formas – Windows Forms. Windows Forms beveik pilnai suderinamos su Visual Basic 6 formomis, tačiau esama kelių esminių skirtumų:

17

• Windows Forms nepalaiko valdymo elemento OLE container control; • nėra valdymo elementų Shape ir Line; • Windows Forms turi du valdymo elementus, realizuojančius meniu – MainMeniu ir ContextMenu; • Windows Forms nepalaiko dinaminio duomenų apsikeitimo (DDE); • nėra metodo Form.PrintForm; • .NET hierarchijoje yra pagerintas objektas Clipboard (System.WinForms.Clipboard), suteikiantis daugiau funkcionalumo bei palaikantis didesnį formatų skaičių, nei Visual Basic 6 objektas Clipboard; • Windows Forms neturi savybės Name (formoms ir kontroliniams elementams), todėl visų formų (ar kontrolinių elementų) perrinkimas ieškant elemento su reikiamu vardu neveiks; • reikia naudoti pixel vietoj twip ; • Windows Forms palaiko tik truetype ir opentype šriftus. Apskritai, Windows Forms suteikia programuotojui dideles galimybes. Pvz., anksčiau tokia operacija kaip programos ženkliuko įdėjimas į systray (esantį OS Windows dešiniajame apatiniame kampe) reikalavo nemažų pastangų, o atsiradus VB.NET ši operacija tapo pastebimai paprastesnė. Microsoft kompanija, suprasdama, kad migracijos į VB.NET procesas bus sudėtingas, sukūrė specialų įrankį, skirtą projektų transformacijai. Tačiau praktika parodė, kad kokybiškai konvertuoti į VB.NET galima tik klases (kitaip tariant, kodą). Projektų, turinčių formas (Form), konvertacija iš Visual Basic 6 greičiausiai nepavyks. Kodėl gi tas konvertavimo įrankis veikia taip blogai? Esmė ta, kad kokybiška projektų transformacija atlikti neįmanoma, nes radikaliai pasikeitė formos (Form), tapusios Windows Forms iš bibliotekos .NET Framework.

18 4.2. C# istorija

Sukurta 1998-2001 m. Microsoft kompanijoje kaip pagrindinė taikomųjų programų kūrimo kalba .NET platformai. Inžinerių grupei vadovavo Anders Hejlsberg. Šis danų programuotojas buvo prie Turbo/Borland Pascal IDE ištakų. Iki 1996 m. Hejlsberg buvo vyriausias kompanijos Borland inžinierius, kurioje Pascal‘io pagrindu sukūrė naują programavimo kalbą – Delphi. 1996 m. jis perėjo dirbti į Microsoft, kur dirbo su tokiais projektais kaip J++ ir Windows Foundation Classes. Vėliau tapo C# kalbos projektavimo ir kūrimo grupės lyderiu [27]. C# kalbos kūrėjai neišradinėjo dviračio. Jie paėmė gerąsias, laiko patikrintas kitų populiarių kalbų savybes [26, 27]. Šios kalbų pavadinimai yra pažįstami bet kuriam iš informatikų: • C; • C++; • Java. Dauguma pasaulio programuotojų išmano bent vieną kalbą iš pateikto sąrašo (o neretai ir visas). Perėjimas nuo bet kurios iš minėtų kalbų prie C# nebus jiems sudėtingas. Trumpai C# programavimo kalbos ryšį su minėtomis kalbomis galima apibūdinti taip: • objektinį modelį ji paėmė iš C++ kalbos; • sintaksės, raktinių žodžių, operatorių prasme ji artima C kalbai; • pernešamumo prasme C# panaši į Java kalbą (abiejų kalbų kodai vykdomi virtualioje mašinoje). Savaime suprantama, C# kalba turi ir inovacijų. Ko gero, pati svarbiausia C# kalbos savybė – galimybė dirbti daugiakalbėje aplinkoje (.NET platformos palaikomų kalbų sąrašą žr. 2-ame priede). C# kalbos alfa-versija pasirodė 2000 m. viduryje. 1.0 kalbos versija išvydo pasaulį 2001 m. 2010 m. balandžio mėn pasirodė naujausia kalbos versija - 4.0.

19 5. C# ir VB.NET kalbų sintaksė

5.1. Raktiniai žodžiai

Lentelė 1. Retesni VB.NET ir C# raktiniai žodžiai Paskirtis VB.NET C# Kintamojo apibrėžimas Private , Public , Friend , declarators (keywords Protected , Static1 , include user-defined types Shared , Dim and built-in types) Vardinės konstantos Const const apibrėžimas Naujo objekto sukūrimas New , CreateObject() new Funkcija/metodas be Sub void reikšmės grąžinimo Funkcijos arba metodo Overloads nieko naudoti nereikia perkrovimas (Visual Basic’e: procedūros arba metodo) Pateikti nuorodą į duotą Me this objektą Nevirtualus kreipimasis į MyClass nėra duotojo objekto virtualų metodą Simbolio išgavimas iš eilutės GetChar Function [] Sudėtinės duomenų Structure End struct , class , interface struktūros apibrėžimas Structure (Visual Basic‘e: Structure) Objekto inicializavimas Sub New() Konstruktoriai, arba (konstruktoriai) konstruktoriai pagal nutylėjimą Tiesioginis objekto nėra nėra sunaikinimas Metodas iškviečiamas prieš Finalize destructor „šiukšlių surinkimą“ Kintamojo inicializavimas Dim x As Long = 5 // inicializacija: apibrėžimo metu Dim c As New _ int x = 123; // arba naudoti Car(FuelTypeEnum.Gas) // konstruktorių // pagal nutylėjimą: int x = new int(); Funkcijos adreso gavimas AddressOf (Klasės nariams delegate šis operatorius grąžina nuorodą į funkciją (deleguotos esybės pavidalu)

20 Paskirtis VB.NET C# Objekto asinchroniško nėra volatile modifikavimo apibrėžimas Priverstinis kintamųjų Option Explicit nėra (visi kintamieji turi būti apibrėžimas apibrėžti prieš jų naudojimą Objekto inicializacija obj = Nothing obj == null Value of an object variable Nothing null that does not refer to an object Patikrinimas, ar duombazė IsDbNull nėra yra null reikšmės Test whether a Variant nėra nėra variable has been initialized Define a default property Default by using indexers Kreipimasis į bazinę klasę MyBase base Interfeiso apibrėžimas Interface interface Interfeiso, kuris bus Implements (teiginys) class C1 : I1 realizuojamas, nurodymas Klasės apibrėžimas Class class Nurodymas, kad klasė gali MustInherit abstract būti tik paveldėta. Klasės egzempliorius negali būti sukurtas Nurodymas, kad klasė negali NotInheritable sealed būti paveldėta Declare an enumerated type Enum End Enum enum Klasės konstantos Const const (Applied to a field apibrėžimas declaration) Išvesti klasę iš bazinės klasės Inherits C2 class C1 : C2 Metodo praplėtimas Overrides override Declare a method that must MustOverride abstract be implemented in a deriving class Metodo, kuris negali būti NotOverridable (pagal sealed praplėstas, apibrėžimas nutylėjimą metodai nėra overridable ) Declare a virtual method, Overridable virtual property (Visual Basic), or property accessor (C#, C++)

21

Paskirtis VB.NET C# Bazinės klasės nario Shadowing nėra paslėpimas išvestinėje klasėje Declare a typesafe reference Delegate delegate to a class method Specify that a variable can WithEvents (Write code - no specific contain an object whose keyword) events you wish to handle Įvykių, kuriems esant bus Handles (Event procedures nėra paleista įvykių procedūrą, can still be associated with a apibrėžimas WithEvents variable by naming pattern.) Evaluate an object expression With objExpr nėra once, in order to access <.member> <.member> multiple members End With Struktūrinis išimčių Try try , catch , finally , throw apdorojimas Catch Finally End Try Sąlyginis sakinys, kai Select Case ... , Case , switch , case , default , vykdymo variantų yra keli Case Else , End Select goto , break Sąlyginis sakinys (if ... then) If ... Then , ElseIf ... if , else Then , Else , End If Ciklas while While, Do [While , Until] do , while , continue ... , Loop [While, Until] Ciklas for For ... , [Exit For], for , foreach Next For Each ..., [Exit For,] Next Masyvo apibrėžimas Dim a() As Long int[] x = new int[5]; Masyvo inicializavimas Dim a() As Long = {3, int[] x = new int[5] { 4, 5} 1, 2, 3, 4, 5};

Iš naujo išsskirti atmintį Redim nėra masyvui Visible outside the project or Public public Invisible outside the Friend internal assembly (C#/Visual Basic) or within the package (Visual J#, JScript)

22

Paskirtis VB.NET C# Prieinamas tik projekto Private private ribose (tam tikrais atvejais – gaubiančios klasės ribose) Prieinamas už klasės ir Public public projekto arba modulio ribų Prieinamas už klasės ribų, be Friend internal tik projekto ribose Prieinamas tik klasės arba Private private modulio ribose Prieinamas tik esamai arba Protected protected išvestinei (derived) ? klasei Preserve procedure's local Static nėra variables Prieinama visiems klasės Shared static egzemplioriams Kodo komentarai ' //, /* */ - komentarams, komentaras užimantiems kelias eilutes /// - XML komentarams Ar svarbus raidžių registras? ne taip Windows API iškvietimas Declare naudokite Platform Invoke Apibrėžti ir iššaukti įvykį Event , RaiseEvent event Gijų primityvai SyncLock lock Go to (eik į nurodytą kodo Goto goto vietą)

5.2. Raktiniai žodžiai, išrikiuoti pagal abėcėlę

Lentelėje 2. yra pateikti visi abiejų kalbų raktiniai žodžiai, surikiuoti pagal anglišką abėcėlę.

23 Lentelė 2. Raktiniai žodžiai pagal abėcėlę. [11, 12]

Anglų kalbos C# VB.NET abėcėlės raidė AddHandler, AddressOf, Alias, And, a abstract, as AndAlso, Ansi, As, Assembly, Auto b base, bool, break, byte Boolean, ByRef, Byte, ByVal Call, Case, Catch, CBool, CByte, case, catch, char, checked, CChar, CDate, CDec, CDbl, Char, c class, const, continue CInt, Class, CLng, CObj, Const, CShort, CSng, CStr, CType Date, Decimal, Declare, decimal, default, d Default, Delegate, Dim, delegate, do, double DirectCast, Do, Double else, enum, event, Each, Else, ElseIf, End, Enum, e explicit, extern Erase, Error, Event, Exit false, finally, fixed, f False, Finally, For, Friend, Function float, for, foreach g goto Get, GetType, GoSub*, GoTo h - Handles if, implicit, in, in (angl. If, Implements, Imports, In, i generic modifier ), int, Inherits, Integer, Interface, Is interface, internal, is l lock, long Let*, Lib, Like, Long, Loop

24

Lentelė 2. Raktiniai žodžiai pagal abėcėlę (tęsinys). [11, 12]

Anglų kalbos C# VB.NET abėcėlės raidė Me, Mod, Module, MustInherit, m - MustOverride, MyBase, MyClass namespace, new, null, Namespace, New, Next, Not, Nothing, n object NotInheritable, NotOverridable operator, out, Object, On, Option, Optional, Or, o out (angl. generic OrElse, Overloads, Overridable, modifier ), override Overrides params, private, ParamArray, Preserve, Private, Property, p protected, public Protected, Public RaiseEvent, ReadOnly, ReDim, r readonly, ref, return REM, RemoveHandler, Resume, Return sbyte, sealed, short, Select, Set, Shadows, Shared, Short, s sizeof, stackalloc, static, Single, Static, Step, Stop, String, string, struct, switch Structure, Sub, SyncLock t this, throw, true, try, typeof Then, Throw, To, True, Try, TypeOf uint, ulong, unchecked, u Unicode, Until unsafe, ushort, using v virtual, void, volatile Variant* When, While, With, w while WithEvents, WriteOnly x - Xor #Const #ExternalSource, papildomi - #If...Then...#Else, #Region * - rezervuoti kaip raktiniai žodžiai, tačiau VB.NET kalboje jau nebenaudojami

25 5.3. Kalbų duomenų tipai

Lentelė 3. Duomenų tipų skirtumai [10]

Paskirtis/dydis VB.NET C# Dešimtainis Decimal decimal Data Date DateTime Eilutė String string 1 baitas Byte byte 2 baitai Boolean boll 2 baitai Short, Char (Unikodo simbolis) short, char (Unikodo simbolis) 4 baitai Integer int 8 baitai Long long 4 baitai Single float 8 baitai Double double

Iš prieš tai pateiktų ir žemiau esančių lentelių galima daryti tokias pagrindines išvadas apie C# ir VB.NET kalbų sintaksę. Nedidelis skirtumas: • operacijų ženklai; • sakinių skyryba; • komentarai. Tam tikras skirtumas: • algoritmo valdymo elementai (pvz., ciklai); • duomenų tipai, skirtumas gali būti šiose srityse o raidžių registras duomenų tipo pavadinime (Double – double); o duomenų tipo pavadinimas (Single - float); o vienoje kalboje gali nebūti kitoje kalboje esančio tipo. Didelis skirtumas: • kintamųjų inicializavimas; • raktiniai žodžiai.

26 5.4. Operatorių skirtumai

Lentelė 4. Operatorių skirtumai [5]

Paskirtis VB.NET C# Sveikųjų skaičių dalyba \ / Dalyba moduliu Mod % Kėlimas laipsniu ^ nėra Sveikos dalybos rezultato priskyrimas \= /= Sujungimas (konkatenacija) &= NEW += Modulis nėra %= Dvejetainis IR nėra &= Dvejetainis ARBA (“bet ne abu”) nėra ^= Dvejetainis ARBA (disjunkcija) nėra |= Lygu = == Nelygu <> != Compare two object reference Is == variables Nuorodų į objektus palyginimas TypeOf x Is Class1 x is Class1 Eilučių sujungimas & + Shortcircuited Boolean AND AndAlso && Shortcircuited Boolean OR OrElse || Mastelis . . ir base Masyvo elementas () [ ] Type cast Cint , CDbl , ..., CType (type) Postfiksinis padidinimas nėra ++ Postfiksinis sumažinimas nėra -- (angl. Indirection ) nėra * (tik unsafe režime) Adresas AddressOf & (tik unsafe režime) Loginis NE Not ! One's complement Not ~ Prefiksinis padidinimas nėra ++ Prefiksinis sumažinimas nėra -- Duotojo tipo dydis nėra sizeof Bitwise-AND And & Dvejetainis exclusive-OR Xor ^ Dvejetainis inclusive-OR Or | Loginis IR And && Loginis ARBA Or || Sąlyginis sakinys If Function () ?: Rodyklė į narį nėra . (Unsafe mode only)

27 5.5. Elementarūs kodo fragmentai

Lentelė 5. Elementarūs kodo fragmentai [5]

Paskirtis VB.NET C# Kintamųjų Dim x As Integer int x; apibrėžimas Public x As Integer = 10 int x = 10 ; Komentarai ' komentaras // komentaras x = 1 ' komentaras /* kelių eilučių Rem comment ? komentaras */ Priskyrimo nVal = 7 nVal = 7; sakiniai Sąlygos If nCnt <= nMax Then if (nCnt <= nMax) sakiniai ' tas pats: nTotal = { ' nTotal + nCnt. nTotal += nCnt; nTotal += nCnt nCnt++; ' tas pats: nCnt = nCnt + 1. } nCnt += 1 else Else { nTotal += nCnt nTotal +=nCnt; nCnt -= 1 nCnt--; End If } Pasirinkimo Select Case n switch (n) iš kelių Case 0 { variantų MsgBox ( "Zero" ) case 0: sakinys ' Visual Basic .NET exits ' the Select at Console.WriteLine( "Zero" ); ' the end of a Case. break ; Case 1 case 1: MsgBox ( "One" ) Case 2 Console.WriteLine( "One" ); MsgBox ( "Two" ) break ; Case Else case 2: MsgBox ( "Default" ) End Select Console.WriteLine( "Two" ); break ; default :

Console.WriteLine( "?" ); break ; }

28

Paskirtis VB.NET C# Bazinės Public Class BaseCls public class BaseCls klasės narių ' elementas, kuriam turi būti { paslėpimas sukurtas “šešėlis” // slepiamas elementas Public Z As Integer = 100 public int Z = 100 ; (gal public Sub Test() public void Test() inkapsuliacija System.Console.WriteLine( { ?) _ "Test in BaseCls" ) System.Console.WriteLine( Hiding Base End Sub "Test in BaseCls" ); Class End Class } Members } Public Class DervCls Inherits BaseCls public class DervCls : ' elementas, sukuriantis BaseCls „šešėlį“. { Public Shadows Z As String = // slepiantis elementas "*" public new string Z = public Shadows Sub Test() "*" ; System.Console.WriteLine( public new void Test() _ { "Test in DervCls" ) End Sub System.Console.WriteLine( End Class "Test in DervCls" ); } Public Class UseClasses } ' DervCls išplečiama ' iki BaseCls public class UseClasses { Dim BObj As BaseCls = // DervCls išplečiama New DervCls() // iki BaseCls ' prieiga per išvestinę ' (angl. derived) klasę BaseCls BObj = new DervCls(); Dim DObj As DervCls = // prieiga per išvestinę New DervCls() // klasę DervCls DObj = new DervCls();

Public Sub ShowZ() public void ShowZ()

29 System.Console.WriteLine( _ { "Accessed through base " &_ System.Console.WriteLine( "class: " & BObj.Z) "Accessed through " + System.Console.WriteLine(_ "base class: {0}" , "Accessed through derived BObj.Z); "&_ "class: " & DObj.Z) System.Console.WriteLine( BObj.Test() "Accessed through" + DObj.Test() " derived class:{0}" , End Sub DObj.Z); End Class BObj.Test(); DObj.Test(); } }

Paskirtis VB.NET C# WHILE ' Sąlyga ciklo pradžioje while (n < 100 ) ciklas While n < 100 . n++; ' tas pats: n = n + 1. n += 1 End While ' FOR ciklas For n = 1 To 10 for (int i = 1; i <= 10; MsgBox ("The number is " & n) i++) Next Console.WriteLine( "skaicius yra {0}" , For Each prop In obj i); prop = 42 foreach (prop current in Next prop obj) { current=42; }

30

Paskirtis VB.NET C#

Parameter ' The argument Y is /* Note that there is Passing by 'passed by value. no way to pass reference Value Public Sub ABC( _ types (objects) strictly ByVal y As Long ) by value. You can choose 'If ABC changes y, the to either pass the ' changes do not affect x. reference End Sub (essentially a pointer), or a reference to the ABC(x) ' Call the procedure. reference ' You can force parameters to (a pointer to a pointer).*/ ' be passed by value, // The method: ' regardless of how void ABC( int x) ' they are declared, { ' by enclosing ... ' the parameters in } ' extra parentheses. // Calling the method: ABC((x)) ABC(i); Parametras, Public Sub ABC( ByRef y As Long ) /* Note that there is no perduodamas ' Parametras y apibrėžiamas way to pass reference kaip nuoroda ' “pagal nuorodą” types ' (angl. by reference). (objects) strictly by ' Jeigu ABC keičia y, value. ' pakinta x reikšmė You can choose to either End Sub pass the reference (essentially a pointer), ABC(x) ' procedūros iskvietimas. or a reference to the reference (a pointer to a pointer).*/ // Note also that unsafe C# //methods can take pointers //just like C++ methods. //Detaliau žr. //“unsafe“. // metodas: void ABC( ref int x) { ... } // metodo iškvietimas: ABC( ref i);

31

Paskirtis VB.NET C# Struktūri- Try // try-catch-finally zuotų išimčių If x = 0 Then try valdymas Throw New Exception( _ { "x equals zero" ) if (x == 0) Else throw new Throw New Exception( _ System.Exception( "x does not equal zero" ) "x equals zero" ); End If else Catch err As System.Exception throw new MsgBox( _ System.Exception( "Error: " & Err.Description) "x does not equal Finally zero" ); MsgBox( _ } "Executing finally block." ) catch (System.Exception End Try err) { System.Console.WriteLine( err.Message); } finally { System.Console.WriteLine( "executing finally block" ); }

Objektinė o = Nothing o = null ; nuoroda į nieką Tipų Dim dt as New System.DateTime( _ System.DateTime dt = inicializacija 2001, 4, 12, 22, 16, 49, 844 ) new System.DateTime( 2001 , 4, 12 , 22 , 16 , 49 , 844 );

32

5.5. C# ir VB.NET kodo fragmentai

Žemiau yra pateikti būdingesni C# ir VB.NET kodo fragmentai, suskirstyti į grupes [9]. Lyginant juos aiškiai matomi skirtumai ir panašumai.

Lentelė 5. Svarbiausi VB.NET ir C# kodo fragmentai

VB.NET C# Programos struktūra Imports System using System;

Namespace Hello namespace Hello { Class HelloWorld public class HelloWorld { Overloads Shared Sub Main (ByVal args() public static void Main (string[] args) { As String) string name = "C#"; Dim name As String = "VB.NET" if (args.Length == 1) If args.Length = 1 Then name = args(0) name = args[0];

Console.WriteLine("Hello, " & name & "!") Console.WriteLine("Hello, " + name + End Sub "!"); End Class } End Namespace } } Komentarai ‘ viena eilutė // viena eilutė REM viena eilutė /* kelios '''

XML komentarai eilutės */ /// XML komentarai vienoje eilutėje /** XML kometarai keliose eilutėse */

Duomenų tipai Kintamųjų tipai Kintamųjų tipai Boolean bool Byte, SByte byte, sbyte Char char Short, UShort, Integer, UInteger, Long, ULong short, ushort, int, uint, long, ulong Single, Double float, double Decimal decimal Date DateTime (not a built-in C# type)

33 Nuorodų tipai Nuorodų tipai Object object String string

Inicializacija Inicializacija Dim correct As Boolean = True bool correct = true; Dim b As Byte = &H2A 'hex arba &O52 byte b = 0x2A; // hex aštuntainiams object person = null; Dim person As Object = Nothing string name = "Dwight"; Dim name As String = "Dwight" char grade = 'B'; Dim grade As Char = "B"c DateTime today = Dim today As Date = #12/31/2007 12:15:00 DateTime.Parse("12/31/2007 12:15:00"); PM# decimal amount = 35.99m; Dim amount As Decimal = 35.99@ float gpa = 2.9f; Dim gpa As Single = 2.9! double pi = 3.14159265; Dim pi As Double = 3.14159265 long lTotal = 123456L; Dim lTotal As Long = 123456L short sTotal = 123; Dim sTotal As Short = 123S ushort usTotal = 123; Dim usTotal As UShort = 123US uint uiTotal = 123; Dim uiTotal As UInteger = 123UI ulong ulTotal = 123; Dim ulTotal As ULong = 123UL

Funkcija Sub TestFunc( ByVal x As Integer, ByRef y As void TestFunc(int x, ref int y, out int z) { Integer, ByRef z As Integer) x++; x += 1 y++; y += 1 z = 5; z = 5 } End Sub int a = 1, b = 1, c; // c nereikalauja inic, Dim a = 1, b = 1, c As Integer ' c pagal TestFunc(a, ref b, out c); nutylėjima lygus 0 Console.WriteLine("{0} {1} {2}", a, b, c); // 1 TestFunc(a, b, c) 2 5 Console.WriteLine("{0} {1} {2}", a, b, c) ' 1 2 5

Function Sum(ByVal ParamArray nums As int Sum( params int[] nums) { Integer()) As Integer int sum = 0; Sum = 0 foreach (int i in nums) For Each i As Integer In nums sum += i; Sum += i return sum; Next } End Function

Dim total As Integer = Sum(4, 3, 2, 1) int total = Sum(4, 3, 2, 1); // grąžina 10 ' returns 10

34

VB.NET C# Operatoriai Lyginimo Lyginimo = < > <= >= <> == < > <= >= !=

Aritemtiniai Aritmetiniai + - * / + - * / Mod % (mod) \ (sveikojo dalyba) / (sveikoji dalyba, jei abu operandai yra int ^ (kėlimas laipsniu) tipo) Math.Pow(x, y)

Priskyrimo Priskyrimo = += -= *= /= %= &= |= ^= <<= = += -= *= /= \= ^= <<= >>= &= >>= ++ --

Binariniai Binariniai And Or Xor Not << >> & | ^ ~ << >>

Loginiai Loginiai AndAlso OrElse And Or Xor Not && || & | ^ !

Eulučių sujungimo (konkatenacijos) Eulučių sujungimo (konkatenacijos) & + Masyvai Dim nums () As Integer = {1, 2, 3} int [] nums = {1, 2, 3}; For i As Integer = 0 To nums.Length - 1 for (int i = 0; i < nums.Length; i++) Console.WriteLine(nums(i)) Console.WriteLine(nums[i]); Next

' 4 yra paskutinio elemento indeksas // 5 yra masyvo dydis Dim names(4) As String string[] names = new string[5]; names(0) = "David" names[0] = "David"; names(5) = "Bobby" ' išmeta names[5] = "Bobby"; // išmeta System.IndexOutOfRangeException System.IndexOutOfRangeException

' Masyvo dydžio pakeitimas, išsaugant esamas reikšmes // C# negali dinamiškai pakeisti masyvo dydį. ReDim Preserve names(6) Reikia nukopijuoti jį į naują masyvą. string[] names2 = new string[7]; Array.Copy(names, names2, names.Length); // or names.CopyTo(names2, 0); Dim twoD(rows-1, cols-1) As Single twoD(2, 0) = 4.5 float [,] twoD = new float[rows, cols]; twoD[2,0] = 4.5f; Dim jagged ()() As Integer = { _ New Integer(4) {}, New Integer(1) {}, New int [][] jagged = new int[3][] { Integer(2) {} } new int[5], new int[2], new int[3] }; jagged(0)(4) = 5 jagged[0][4] = 5;

35

VB.NET C# Ciklai Išankstinė sąlyga : Išankstinė sąlyga :

While c < 10 Do Until c = 10 // nereikia "until" c += 1 c += 1 while (c < 10) End While Loop c++;

For c = 2 To 10 Step Do While c < 10 2 c += 1 for (c = 2; c <= 10; c += 2) Console.WriteLine(c) Loop Console.WriteLine(c); Next

Post-sąlygą : Post-sąlyga :

Do Do do c += 1 c += 1 c++; Loop While c < 10 Loop Until c = 10 while (c < 10);

' Darbas su masyvais arba kolekcijomis // Darbas su masyvais arba kolekcijomis Dim names As String() = {"Fred", "Sue", string[] names = {"Fred", "Sue", "Barney"}; "Barney"} foreach (string s in names) For Each s As String In names Console.WriteLine(s); Console.WriteLine(s) Next // Ciklo nutrukimas ' Ciklo nutrukimas int i = 0; Dim i As Integer = 0 while (true) { While (True) if (i == 5) If (i = 5) Then Exit While break; i += 1 i++; End While }

// Perėjimas prie kitos iteracijos ' Perėjimas prie kitos iteracijos for (i = 0; i < 5; i++) { For i = 0 To 4 if (i < 4) If i < 4 Then Continue For continue; Console.WriteLine(i) ' Išveda 4 Console.WriteLine(i); // Išveda 4 Next }

Kaip matome, panašumų tikrai yra, bet ir skirtumų nemažai

36 6. Programavimo eksperimentai

6.1. Programų kūrimo aplinka Microsoft Visual Studio

Visual Studio yra eilė programinių Microsoft kompanijos produktų, kurie susideda iš integruotos programų kūrimo aplinkos ir kitų įrankių. Gali būti naudojama kuriant konsolines programas arba programas su grafiniu vartotojo interfeisu. Žemiau yra pateikti įvairūs sąrašai ir lentelės, susijusios su šia IDE. Į Visual Studio sudėtį įeina viena arba kelios dalys iš šių: • Visual Basic .NET, o iki jos pasirodymo — Visual Basic; • Visual C++; • Visual C#; • Visual F# (įtrauktas į Visual Studio 2010); Įvairiuose Visual Studio variantuose taip pat būna Microsoft SQL Server arba Microsoft SQL Server Express. Anksčiau į Visual Studio sudėtį taip pat įėjo šie produktai: • Visual InterDev; • Visual J++; • Visual J#; • Visual FoxPro; • Visual Source Safe (versijų valdymo sistema) Microsoft Visual Studio prieinamas tokiuose paketuose: • Visual Studio Express; • Visual Studio Standard; • Visual Studio Professional; • Visual Studio Tools for Office; • Visual Studio Team System: o Team Explorer (bazinis TFS klientas) o Architecture Edition o Database Edition o Development Edition o Test Editon

37 Skirtingų metų versijos yra šios: • Visual Studio 97 — pirmoji viešai platinta Visual Studio versija. Joje pirmąkart buvo surinkti įvairūs taikomųjų programų kūrimo įrankiai. Buvo išleista dviem versijomis: Professional ir Enterprise. Visual Studio 97 buvo Microsoft bandymas sukurti vieną kūrimo aplinką skirtingoms programavimo kalboms, praplečiant esamą aplinką, vadinamą Developer Studio, kuri palaikė Visual C++, Visual J++, Visual InterDev ir MSDN. Visual Basic ir Visual FoxPro tuo metu naudojo atskiras programų kūrimo aplinkas. Į Visual Studio 97 sudėtį įėjo: o Visual Basic 5.0 o Visual C++ 5.0 o Visual J++ 1.1 o Visual FoxPro 5.0 o Visual InterDev (skirta neseniai atsiradusiai ASP). • Visual Studio 6.0, išleista 1998 m. birželį. Paskutinė Visual Studio versija, veikianti Win9x šeimos operacinėse sistemose. Iki .NET platformos atsiradimo ši versija buvo pagrindinė Microsoft kompanijos IDE. Vis dar išsaugo tam tikrą populiarumą tarp programuotojų, naudojančių Visual Basic kalbą. • Visual Studio .NET (kodinis pavadinimas - Rainiem , vidinė versija – 7.0) buvo išleista 2002 m. vasario mėn. Į jos sudėtį įeina .NET Framework 1.0. Pataisų rinkinys šiai VS versijai (Service Pack 1) buvo išleistas 2005 m. kovo mėn. • Visual Studio .NET 2003 (kodinis pavadinimas – Everett , vidinė versija – 7.1) pasirodė 2003 m. balandį. Į jos sudėtį įeina .NET Framework 1.1. Pataisų rinkinys šiai VS versijai (Service Pack 1) buvo išleistas 2006 m. rugsėjo mėn. • Visual Studio 2005 (kodinis pavadinimas – Whidbey , vidinė versija – 8.0) išleista 2005 m. spalio mėnesį. Į šios versijos sudėtį įeina .NET Framework 2.0. Lapkritį pasirodė susijusi Express versija, kurią sudarė Visual C++ 2005 Express, Visual Basic 2005 Express, Visual C# 2005 Express ir kt. 2006 m. balandį Express versija tapo nemokama. Service Pack 1 tiek VS 2005, teik Express versijai buvo išleistas 2006 m. gruodį. • Visual Studio 2008 (kodinis pavadinimas - Orcas ) išleista 2007 m. lapkritį, kartu su .NET Framework 3.5. Viena pagrindinių savybių – programų operacinei sistemai Vista, pagalbinių įrankių Office 2007 kūrimas bei tinklo programų

38 rašymas. Į šios versijos sudėtį įeina LINQ (angl. Language Integrated Query , projektas, kurio tikslas – papildyti .NET platformos programavimo kalbas į SQL panašia sintakse), naujos C# ir Visual Basic kalbų versijos. • Visual Studio 2010 (kodinis pavadinimas – Hawaii , Team System kodinis pavadinimas - Rosario ). Laukiama, kad ši versija pasirodys 2010 m. balandį.

Įvairių Microsoft Visual Studio versijų palyginimas pateiktas žemiau esančiose lentelėse (pagal [14, 15, 16, 17]).

Lentelė 6. Skirtingų Visual Studio aplinkos versijų palyginimas

Projektų Klasių Išoriniai Integracija Refak- Produktas Plėtiniai diegimo kūrėjas įrankiai su MSDN toringas 1 galimybės (designer ) Visual MSDN Studio ne minimalūs af2 ne af express Express Visual Studio taip taip af taip taip taip Standard Visual Studio taip taip taip taip taip taip Professional Visual Studio Team taip taip taip taip taip taip System 1) pakartotinis panaudojamumas 2) af – apribotas funkcionalumas;

39

Lentelė 6. Skirtingų Visual Studio aplinkos paketų palyginimas (tęsinys)

VS Itanium Windows Klaidų 64 bitų Tools Produktas procesorių Mobile aptikimas palaikymas for palaikymas Development Office Visual Studio af1 ne ne ne ne Express Visual Studio taip taip ne ne ne Standard Visual Studio taip taip ne taip taip Professional Visual Studio Team taip taip taip taip taip System 1) af – apribotas funkcionalumas

40 Aš pasirinkau Visual Studio 2008 Express Edition versiją, nes ją galima nemokamai atsisiųsti ir joje yra tas, ko man reikia. Pav. 2 parodyta Visual C# 2008 Express Edition vartotojo sąsaja.

Pav. 2. Microsoft Visual C# 2008 Express Edition

41 6.2. Matematinių ir įvesties/išvesties operacijų spartos palyginimas

Be teorinės analizės (pvz., kodo išmokstamumo), būtina ir praktinė analizė. Žemiau pateikta kodų, parašytų Visual Basic .NET ir C# programavimo kalbomis, greitaveikos testų aprašymai ir rezultatai. Testavimo dalys: 1. 32 bitų sveikų skaičių aritmetika . Naudojamas 32-jų bitų sveikas ciklo skaitliukas, 32-jų bitų sveiki operandai, keturios aritmetinės operacijos (sudėtis, atimtis, daugyba, dalyba). Ciklo dydis – 1 mlrd. iteracijų. Buvo skaičiuojamas toks reiškinys (neatsižvelgiant į dalybos liekanas): 1 - 1 + 2 × 3 / 4 - 5 + 6 × 7 / 8 - ... - 999,999,997 + 999,999,998 × 999,999,999 / 1,000,000,000 . 2. 64 bitų sveikų skaičių aritmetika . Tas pats algoritmas kaip ir pirmoje dalyje, tačiau naudojami 64-ių bitų ciklo skaitliukas ir operandai. Ciklo skaitliukas prasideda ties 10 milijardais ir baigiasi ties 11 milijardais. Tai padaryta tam, kad IDE, kurioje kuriamas kodas, nepakeistų 64-ių bitų reikšmių, mažesnių už 4 mlrd. (tiksliau už 232 ), į 32-ių bitų reikšmes. 3. 64 bitų slankaus kablelio skaičių aritmetika . Algoritmas toks pat kaip 2-oje dalyje, tačiau naudojami 64-ių bitų skaičiai su slankiuoju kableliu. Savaime suprantama, dabar dalybos liekanos niekur nedingsta. 4. 64 bitų slankaus kablelio skaičių trigonometrija, logaritmai ir kvadratinės šaknys . Naudojant 64-ių bitų skaitliuką, skaičiuojami sinusai, kosinusai, tangentai, dešimtainiai logaritmai ir kvadratinės šaknys iš iš reikšmių tarp 1 ir 10 mln. 5. Įvesties/išvesties operacijos . Į tekstinį failą rašomas 1 mln. eilučių, susidedančių iš 80 simbolių, vėliau failas nuskaitomas į operatyvią atmintį.

Testavimo duomenys pateikti tiek iliustracijų, tiek lentelės (nr. 7), tiek grafikų pavidalu. Mažesnis rezultatas yra geresnis.

42 Testavimo stendo parametrai: • mikroprocesorius – Intel Pentium 4; • operatyvios atminties kiekis – 768 MB; • kieto disko talpa – 80 GB, apsukų skaičius per minutę- 7200; • operacinė sistema – Windows XP Professional su SP3 pataisų rikiniu.

Pav. 3. C# vykdomo kodo greitaveikos testas

43

Pav. 4. VB.NET vykdomo kodo greitaveikos testas

44

Lentelė 7. VB.NET ir C# vykdomo kodo greitaveika Matematiniai skaičiavimai (s) Programavimo Suma Aritmetika (pagal tipus) Trigonometrija, I/O 1 (s) kalba (s) int long double logaritmai, šaknys VB.NET 14,109 18,984 13,249 2,953 33,811 83,106 C# 7,233 19,217 1,984 2,734 5,124 36,292 1) įvesties/išvesties operacijos, angl. - Input/Output

Grafikas 1. VB.NET ir C# vykdomo kodo greitaveikos palyginimas

33,811 35

30

25 18,984 19,217 20 laikas, s 14,109 15 13,249

10 7,233 5,124 5 2,953 1,984 2,734

0 VB.NET C#

int long double trigonom. ir kiti I/O

45

Grafikas 2. VB.NET ir C# vykdomo kodo greitaveikos palyginimas

90

80

70 33,811

60

50 2,953 laikas, s 40 13,249

5,124 30 2,734 1,984 18,984 20 19,217

10 14,109 7,233 0 VB.NET C#

int long double trigonom. ir kiti i/o

Matome ryškų C# kalbos atotrūkį vykdant skaičiavimus su realiais (double tipo) skaičiais. Taip pat C# kodas gerokai lenkia VB.NET kodą atliekant įvesties/išvesties operacijas.

46 6.3. Householderio transformacija

Aš atlikau papildomą testą, kurio metu lyginau C# ir VB.NET kalbų kodo greitaveiką, Programa sprendė tiesinę lygtį, panaudojant matematinį metodą, vadinamą Householderio transformacija [22-24]. Ši transformacija naudojama įvairiose matematikos ir fizikos srityse, įskaitant ir tiesinių lygčių sprendimą. Aprašysiu tik svarbiausią Householderio transformacijos dalį – tridiagonalizaciją. Tridiagonali matrica atrodo taip:

Tridiagonalizacijos pirmame žingsnyje reikia apskaičiuoti α ir r pagal tokias formules:

ir

Paėmus α ir r reikšmes, sukuriamas vectorius v:

, kur v1 = 0; , ir kiekvienam k = 3, 4 ... n

Po to skaičiuojam:

47

ir

Suradus P1 ir A(1) procesas kartojamas k = 2, 3 ... n kartų tokiais žingsniais:

; à ; à

à ; à

; à .

Tęsiant šių operacijų vykdymą, gaunama tridiagonali ir simetrinė matrica.

Householderio transformacijos pavyzdys: duotoji matrica transformuojama į analogišką tridiagonalią matricą. Duota matrica:

Pirmoji Householderio matrica:

Q1

48 A1 = Q 1AQ 1

Naudojant A 1 formuojame Q 2 =

A2 = Q 2A1Q2 = gautoji matrica yra tridiagonali simetrinė matrica, analogiška duotajai.

Pereikime prie šio testo rezultatų aptarimo. Iš pateikto grafiko matyti, kad C# kalbos kodas tęsia ankstesnę tendenciją – jis pirmauja. Tačiau skirtumas tarp C# ir VB.NET šį kartą nėra žymus.

Pav. 5. Tiesinės lygties sprendimas VB.NET kalba

49 Pav. 6. Tiesinės lygties sprendimas C# kalba

Grafikas 3. Vykdomo kodo greitaveikos palyginimas Householderio metodo realizacijoje

Kodų greitaveika sprendžiant tiesinę lygtį

40000 35000 30000 25000 20000 15000 laikas, ms laikas, 10000 5000 0 0.125 0.25 0.5 1 iteracijų sk., mln

VB.NET C#

Rezultatai rodo pastebimą C# kalbos persvarą. Beveik visuose testuose C# kodas buvo vykdomas greičiau nei VB.NET kodas. Kai kur (operacijose su realiais skaičiais) C# pranašumas yra milžiniškas. Vienintelė išimtis – operacijos su Long tipo skaičiais. Tačiau VB.NET kalbos atotrūkis yra toks mažas, kad galima sakyti, jog skirtumas yra paklaidos ribose. Galbūt tuo metu kažkoks Windows OS sisteminis procesas pareikalavo šiek tiek procesoriaus laiko, dėl to skaičiavimo laikas kiek pailgėjo.

50 7. Rezultatai

Darbo metu gauti tokie rezultatai: • apibūdinta taikomosios PĮ sąvoka; • aprašyta: o .NET platforma; o dviejų programavimo kalbų istorija; • nuodugniai palyginta kalbų sintaksė; • atlikti programavimo eksperimentai; • parašytas išsamus programavimo terminų žodynas.

8. Išvados

Mano manymu, C# kalba yra pažangesnė. Ji buvo kurta atsižvelgus į rinkoje tuo metu dominavusias ir tebedominuojančias programavimo kalbas (C, C++, Java). Bendri C# ir VB.NET kalbų bruožai: • tas pats kūrėjas – korporacija Microsoft; • platforma .NET; • ta pati integruota kūrimo aplinka – Microsoft Visual Studio. Tam tikri kalbų skirtumai: • populiarumas; • kalbų amžius. Dideli kalbų skirtumai: • sintaksė (atitinkamai – ir išmokstamumas); • vykdomo kodo greitaveika. Pagaliau, Microsoft korporacija C# kalbą laiko pagrindine taikomųjų (ne tinklo) programų kūrimo kalba ir deda visas pastangas jos populiarinimui. Būtent C# reikėtų naudoti kuriant taikomąsias programas.

51 Priedas 1. Terminų žodynas

Asembleris (angl. assembler – darbininkas-surinkėjas) – programa, vykdanti transliaciją iš žemo lygio asemblerio kalbos į mašininį kodą. Kiekvienas procesorius gali turėti kelias asemblerio kalbas, kurios skiriasi direktyvų ir makrosų rinkiniu. Aukšto lygio programavimo kalbos – programavimo kalbos, kurių pagrindinė savybė – abstrakcijos, trumpai aprašančios duomenų struktūras ir operacijas su jomis. Tokių abstrakcijų analogai mašininiame kode labai ilgi ir sunkiai suvokiami. Aukšto lygio programavimo kalbos pvz.: Visual Basic.NET, C#, Java, Pascal. Bait-kodas (angl. byte-code ) – žemo lygio, nepriklausomas nuo aparatūros kodas, generuojamas transliatoriaus ir vykdomas interpretatoriaus. Dauguma bait-kodo instrukcijų yra ekvivalenčios vienai arba kelioms asemblerio kalbos komandoms. Bait- kodas vadinamas taip dėl to, kad kiekvienos operacijos kodo ilgis – vienas baitas (nuo 0 iki 255), tačiau komandos ilgiai esti įvairūs (nes po operacijos kodo rašomi parametrai – registrai arba atminties adresų reikšmės). Transliacija į bait-kodą užima tarpinę padėtį tarp kompiliavimo į mašininį kodą ir interpretacijos. Biblioteka (programavime, angl. library ) – paprogramių arba objektų rinkinys, naudojamas kuriant programas (taip pat žr. „modulis“). Biblioteką sudaro vienas arba keli moduliai. Pagal naudojimo būdą bibliotekos skirstomos į: • statines, kurios gali būti naudojamos išeities teksto arba objektinių failų pavidalu; statines bibliotekas turi dauguma šiuolaikinių programavimo kalbų kompiliatorių; • dinamines (taip pat vadinamos shared library ), pakraunamos programos, su kuria jos surištos, vykdymo metu (žr. „DLL“); Common Intermediate Language - žr „Microsoft Intermediate Language“. Common Language Runtime (sutrumpintai - CLR ) – .NET Framework branduolys, Common Language Infrastructure standarto realizacija, sukurta kompanijoje Microsoft. Tai virtuali mašina, vykdanti programas, parašytas .NET kalbomis (pilnas kalbų sąrašas - 2-ame priede). CLR interpretuoja ir vykdo bait-kodą, vadinamą Common Intermediate Language. Taip pat žr. „Microsoft Intermediate Language“. Derintuvas (angl. debugger ) – IDE dalis, skirta įvairių klaidų paieškai programos kode. Gali vykdyti kodą pažingsniui (po 1-ą eilutę arba funkciją). Taip pat žr. „IDE“.

52 DLL (angl. Dynamic-link library ) – vykdymo metu pakraunama biblioteka (Windows OS šeimoje), kurią gali naudoti skirtingos taikomosios programos. DLL teikia dažnai naudojamas funkcijas ir konkrečios programavimo kalbos objektines galimybes. IDE (angl. Integrated development environment ) – integruota programų kūrimo aplinka. Paprastai į aplinkos sudėtį įeina: • išeities tekstų redaktorius (dažnai – su sintaksės spalvinimo galimybe); • kompiliatorius ir/arba interpretatorius; • atskirų modulių (pvz., realizuojančių matematines funkcijas) funkcionalumo įtraukimo į vykdomąjį failą automatizavimo įrankiai; • derintuvas, skirtas klaidų paieškai (žr. „derintuvas“); Taip pat IDE kartais turi versijų valdymo sistemą (arba turi galimybę „bendrauti“ su išorine versijų valdymo sistema). Kai kurios IDE gali turėti įrankius, žymiai supaprastinančius kuriamos programos vartotojo sąsajos gaminimą. Šiuolaikinės IDE, skirtos dirbti su objektiškai-orientuotu kodu, papildomai gali turėti klasių naršyklę; objektų inspektorių, klasių hierarchijos diagramą. Esama kūrimo aplinkų, skirtų darbui su keliomis programavimo kalbomis (Eclipse, NetBeans, Microsoft Visual Studio). Interpretatorius – programa, analizuojanti komandas ir operatorius, esančius interpretuojamos programos išeities tekste, ir iš karto vykdanti juos/jas. Tipai: • paprastas (tas pats apibrėžimas); trūkumas – programos klaidas randa tik perėjęs prie konkrečios komandos arba programos eilutės, turinčios klaidą, vykdymo; darbo algoritmas: 1. perskaityti instrukciją; 2. išanalizuoti instrukciją ir nustatyti reikiamus veiksmus; 3. įvykdyti tuos veiksmus; 4. jei interpretatoriaus darbo baigimo sąlyga netenkinama, pereiti prie 1-o p. • interpretatorius-kompiliatorius; kompiliatorius sukompiliuoja programos išeities tekstą į tarpinį kodą (pvz., bait-kodą), o interpretatorius vykdo gautą tarpinį kodą; programos vykdomos greičiau (minimizuojama kodo analizė interpretatoriuje, nes išeities tekstą analizuoja kompiliatorius), tačiau reikalauja didesnių resursų; tokia koncepcija naudojama programavimo kalbose Java, PHP, Python. Interpretatorių privalumai:

53 • didesnis programų pernešamumas (programa veiks bet kurioj platformoj, kurioje yra konkrečios programavimo kalbos interpretatorius); • neretai geresni klaidų aptikimo įrankiai ir pats jų ieškojimo procesas; • mažesnis kodo dydis lyginant su mašininiu kodu; Interpretatorių trūkumai: • programa negali būti vykdoma be interpretatoriaus; • programa vykdoma lėčiau; • nėra kodo optimizacijos; Java Development Kit (sutrumpintai – JDK ) – Oracle Corporation dukterinės kompanijos Sun Microsystems kuriamas ir laisvai platinamas rinkinys, skirtas programuotojams, rašantiems programas Java kalba. Į JDK sudėtį neįeina IDE, todėl programuotojas, turintis tik JDK, privalo naudoti atskirą tekstų redaktorių ir kompiliuoti savo programas, naudodamas komandinės eilutės įrankius. Rinkinio sudėtis: • Java kompiliatorius (javac); • standartinės Java klasių bibliotekos; • programų pavyzdžiai; • dokumentacija; • įvairūs programiniai įrankiai; • Java vykdomoji aplinka (JRE). Visos šiuolaikinės integruotos programų kūrimo aplinkos, skirtos darbui su Java (NetBeans, Sun Java Studio Creator, IntelliJ IDEA, Borland JBuilder, Eclipse), remiasi servisais, kuriuos teikia JDK. Dėl šios priežasties minėtos IDE arba turi JDK savo sudėtyje, arba reikalauja turėti JDK programuotojo kompiuteryje iki IDE diegimo. JDK išeities tekstai yra viešai prieinami (platinimo licencijos – Sun License ir GPL). Java Runtime Environment (sutrumpintai – JRE ) – minimali Java virtualios mašinos realizacija. Susideda iš Java Virtual Machine ir Java klasių bibliotekos. JRE yra laisvai platinama. Java Virtual Machine (sutrumpintai – Java VM , JVM ) – pagrindinė Java Runtime Environment dalis. JVM interpretuoja ir vykdo Java bait-kodą, kuris yra gaunamas iš Java programos išeities teksto po kompiliacijos su Java kompiliatoriumi (javac). JVM taip pat gali būti naudojamas programų, parašytų kita programavimo kalba, vykdymui.

54 Pvz., išeities tekstas Ada kalba gali būti sukompiliuotas į Java bait-kodą, kuris vėliau bus vykdomas JVM. JIT (angl. Just-in-time compilation , taip pat žinoma kaip dinaminė transliacija) – programinių sistemų, naudojančių bait-kodą, greitaveikos didinimo technologija. Programų bait-kodas transliuojamas į mašininį kodą programų vykdymo metu. Tokiu būdu pasiekiamas aukštas programų vykdymo greitis (palyginamas su kompiliuojamose kalbose sukurtų programų vykdymu). Tačiau didėja kompiuterio operatyvios atminties sunaudojimas (joje saugomi kompiliacijos rezultatai); taip pat kažkiek laiko užtrunka vykdomos programos kompiliacija. JIT pagrindas – ankstesnės vykdymo aplinkos technologijos: bait-kodo kompiliacija ir dinaminė kompiliacija. JIT naudojamas Microsoft. NET aplinkoje, Java. Programavimo kalbos Perl, Python turi ribotas JIT. Kodas – termino „išeities kodas“ (arba „išeities tekstas“) sutrumpinimas. Žmogaus parašytas kompiuterinės programos tekstas tam tikra programavimo kalba. Kompiliacija – programos išeities teksto transliacija į kalbą, artimą mašininiam kodui (pvz., į asemblerį). Kompiliacijos rūšys: • paketinė – keli moduliai su išeities tekstais kompiliuojami kartu; • eilutinė – tas pats, kas interpretacija; • sąlyginė – kompiliacija priklauso nuo sąlygų, kurios duotos kompiliuojamos programos išeities tekste (pvz., esant tam tikrai konstantos reikšmei, dalis išeities teksto nebus įtraukta į transliaciją). Кompiliatorius – programa, vykdanti kompiliaciją. Terminas „kompiliatorius“ yra giminingas terminui „transliatorius“. Kompiliatorių rūšys: • vektorizuojantis – transliuoja išeities tekstą į kompiuterių, turinčių vektorinį procesorių, mašininį kodą; • lankstusis – sukurtas iš modulių, valdomas lentelėmis ir parašytas aukšto lygio programavimo kalba; • dialoginis; • inkrementinis – turintis galimybę transliuoti atskirus programos fragmentus (jei jie pasikeitė), nedarant pakartotinės viso kodo transliacijos; • interpretuojantis – žingsnis po žingsnio vykdo nepriklausomas kiekvienos komandos iš išeities teksto transliaciją;

55 • kompiliatorių kompiliatorius – transliatorius, paimantis kaip duomenis formalų programavimo kalbos aprašą ir generuojantis kompiliatorių šiai kalbai kaip rezultatą; • derintuvas – pašalina tam tikras programavimo kalbos sintaksės klaidas; • rezidentinis – nuolatos esantis kompiuterio operatyvioje atmintyje ir nuolatos prieinamas įvairioms užduotims vykdyti; • pats save kompiliuojantis – parašytas ta pačia kalba, iš kurios vykdoma transliacija; • universalus – pagrįstas formaliu įeities kalbos sintaksės ir semantikos aprašu. Kompiuterinė kalba (angl. computer language ) – prasmingas ženklų rinkinys, skirtas sąveikavimui tarp žmogaus ir kompiuterio. Kompiuterinių kalbų tipai: • programavimo kalbos – žr. „programavimo kalba“; • skriptinės kalbos (angl. scripting language ) – skirtos scenarijų (scenarijus - veiksmų seka, kurią gali atlikti vartotojas) užrašymui. Paprastai scenarijai interpretuojami, todėl blogai parašytas scenarijus tiesiog išves klaidos pranešimą; • į esybes orientuotos kalbos (angl. domain-specific language, DSL ); • užklausų kalbos (angl. query language ): o skirtos darbui su duomenų bazėmis (pvz.: SQL, QUEL); o informacijos išgavimo kalbos (angl. information retrieval query language , pvz.: XPath) • duomenų aprašymo kalbos: o žymų kalbos (angl. markup language ) – skirtos papildyti paprastą tekstą naudinga informacija (sąrašais, antraštėmis, šriftais). Pvz.: HTML, XML; o specifikacijų kalba (angl. specification language , pvz., CSS); • aparatūros aprašymo kalbos (angl. hardware description language ) – skirtos elektros grandinių (ypač – skaitmeninės logikos grandinių) formaliam apibūdinimui (grandinės struktūra, funkcionavimas). Pvz.: Verilog, VHDL. • mainų protokolai (pvz., tinklo protokolai HTTP, FTP, POP). Komponuotojas (angl. link editor , linker ) – programa, kuriuos duomenys – vienas/keli objektiniai moduliai, o rezultatas – vykdomasis failas. Modulių sujungimui naudojamos vardų lentelės, sukurtos kompiliatoriaus kiekviename objektiniame modulyje.

56 Konsolė (informatikoje, angl. system console ) – interaktyvaus bendravimo su kompiuteriu priemonių visuma: vaizduoklis, klaviatūra, pelė. Konsolinis seansas – tai betarpiškas (ne per tinklą) vartotojo darbas su kompiuteriu. Tačiau dažniau terminas „konsolė“ reiškia programą su tekstine vartotojo sąsaja (pvz., Windows OS terpėje konsolė paleidžiama taip: Start àRun àcmd àEnter). Konteksto perjungimas (angl. context switch ) – vienos užduoties (proceso, gijos) vykdymo nutraukimo procesas, išsaugojant visą reikiamą informaciją, reikalingą norint tęsti užduoties vykdymą nuo nutraukimo vietos. Laisva programinė įranga (angl. free (bet ne freeware) software ) – programinė įranga, kurios naudojimo, analizės, modifikavimo, platinimo teisės juridiškai apsaugotos laisvomis licencijomis (pvz., BSD licencija). Laisvos PĮ naudotojai turi 4-as laisvės rūšis: • programą galima naudoti bet kokiu tikslu; • galima analizuoti programos veikimą ir pritaikyti ją savo reikmėms (tačiau modifikuotas išeities tekstas taip pat turi būti atviras); • galima laisvai platinti programos kopijas; • galima tobulinti programą (modifikuotas išeities tekstas turi būti prieinamas); Mašininis kodas (angl. native code ) – konkretaus kompiuterio komandų sistema, kuri interpretuojama tiesiogiai mikroprocesoriumi arba to kompiuterio mikroprogramomis. Pagal lygį mašininis kodas yra arčiausiai aparatūros. Kiekvienas procesorių tipas turi savo mašininį kodą, bet daugelyje modelių komandų rinkiniai dalinai sudaryti iš vienodų komandų. Procesorius A vadinamas suderinamu su procesoriumi B, jei A visiškai supranta B mašininį kodą. Jei procesorius A turi kelias komandas, kurių nesupranta procesorius B, tai B nesuderinamas su A. Metodas – paprogramė objektiškai-orientuotame programavime, kuri surišta su vienu iš šių dviejų: • su klase (tokiu atveju metodas vadinamas statiniu); • su objektu (vadinamas egzemplioriaus metodu, angl. instance method ). Microsoft Intermediate Language (sutrumpintai - MSIL ) – tarpinė programavimo kalba, sukurta Microsoft kompanijos .NET Framework platformai. MSIL kalbos JIT kompiliatorius yra Common Language Runtime dalis. Visi kompiliatoriai, palaikantys .NET platformą, transliuoja kodą iš aukšto lygio programavimo kalbos (C#, Managed C++, Visual Basic .NET, Visual J# .NET) į MSIL kalbą. MSIL pagal sintaksę primena

57 asemblerio kalbą. Šiuo metu didesnį paplitimą įgauna kitas terminas, reiškiantis tą patį – Common Intermediate Language . Mikroprograma (angl. firmware ) – programinė įranga, įrašyta (pvz., flash atminties pagrindu) į aparatinį įtaisą ir valdanti įtaiso darbą. Plačiai žinomas pavyzdys – BIOS (angl. Basic Input Output System, bazinė įvesties-išvesties sistema). Modulis (angl. module ) – funkcionaliai užbaigtas programos fragmentas, esantis atskirame faile su išeities tekstu. Turi interfeisą, kuris įgalina prieiti prie modulio funkcijų ir klasių. Modulių naudojimas leidžia skaidyti PĮ rašymą į smulkesnes dalis. Moduliai gali būti jungiami į paketus, o šie – į bibliotekas. Moduliai gali būti paprasti ir plėtimo (plėtimo moduliai parašyti kita programavimo kalba, dažnai – žemo lygio). Objektas – esybė virtualioje erdvėje, turinti tam tikrą būseną, aprašomą per objekto atributų reikšmes, ir elgseną, aprašomą galimomis operacijomis su atributais (operacijos vadinamos metodais). Grupuojami į stambesnes struktūras - klases. Susiję tokie terminai: • atributai – objekto savybės; • inicializacija – pradinių reikšmių priskyrimas objekto atributams; • klasės egzempliorius (angl. instance ) – konkretaus objekto aprašas, esantis atmintyje; klasės egzempliorius yra objektas su priskirtais atributais; • klasės egzemplioriaus sukūrimas (angl. instantiation ); • anoniminis objektas – objektas, priskirtas tam tikrai klasei, tačiau neturintis vardo. Objektinis modulis (dar vadinamas „objektiniu failu“) – failas, kuriame yra vienas iš tarpinių kompiliatoriaus darbo rezultatų. Objektinis modulis yra kuriamos programos išeities teksto tam tikros dalies atitikmuo. Savyje turi ypatingą kodą (dažnai vadinamą binariniu). Gali būti sujungtas su kitais objektiniais moduliais naudojant komponuotoją. Objektiškai-orientuotas programavimas (sutrumpintai - OOP) – programavimo paradigma, kurios pagrindinės koncepcijos – objektai ir klasės (arba prototipai mažiau žinomose kalbose su prototipavimu). Atsirado plėtojantis procedūrinio programavimo ideologijai. Nors OOP egzistuoja jau virš 40 metų, iki šiol nėra aiškaus ir visuotinai pripažinto apibrėžimo. Vieno iš programavimo kalbos Smalltalk kūrėjų Alano Kay‘aus (kuris taip pat laikomas vienu iš OOP „tėvu“) manymu, objektiškai-orientuotam programavimui būdingi tokie principai: 1. Viskas yra objektai.

58 2. Skaičiavimai vykdomi sąveikaujant objektams. Vienas objektas reikalauja, kad kitas atliktų tam tikrą veiksmą. Sąveikavimas (duomenų mainai) tarp objektų vykdomas žinutėmis, kuriuos objektai gauna ir siunčia. Žinutė – tai reikalavimas atlikti kažkokį veiksmą, papildytas argumentų seka, kurių gali prireikti vykdant tą veiksmą. 3. Kiekvienas objektas turi nepriklausomą atmintį, kuri susideda iš kitų objektų. 4. Kiekvienas objektas yra klasės, kuri nustato bendras objektų savybes, atstovu, vadinamu klasės egzemplioriumi. 5. Klasėje nustatomas objekto elgesys (funkcionalumas). Tokiu būdu visi objektai, kurie yra vienos klasės egzemplioriai, gali atlikti tuos pačius veiksmus. 6. Klasės sudaro medžio pavidalo struktūrą, kuri vadinama paveldimumo hierarchija. Atmintis ir elgesys, susiję su tam tikros klasės egzemplioriais, automatiškai prieinami bet kuriai klasei, kuri užima žemesnę padėtį medyje. Objektiškai-orientuoto programavimo požymiai: • Duomenų abstrakcija. Objektai supaprastintai apibūdina dalykinės srities esybes. Paprastai su jais dirbti yra patogiau, nei su visų esybės savybių ir elgsenos aprašu. • Inkapsuliacija. Tai principas, pagal kurį kiekviena klasė yra juoda dėžė. Naudojantis klasę mato tik klasės interfeisą (t.y. klasės savybių ir metodų sąrašą) ir nežino, kaip realizuotos klasės savybės ir metodai. Duomenis klasėje inkapsuliuojami taip, kad jų skaitymas/rašymas vyksta ne tiesiogiai, o per atitinkamus metodus. Teoriškai inkapsuliacija leidžia minimizuoti ryšių tarp klasių skaičių, todėl palengvina nepriklausomą klasių kūrimą ir jų modifikavimą. Taip pat reikėtų paminėti duomenų slėpimą – neatsiejamą OOP dalį, kuri rūpinasi duomenų matomumo sritimis. Tai yra loginis inkapsuliacijos tęsinys. Duomenų slėpimo tikslas – padaryti taip, kad vartotojas negalėtų sužinoti arba pakeisti vidinės objekto būsenos. • Paveldimumas (žr. „paveldimumas“). • Polimorfizmas (žr „polimorfizmas“). Pagal savo paradigmą OOP yra imperatyvus programavimas, papildytas inkapsuliacijos principu (suteikiančiu programai modulinę struktūra) ir paveldimumu (įgalinančiu pakartotinai naudoti parašytą kodą). OOP – žr. „objektiškai-orientuotas programavimas“.

59 Operacija (programavime, angl. operator , nepainioti su „operatorius“) – programavimo kalbų konstrukcija, dažnai turinti analogą matematikoje. Kiti pavadinimai: komanda, instrukcija. Pagal tipą operacijos skirstomos į: • aritmetines; • logines; • skirtas darbui su eilutėmis. Pagal notaciją operacijos skirstomos į (a, b – operacijos argumentai): • prefiksines (+ab); • infiksines (a+b); • postfiksines, arba lenkiškos notacijos (ab+); Pagal argumentų skaičių operacijos skirstomos į: • unarines – vienas argumentas (neiginys, unarinis minuso ženklas); • binarines – du argumentai (sudėtis, daugyba, dalyba ir pan.); • ternarines – trys argumentai (pvz., if-then-else sakinio analogas sąlyga ? veiksmas1 : veiksmas2). Operacinė sistema (angl. ) – trumpas apibrėžimas: valdančioji programa, skirstanti kompiuterio resursus procesams. Operatorius - programavimo kalbos simbolis(-iai), rodantis atliktiną operaciją. Pakartotinis kodo panaudojimas (angl. code reuse ) – programinių sistemų projektavimo metodologija, pagal kurią programa turi būti dalinai arba pilnai sudaryta iš anksčiau parašytų komponentų arba kitos sistemos dalių. Sumažina darbo krūvį kuriant sudėtingas sistemas. Paprasčiausias pakartotinio kodo panaudojimo būdas – išeities teksto kopijavimas į kitą vietą, labiausiai paplitęs būdas - bibliotekos (žr. „bibliotekos“). Pakartotinio kodo panaudojimo privalumai: • nėra būtinybės rašyti ir plėtoti reikiamą funkcionalumą (tuo užsiima kiti žmonės); • galimybė greitai sukurti naują sistemą, panaudojus jau sukurtus komponentus (ypač jei prieinami moduliai yra atviro kodo ir/arba priklauso laisvai PĮ); Trūkumai: • būtinybė kontroliuoti kuriamos PĮ versijos ir modulių versijų suderinamumą; • modulis/biblioteka yra mokami; • per mažas arba perteklinis (ir neefektyvus) modulio/bibliotekos funkcionalumas.

60 Paprogramė (angl. subroutine , subprogram ) – savarankiška programos dalis aukšto lygio programavimo kalbose. Yra du paprogramių tipai: • funkcija – turi bent vieną parametrą, be to, funkcijos vardas „laiko“ rezultatą; • procedūra – bet kuri paprogramė, kuri nėra funkcija (gali turėti arba neturėti parametrų). Paradigma (programavime) – idėjų ir koncepcijų visuma, kuri apibūdina programų rašymo stilių. Pvz., esant imperatyvaus programavimo paradigmai programa apibūdinama kaip veiksmų seka, funkciniame programavime – kaip funkcijų visuma, o objektiškai-orientuotame programavime – kaip sąveikaujančių objektų rinkinys. Šiuolaikinėje IT industrijoje paradigmą apibrėžia programuotojo instrumentų rinkinys: programavimo kalba ir naudojamos bibliotekos. Esama programavimo kalbų, kurios palaiko daugiau nei vieną paradigmą (Leda, Oz). Pagrindinės paradigmos: • imperatyvus programavimas (dauguma programavimo kalbų); • struktūrinis programavimas; • funkcinis programavimas (kalbos LISP, Haskell, ML); • loginis programavimas (Prolog); • objektiškai-orientuotas programavimas. Parametras – dydis, kurio reikšmė atskiria tam tikros aibės elementus tarpusavyje. Paveldimumas - vienas iš 4-ių svarbiausių OOP mechanizmų. Tai galimybė kurti klases iš klasių-protėvių (kartais vadinamų „superklasėmis“) išsaugant visas tėvinių klasių savybes ir metodus. Jei reikia, pridedami nauji metodai ir naujos savybės. Klasių rinkinys, susietas paveldimumo ryšiais, vadinamas hierarchija, tokiu būdu paveldimumas atvaizduoja konkrečią realaus pasaulio savybę. Perkrova (operatorių arba metodų, angl. operator overloading ) – vienas iš polimorfizmo realizacijos būdų. Pagal šį būdą vienoje matomumo srityje vienu metu gali egzistuoti keli metodai, turintys tą patį vardą ir skirtingus parametrų tipus. Perkrova yra kritikuojama dėl: • identifikacijos problemos, iškylančios konkrečios programavimo kalbos transliatoriaus kūrėjams: kaip nustatyti procedūrą, kuri turi būti panaudota dabar? • painiavos, atsirandančios kuriamuose išeities tekstuose. Taip pat žr. „polimorfizmas“.

61 Pertraukimų (išimčių) apdorojimas (angl. exception handling ) – programavimo kalbų mechanizmas, skirtas aprašyti programos reakciją į vykdymo klaidų atsiradimą ir kitas galimas problemas (vadinamąsias išimtis). Išimčių pavyzdžiai: • nulinė vardiklio reikšmė vykdant sveikų skaičių dalybos veiksmą. Tokios operacijos rezultatas neapibrėžtas, todėl tolimesni skaičiavimai beprasmiai; • klaida bandant nuskaityti duomenis iš išorinio įrenginio. Jei duomenys nėra gauti, suplanuoti veiksmai su duomenimis nebus įvykdyti; • operatyvios atminties trūkumas. Jei operacinė sistema negali išskirti taikomajai programai reikiamo atminties kiekio, programa nebus tinkamai vykdoma; • kompiuterio elektros maitinimo sutrikimas. Tokiu atveju programa gali bandyti išsaugoti apdorotus duomenis ir/arba savo būseną (esant rezerviniam maitinimui); • duomenų atsiradimas ryšio įrangos įėjimuose. Kad ir ką vykdytų programa, ji turi nuskaityti tuos duomenis, nes priešingu atveju jie bus prarasti. Išimčių tipai: • sinchroninės išimtys gali atsirasti tik tam tikrose, iš anksto žinomose programos vietose. Pvz: failo ar komunikacinio kanalo skaitymo klaidos, operatyvios arba pastovios atminties trūkumas (klaidos gali atsirasti tik atliekant skaitymo arba atminties išskyrimo veiksmus); • asinchroninės išimtys gali atsirasti bet kuriuo programos vykdymo momentu. Pvz.: elektros maitinimo dingimas arba naujų duomenų atėjimas ryšio kanalu. Jei programoje nėra savo išimčių apdorojimo mechanizmo, atsiradus išimtinei situacijai programos vykdymas bus sustabdytas ir bus parodytas tam tikras pranešimas. Tokiais atvejais išimčių apdorojimu tampa operacinės sistemos sudedamoji dalis (pvz., Dr. Watson programa Windows OS sudėtyje). Išimtinės situacijos ignoravimas yra pavojingas, kadangi programos vykdymo rezultatai tampa nenuspėjami. Jei išimčių apdorojimu rūpinasi pati programa, atsiradus išimtinei situacijai valdymas perduodamas į iš anksto parašytą doroklį (kodo bloką, funkciją arba procedūrą). Yra du visiškai skirtingi pertraukimų apdorojimo mechanizmai: • apdorojimas su grįžtamuoju ryšiu. Likvidavus išimtį sukėlusią problemą, programa grąžinama į būsena, kurioje ji gali veikti toliau. Įvykužius išimties doroklio kodą, valdymas grąžinamas tai programos instrukcijai, kurioje iškilo

62 išimtinė situaciją. Paprastai apdorojimas su grįžtamuoju ryšiu naudojamas esant asinchroninėms išimtims; • apdorojimas be grįžtamojo ryšio. Po išimties doroklio kodo įvykdymo valdymas perduodamas į tam tikrą iš anksto numatytą programos vietą. Taip pat pertraukimų apdorojimai skirstomi į: • struktūrinį išimčių apdorojimą. Programavimo kalboje turi būti specialios sintaksinės konstrukcijos, susidedančios iš kontroliuojamo kodo bloko ir pertraukimo doroklio; • nestruktūrinį išimčių apdorojimą. Realizuojamas kaip funkcijų, skirtų apdoroti kiekvieną išimčių tipą, registracija. Dauguma šiuolaikinių programavimo kalbų (C++, D, Delphi, Java, Ruby, Python ir visos .NET platformos kalbos) turi įtaisyta struktūrinio išimčių apdorojimo mechanizmą. Dažniausiai pertraukimas generuojamas specialiu rezervuotu kalbos žodžiu ( throw arba raise ), o pati išimtis programai yra objektas (kitaip tariant, sukuriamas objektas-išimtis ir generuojama išimtis, kurios parametras – tas objektas). Būtina paminėti ir išimčių apdorojimo saugumo sąvoką. Kodo dalis yra saugi šiuo požiūriu (angl. exception-safe ), jei vykdymo klaidos toje kodo dalyje neiššauks tokių efektų kaip: atminties nutekėjimą, įrašytų duomenų pažeidimą arba klaidingus rezultatus. Yra tokie išimčių apdorojimo saugumo lygiai: • Aukščiausias saugumo lygis (angl. vadinimas failure transparency arba no throw guarantee). Garantuojama, kad operacijos bus sėkmingos. Jei įvyksta išimtinė situacija, pertraukimas nekeliaus „auksčiau“. • Pagal principą – veiksmas bus padarytas arba bus atstatyta ankstesnė būsena. (angl. vadinamas commit or rollback semantics, taip pat - strong exception safety arba no-change guarantee). Operacijos gali nepavykti, duomenys lieka teisingi. • Bazinis saugumo lygis. Galimi šalutiniai efektai, išsaugoti duomenys bus teisingi. • Žemas saugumo lygis (angl. vadinamas no-leak guarantee). Gali atsirasti klaidingi rezultatai, tačiau nebus programos lūžio ir atmintis nebus nutekinta. • Žemiausias lygis. Jokių garantijų. Polimorfizmas – vienas iš 4-ių svarbiausių OOP mechanizmų. Trumpas apibūdinimas – vienas interfeisas, daug realizacijų. Tai reiškinys, kai tą patį metodo vardą atitinka skirtingas kodas priklausomai nuo to, kokios klasės objektas naudojamas

63 iškviečiant tą metodą. Minėtas kodas vadinamas polimorfiniu. Kodo polimorfizmas sukuriamas taip: klasėje pakeičiamas tėvinės klasės metodas būtinai išsaugant metodo signatūrą. Tėvinės klasės interfeisas nekinta. Toks mechanizmas vadinamas dinaminiu surišimu (skirtingai nuo statinio surišimo, kai kompiliacijos metu susiejamas funkcijos vardas ir jos kūnas). Procedūra (programavime, angl. procedure ) – žr. „paprogramė“, „metodas“. Procesas (informatikoje) [18] – standartas ISO 9000:2000 apibrėžia procesą kaip susijusių ir sąveikaujančių veiksmų visumą, kuri įėjimo duomenis paverčia išėjimo duomenimis. Paleidus kompiuterinę programą, sukuriamas procesas, turintis adresų operatyvioje atmintyje erdvę, registrų reikšmes, steką ir t.t. Proceso gyvavimo etapai: • sukūrimas; paprastai jie sukuriami: o kraunantis operacinei sistemai; o kai veikiantis procesas sukuria naują procesą; • vykdymas; • sustabdymas įvykus pertraukimui; iš šios būsenos procesas gali grįžti į vykdymo būseną; • nutraukimas, kuris būna dviejų tipų: o paprastas proceso darbo užbaigimas; o proceso vykdymo metu įvykus klaidai. Taip pat žr. „konteksto perjungimas“. Programa (informatikoje) – instrukcijų, paruoštų vykdymui kompiuteryje, rinkinys; kartais – išeities tekstai tam tikra programavimo kalba. Paprastai programa saugoma vykdomojo failo pavidalu pastovioje atmintyje. Taip pat žr. „procesas“, „vykdomasis failas“, „kodas“. Programavimas (siaurąja prasme) – algoritmų rašymas reikiama programavimo kalba. Plačiąja prasme - žr. „programų sistemų kūrimas“. Programavimo kalba – formali ženklų sistema, skirta kompiuterinių programų užrašymui. Nustato leksinių, semantinių ir sintaksinių taisyklių rinkinį, kuris apibūdina programos „vaizdą“ (pvz., kodo ilgį) ir veiksmus, kuriuos turi įvykdyti kompiuteris. Plačiai paplitusioms kalboms aprašyti egzistuoja tarptautiniai standartai; tam tikros organizacijos reguliariai publikuoja kalbų specifikacijas ir jų pokyčius. Būtina pabrėžti,

64 kad tokios kalbos kaip HTML, XML, SQL nėra programavimo kalbos (plačiau – „kompiuterinė kalba“). Programavimo kalbos gali būti skirstomos pagal: • kalbų veikimą: o kompiliuojamos kalbos; o interpretuojamos kalbos; • programavimo paradigmą; • pritaikymą: o skirtos įprastų komercinių ir nemokamų programų rašymui; o skirtos programuoti pramoninius įrenginius (kontrolerius); o mokomosios (pvz., Pascal). Taip pat gali būti mokomosios kalbos, kuriose sakiniai užrašomi ne anglų kalba. o ezoterinės kalbos, neturinčios praktinio pritaikymo, skirtos mąstymo lavinimui (pvz., COW, Whitespace, Spoon). Programavimo klaidos – [19] klaidos programos išeities tekste, dėl kurių programa veikia ne taip, kaip tikimasi. Yra trys pagrindinės programavimo klaidų rūšys: • klaidos, aptiktos kompiliacijos metu. Paprastai kompiliatorius tikrina, ar išeities tekste nėra sintaksės klaidų; jei jos yra, kompiliacija nutraukiama. Jei išeities tekstas rašomas ir kompiliuojamas integruotoje kūrimo aplinkoje (IDE), esant klaidai kompiliacijos metu IDE nurodys, kurioje vietoje yra ta klaida. Ištaisomos lengviausiai. Dažniausiai tokios klaidos yra: o neteisingai surinktas ženklas (paspaustas ne tas klavišas); o praleistas programos sakinių skyrybos ženklas (pvz., kabliataškis); o nedeklaruotų kintamųjų naudojimas; o klaidingas kviečiamos funkcijos/procedūros parametrų skaičius arba tipas; o klaidingo tipo reikšmės priskyrimas kintamajam. • vykdymo klaidos – klaidos, iškylančios vykdant operacijas, numatytas programoje. Angliškai vadinamos runtime errors (šie žodžiai gali pasirodyti, kai operacinė sistema nutraukia programos darbą). Vykdant programą iš IDE, IDE nurodys, koks kodo fragmentas tapo klaidos priežastimi. Galimos šio tipo klaidos: o bandymas atlikti neleistiną skaičiavimą (pvz., dalybą iš 0); o kreipimasis neleistinu atminties adresu (pvz., išėjimas už masyvo ribų);

65 o bandymas skaityti/rašyti iš/į neegzistuojančio failo. • loginės klaidos, atsirandančios projektavimo metu. Ištaisomos sunkiausiai. Šių klaidų suradimą palengvina derintuvas (žr. „derintuvas“). Programinė įranga (sutrumpintai – PĮ, angl. software ) – aibė programų, procedūrų, taisyklių ir dokumentacijos, susijusių su duomenų apdorojimo sistemos (kitaip tariant – kompiuterinės sistemos) veikla. Programinis serveris – [20] programa, kuri aptarnauja kitą programą, vadinamą klientu. Atėjus užklausai iš kliento, jam suteikiami tam tikri resursai arba suteikiamos tam tikros programinės paslaugos. Programiniai serveriai klasifikuojami pagal paslaugų, kurias jie suteikia, tipą: • universalūs serveriai, kurie savarankiškai nesuteikia jokių paslaugų, o suteikia supaprastintą interfeisą tam tikroms paslaugoms: o inetd (angl. internet super-server daemon) – programa iš UNIX operacinių sistemų šeimos; o RPC (angl. Remote Procedure Call) – procedūrų, kviečiamų nuotoliniu būdu per unifikuotą interfeisą, rinkinys; o (D)-COM (angl. (Distributed) Component Object Model) – technologija iš Windows OS šeimos, leidžianti programai vykdyti operacijas su duomenų objektais naudojant kitų programų procedūras; • maršrutizavimo serveriai – ne visai serveriai, greičiau - bazinės tinklo funkcionalumo palaikymo priemonės iš operacinės sistemos pusės; • tinklo tarnybos (angl. web services ) – palaiko tinklo funkcionavimą, pvz: o DHCP; o VPN serveriai, proxy serveriai; • informacinės tarnybos – paprasti serveriai, kurie leidžia sužinoti tam tikrą informaciją: o apie kompiuterį (time, daytime, motd); o apie vartotoją (finger, identd); o leidžiantys sinchronizuoti laiką (NTP); • failų serveriai – suteikia nuotolinį priėjimą prie failų. Veikia naudodami protokolus FTP, TFTP, SFTP, HTTP bei NSF, SMB. • priėjimo prie duomenų serveriai (pvz., LDAP);

66 • apsikeitimo pranešimais serveriai (SMPT, POP3, IMAP, IRC, ICQ); • nuotolinės prieigos serveriai, suteikiantys konsolinę prieigą prie nuotolinės sistemos (telnet, SSH, terminalinis serveris Windows OS terpėje); • žaidimų serveriai, leidžiantys vartotojams naudotis viena žaidimo aplinka; • serverinės operacinės sistemos (pvz, Windows Server 2008, FreeBSD); Programų sistemų kūrimas (angl. software engineering/development ) – veiklos sritis (profesija) ir inžinerijos disciplina. Naudoja informatikos, matematikos, projektų valdymo ir kitų mokslų pasiekimus. PS kūrimas sprendžia kokybės, patikimumo ir kainos balanso problemą. Taip pat žr. „programų sistemų kūrimo procesas“. Programų sistemų kūrimo procesas – PS kūrimo struktūra. Pagal vieną iš galimų apibūdinimų, PS kūrimo proceso sudėtinės dalys (žingsniai): • analizė; • projektavimas; • kodo rašymas ir kompiliavimas; • testavimas ir klaidų šalinimas; • dokumentavimas; • diegimas; • palaikymas; • demontavimas. Kiti galimi žingsniai: programavimo paradigmos pasirinkimas, planavimas. PS kūrimo proceso metodai: • Agile šeima, vienijanti kelis metodus, vienas jų - FDD (angl. Feature Driven Development ); • Cleanroom; • iteratyvus (ciklinis); • RAD (angl. Rapid Application Development ); • Scrum; • RUP (angl. Rational Unified Process ); • OpenUP (UP – angl. Unified Process ); • MSF (Microsoft Solutions Framework ); • spiralinis;

67 • krioklio; • V raidės; • XP (angl. Extreme Programming ), vienas smulkesnių - TDD. Registras (procesoriaus) – labai greita atmintis procesoriaus luste, skirta saugoti tarpinius skaičiavimo rezultatus arba duomenis, reikalingus procesoriui. Registrų tipai: • IP (angl. instruction pointer ). 32 bitų architektūroje – EIP, 64 bitų - RIP. Rodo sekančios komandos poslinkį kodo segmento atžvilgiu; • segmentiniai registrai (CS,DS,SS,ES,FS,GS) rodo į segmentus; • duomenų registrai (EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP) saugo tarpinius skaičiavimų rezultatus; • flagų registras. 32 bitų architektūroje – EFLAGS, 64 bitų – RFLAGS. Saugo esamą procesoriaus būseną. Resursai (informacinėse technologijose) – galimybės, kurias suteikia kompiuterio komponentai. Kompiuterio resursai yra užimami ir atlaisvinami. Resursų tipai: • procesoriaus laikas; • atmintis o operatyvi (taip pat virtuali, žr. „virtuali atmintis“); o nuolatinė (pvz., kietuosiuose diskuose); • tinklas (arba tinklo pralaidumas). Sakinys (programavime, angl. statement ) - mažiausia autonominė programavimo kalbos dalis. Sakinys gali būti sudarytas iš vienos operacijos. Semantika (programavime) – atskirų kalbos konstrukcijų iššaukiamos elgsenos apibūdinimo sistema. Semantika nustato algoritminės kalbos sakinių prasmę. Serveris (angl. server ) – turi dvi reikšmes: • aparatinis serveris (dar vadinamas tarnybine stotimi) – tai kompiuteris, kuriame vykdomos specialios paskirties operacinės sistemos ir programos. Toks kompiuteris dažnai (bet nebūtinai) yra galingesnis nei staliniai kompiuteriai ir komplektuojamas iš patikimesnių elementų (pvz., naudojama operatyvi atmintis su klaidų taisymu, greiti ir ilgaamžiai kietieji diskai). • programinis serveris (žr. „programinis serveris“). Sintaksė (programavime) aprašo programų struktūrą kaip simbolių rinkinį (t.y. nepriklausomai nuo programos turinio). Kiekviena programavimo kalba turi sintaksės

68 aprašą, kuris paprastai apibūdinamas BNF (Bekuso-Nauro forma). Dažniausiai sintaksė tikrinama iki kompiliacijos (t.y. kompiliatorius nėra paleidžiamas, kol išeities tekste yra sintaksės klaidų). Sintaksė kartu su semantika yra svarbūs kalbos požymiai. Gana reikšminga yra funkcijos aprašo sintaksė – griežta taisyklė, pagal kurią turi būti rašomas programavimo kalbos funkcijos kodas. Jei funkcijos aprašo sintaksė klaidinga, programa nebus sukompiliuota. Funkcijos aprašo sintaksinės klaidos: • klaidingas funkcijos vardas (didžiosios/mažosios raidės, ne ta vardų sritis); • klaidingas argumentų skaičius; • klaidingas argumentų tipas (pvz., vietoj eilutės perduotas sveikas skaičius); • klaidingas rezultato tipas (pvz., rezultato tipas visai nenurodytas). Skaičiai su fiksuotu kableliu (angl. fixed-point numbers ) – realių skaičių vaizdavimo forma, kai kompiuterio atmintyje jie įrašomi kaip sveiki skaičiai. Kablelis dedamas reikiamoj vietoj (pvz., 12,34). Yra nedaug programavimo kalbų, turinčių įtaisyta skaičių su fiksuotu kableliu palaikymą, kadangi skaičių su slankiuoju kableliu naudojimas iš esmės yra paprastesnis bei tikslesnis (kita vertus, beveik visos duomenų bazių valdymo sistemos ir kalba SQL tokį palaikymą turi). Skaičiavimai su tokiais skaičiais naudojami ten, kur svarbus greitis (pvz., žaidimuose) ir nereikalingas didelis tikslumas. Tačiau tokių skaičių labai siauras diapazonas, su perpildymo grėsme viename diapazono gale ir tikslumo praradimu kitame diapazono gale. Pvz., jei reikalingas trijų reikšminių skaitmenų tikslumas, 4-ių baitų skaičius su fiksuotu kableliu duoda 6-ių eilių diapazoną (skirtumas tarp didžiausio ir mažiausio skaičiaus – maždaug 10 6), o 4-ių baitų single tikslumo skaičius su slankiuoju kableliu suteiks 70-ies eilių diapazoną. Skaičiai su slankiuoju kableliu (angl. floating point numbers ) – [21] realių skaičių vaizdavimo forma, kurioje skaičius saugomas kaip mantisė, padauginta iš 10-ies kokiu nors laipsniu. Atsirado sprendžiant skaičių su fiksuotu kableliu siauro diapazono problemą (žr. „skaičiai su fiksuotu kableliu“). Dažniausiai sutinkamas slankaus kablelio skaičių apibūdinimas apibrėžiamas standartu EEE 754. Matematinių operacijų su tokiais skaičiais realizacija gali būti tiek aparatinė, tiek programinė. 64-ių bitų skaičiaus tikslumas maždaug nuo 2 -58 ×2-1022 iki 1×2 1024 (~ 10 -324 - 10 308 ). Skirtingai nuo skaičių su fiksuotu kableliu, maži skaičiai su slankiuoju kableliu „tankesni“, o dideli – „retesni“ (santykinis tikslumas lieka toks pat). Daugumoje programavimo kalbų skaičius su slankiuoju kableliu 1,528×10 -25 bus užrašomas kaip 1.528E-25. Tokių skaičių apdorojimo

69 greitis – vienas pagrindinių kompiuterių ir superkompiuterių greitaveikos rodiklis (angl. FLOPS, Fl oating point Operations Per Second , paprastai naudojamas TFLOPS). Skaičius su slankiuoju kableliu susideda iš: • mantisės (parodo skaičiaus reikšmę neatsižvelgiant į jo eilę, pvz., 245); • mantisės ženklo (rodo, teigiamas skaičius ar neigiamas, +/-); • skaičiaus eilės (×10 n); • eilės ženklo (+/-). Smėlio dėžė (angl. sandbox ) – terminas iš kompiuterinio saugumo srities, atskiras virtualios mašinos atvejis. Tai mechanizmas, skirtas saugiam programų vykdymui. Smėlio dėžė suteikia griežtai kontroliuojamų resursų (pvz., atminties) rinkinį. Kiti resursai (pvz., įvedimas-išvedimas) emuliuojami arba smarkiai apribojami. Smėlio dėžės naudojamos netestuoto kodo, kodo iš nežinomo šaltinio vykdymui, taip pat – virusų nukenksminime (siekiant išsiaiškinti, kaip veikia konkretus virusas). Stekas – duomenų struktūra, kurioje elementų apdorojimas vyksta pagal LIFO principą (angl. Last In – First Out , paskutinis atėjęs pirmas išeis). Vadinamasis call stack saugo grįžimo iš paprogramių adresus. Swap (informacinėse technologijose) – procesas, kai iš operatyvios atminties iškeliami šiuo metu nenaudojami duomenys į išorinę laikmeną. Atitinkamai, swap-failas - failas arba kietojo disko skirsnis, į kurį iškeliami duomenys. Efektyvus, kai atmintyje yra daug programų, beveik nenaudojančių procesoriaus laiko. Jei swap-failo dydis nėra fiksuotas, kompiuterio darbo metu jis fragmentuosis, dėl to programos po truputį veiks vis lėčiau. Taikomoji programinė įranga (angl. application software , application ) – programinė įranga, valdoma vartotojo ir atliekanti vieną arba kelias susijusias specifines užduotis. Taikomosios PĮ pavyzdžiai: • tekstų doroklis; • skaičiuoklė; • daugialypės terpės grotuvas; • naršyklė. Tinklas (informatikoje) – kompiuterių ir tinklinės įrangos (pvz., maršrutizatorių), susietų ryšio kanalais, aibė. Pagal paskirtį tinklai skirstomi į:

70 • skaičiavimų tinklus, kurie skirti mainytis duomenimis tarp vartotojų; • informacinius tinklus, kurie suteikia tam tikro pobūdžio informaciją vartotojams; • mišrius tinklus, kurie turi tiek pirmų, tiek antrų tinklų požymius. Pagal kompiuterių bendravimą tinklai skirstomi į: • klientas-serveris; • vieno rango tinklas (p2p), kuriame kiekvienas kompiuteris yra ir klientas, ir serveris; • daugelio rangų tinklas; • mišrus tinklas. Taip pat tinklai gali būti skirstomi pagal aptarnaujamos teritorijos dydį (LAN, MAN, WAN ir t.t.), pagal topologiją (žvaigždė, žiedas ir t.t.), pagal funkcinę paskirtį, pagal naudojamą protokolą (Ethernet, Token Ring ir t.t.). Tinklinė (tinklo) programa – taikomoji programa, veikianti pagal kliento-serverio modelį. Klientas šiuo atveju yra vartotojo naršyklė, o serveris – tinklo serveris. Duomenų apsikeitimas vyksta per tinklą. Tinklo programa rašoma vienoje, o vykdoma keliose platformose (tiek aparatinėse, tiek programinėse). Serverio pusėje naudojama: • technologijos (AJAX, Microsoft ASP.NET); • programavimo kalbos (Sun Java, Perl, PHP, Python, Ruby). Kliento pusėje vykdomos technologijos: Sun Java ir JavaScript, Adobe Flash, Microsoft ActiveX ir Silverlight. Taip pat žr. „tinklo serveris“. Tinklo serveris (angl. web server ) – programinis serveris, gaunantis iš klientų HTTP (angl. HyperText Transfer Protocol ) užklausas ir siunčiantis HTTP atsakymus. Paprastai klientas - tai vartotojo naršyklė. Labiausiai paplitę tinklo serveriai: • Apache; • Microsoft IIS; • nginx; • qq.com; • Google Web Server. Tipai (duomenų) – fundamentinė sąvoka programavime. Bet kokie duomenys, su kuriais dirba vykdoma programa, priklauso tam tikram duomenų tipui. Duomenų tipas nusako:

71 • duomenų reikšmių aibę; • galimų operacijų su duomenimis aibę; • gali nusakyti (bet nebūtinai): o reikšmių saugojimo būdo realizaciją; o operacijų vykdymo būdo realizaciją. Tipizacija – dаrbas su kintamųjų tipais. Tipizacija skirstoma pagal: • tipų kontrolės laiką: o dinaminė tipizacija - tipų kontrolė vykdoma programos vykdymo metu; o statinė tipizacija - tipų kontrolė vykdoma kompiliacijos metu; • griežtumą: o griežta tipizacija – tipų suderinamumą kontroliuoja transliatorius (viena iš nedaugelio programavimo kalbų, kur ji yra - Ada); o negriežta tipizacija – tipų suderinamumo transliatorius nekontroliuoja Transliacija – programos kodo, parašyto viena programavimo kalba, vertimas į tuos pačius veiksmus atliekantį kodą, parašytą kita programavimo kalba. Terminas gali būti vartojamas turint omeny ne tik programavimo kalbų transformacijas (Fortan, C), bet ir kitų kompiuterinių kalbų transformacijas (HTML). Transliatorius - programa, keičianti vienos programavimo kalbos išeities tekstą į kitos kalbos išeities tekstą. Paprastai keitimas būna į žemesnio lygio kalbos tekstą, nors galimas, pvz., transliatorius iš aukšto lygio programavimo kalbos Pascal į aukšto lygio programavimo kalbą C. Jei pradinė kalba yra asemblerio kalba, o gautoji kalba – mašininis kodas, transliatorius vadinamas asembleriu. Paprastai transliatorius fiksuoja sintaksės klaidas, formuoja identifikatorių žodyną ir pan. [25] Skirtumas tarp terminų „transliatorius“ ir „kompiliatorius“: kompiliatorius transliuoja aukšto lygio programavimo kalbos tekstą į kalbą, artimą mašininiam kodui, ir sukomponuoja kelis modulius į vieną vykdomąji failą, todėl galima sakyti, kad transliatorius yra sudėtinė kompiliatoriaus dalis. Galima ir kitas skirtumo (ir panašumo) tarp šių dviejų terminų apibūdinimas: jei pradinė kalba yra aukšto lygio programavimo kalba, o gautoji – asemblerio kalba, transliatorius vadinamas kompiliatoriumi. Valdomas kodas (angl. managed code ) – programos, vykdomos virtualioje mašinoje, kodas. Vykdomoji aplinka bet kuriuo momentu gali nutraukti valdomo kodo vykdymą ir gauti informaciją apie esamą būseną. Šiame kontekste paprastas mašininis

72 kodas vadinamas nevaldomu (angl. unmanaged ). Formaliai žiūrint, bet koks kodas, vykdomas derintuve, yra valdomas. http://www.rsdn.ru/forum/dotnet/3283182.flat.aspx Vykdomasis failas (angl. executable file ) – failas, kurio turinys paruoštas vykdymui. Dažniausiai vykdomajame faile yra mašininis kodas (tam tikro procesoriaus instrukcijos dvejetainiu pavidalu), nors gali būti ir interpretuojamos kalbos instrukcijos. Taip pat žr. „mašininis kodas“. Vykdomųjų failų statusą žymi arba failo plėtinys (pvz., *.exe Windows OS šeimoje), arba specifiniai metaduomenys (leidimo vykdyti bitas UNIX šeimos operacinėse sistemose). Šiuolaikiniai vykdymo failai gali turėti nemažą dalį duomenų, kurie nėra procesoriaus instrukcijos: aplinkos, kurioje gali būti vykdomas failas, aprašas, duomenys programos derinimui ir pan. Neretai dvejetainiai failai turi kreipinius į išorines bibliotekas. Tokiu atveju dvejetainiai failai yra priklausomi ne tik nuo aparatinės platformos (procesoriaus), bet ir nuo programinės platformos (nuo operacinės sistemos ir jos komponentų versijos). Dvejetainių (binarinių) failų vykdymą atlieka: • aparatinės priemonės – procesoriai; • programinės priemonės – virtualios mašinos. Virtuali atmintis – technologija, skirta padidinti bendrą prieinamos operatyvios atminties kiekį, perkeliant nereikalingus šiuo metu duomenis į išorines laikmenas. Fizinės operatyvios atminties kiekis lieka toks pat. Ši technologija leidžia: • supaprastinti atminties adresavimą; • racionaliai valdyti operatyvią atmintį (saugoti joje tik dažnai naudojamus duomenis); • izoliuoti procesus vienas nuo kito. Virtualios atminties organizavimo būdai: • puslapinė – operatyvi atmintis skirstoma į puslapius (pvz., 4096 baitų ilgio), kurie yra minimalus išskiriamos atminties vienetas. Procesas kreipiasi į operatyvią atmintį, naudodamas virtualios atminties adresą, kuris susideda iš puslapio numerio ir poslinkio to puslapio viduje. Operacinė sistema transformuoja virtualų adresą į fizinį (jei reikia, duomenys perkeliami iš išorinės laikmenos į operatyvią atmintį).

73 • segmentinė – operatyvi atmintis skaidoma į segmentus, kurių dydis nėra fiksuotas. Vieno proceso segmentai gali nebūtinai būti greta. Virtualus adresas šiuo atveju susideda iš segmento numerio ir poslinkio to segmento viduje. Šio atminties organizavimo būdo trūkumai: o atminties fragmentacija (kuri sulėtina darbą su duomenimis); o lėtesnė virtualaus adreso transformacija į fizinį adresą. Taip pat žr. „swap“. Virtuali mašina (angl. virtual machine ) – programinė arba aparatinė aplinka, vykdanti tam tikrą kodą, arba tokios aplinkos specifikacija (pvz., „programavimo kalbos C virtuali mašina“). Paprastai virtuali mašina emaliuoja realaus kompiuterio darbą. Viename kompiuteryje gali veikti kelios virtualios mašinos. Virtualios mašinos gali būti naudojamos: • informacijos apsaugai ir procesų teisių apribojimui (žr „smėlio dėžė“); • programinės įrangos arba naujos kompiuterinės architektūros greitaveikos tyrimams vykdyti; • įvairių aparatinių architektūrų emuliacijai (pvz., videožaidimų konsolės emuliatorius); • meinfreimų ir kitų galingų kompiuterių resursų naudojimo optimizacijai; • kenksmingose programose: kompiuterinis virusas PMBS, aptiktas 1993 m., ir rootkit‘as SubVirt, sukurtas 2006 m. Microsoft Research laboratorijoje, sukurdavo virtualią sistema, kurioje „uždarydavo“ visas vartotojiškas programas, įskaitant apsaugines (pvz., antivirusą); • kliento-serverio architektūros modeliavimui viename fiziniame kompiuteryje (sudėtinė tokio modeliavimo dalis – kompiuterių tinklo emuliavimas); • klasterių valdymo supaprastinimui: virtualios mašinos gali „migruoti“ iš vieno kompiuterio į kitą nenutraukiant skaičiavimų. Žemo lygio programavimo kalba – programavimo kalba, artima mašininiam kodui. Skirta palengvinti mašininio kodo skaitomumą naudojant suprantamas santrumpas (pvz., „mov“ – sutrumpintas angl. žodis „move“) užuot rašant vienetų ir nulių seką (mašininį kodą). Žymiausias pavyzdys – asemblerio šeimos kalbos. Prie žemo lygio programavimo kalbų sąlyginai galima priskirti Microsoft Intermediate Language ir Java bait-kodą.

74

Priedas 2. .NET kalbos

Žemiau pateiktas .NET kalbų sąrašas, kuriame yra kalbų pavadinimai ir jų dialektai. Skliausteliuose – kalbos kūrėjas (žmogus, kompanija arba kompanijos padalinys). Kartais po kalbos pavadinimu pateiktas trumpas paaiškinimas. Šis kalbų sąrašas sudarytas remiantis daugeliu šaltinių, kurių sąrašas yra nurodytas [4]:

Ada • A# (Dr. Martin C. Carlisle) Port of Ada to .NET APL • Dyalog APL (Dyalog Ltd) AsmL • Abstract State Machine Language (MS Research) Assembly • ASM to IL (bjarke) Basic • Visual Basic.NET (Microsoft) • mbas (Novell (Mono projektas)) • bmcs (Jambunathan) Basic Variants • KPL (Morrison Schwartz) Kid's BETA • BETA.Net (Aarhus universitetas, Danija) BF • BF.NET (Simon Howard) Boo (sintaksė, įkvėpta Python kalbos) • boo (Rodrigo B. de Oliveira ir Georges Benatti)

75

C • lcc (Princeton) ANSI C • cscc (Portable.NET) ANSI C C++ • Managed Extensions for C++ (Microsoft) C# • C# (Microsoft) • mcs (Mono/Novell) • cscc (DotGNU Portable.NET) C# Variants • CSI (Steve Donovan) A Simple C# Interpreter • Cω (MS Research) Comega • eXtensible C# (ResolveCorp) Language Extension • Spec# (MS Research) • Polymorphic C# (MS Research); kalba buvo sujungta su Comega • MC# (Yury P. Serdyuk, Vadim B.Guzev) Multiprocessor C# • Metaphor (Gregory Neverov iš Queensland University of Technology) • paxScript.NET (VIRT laboratorija) • Parallel C# (Parallel Language Research Project) • Knowledge.Net (Knowledge .NET Project komanda) Caml • F# (MS Research) (ML and Caml), Abstract IL, ILX • OCAMIL (Emmanuel Chailloux & Raphael.Montelatici)

76 CAT • CAT (Christopher Diggins) CFML • BlueDragon (New Atlanta Communications, LLC.) Clarion# • Clarion# (SoftVelocity) Cobol • NetCOBOL (Fujitsu) COBOL .NET platformai • NeoKicks (Fujitsu) • Net Express (Micro Focus) • KICKS for .NET™ (Intensity Software) Cobra • The Cobra Programming Language (Cobra Language LLC) CULE • CULE.Net (Software Perspectives) E# • E# (Justin Chase) Eiffel • Eiffel ENViSioN! (Eiffel Software) Flash • csswf (Robin Debreuil) Forth • Delta Forth .NET (Valer BOCAN) • MrLoose.Forth (MrLoose) Fortran • Lahey/Fujitsu Fortran for .NET (Lahey Computer Systems, Inc.) • FTN95 (Salford Software Ltd.) Fortran .NET platformai G# • G# (Ernest Booth)

77 Haskell • Hugs98 for .NET (kūrėjas nežinomas) • Haskell for .NET (Nigel Perry) using Mondrain for .NET • Haskell.net Project (kūrėjas nežinomas) IL/MSIL • MSIL (Microsoft) • ilasm (Microsoft) IL Assembler • Mono Assembler (Novell (Mono projektas)) • Portable.NET Assembler (dotGNU) Java • Visual J# .NET (Microsoft) • IKVM.NET (Jeroen Frijters) Java VM for .NET JavaScript • JScript .NET (GotDotNet) • JANET (kūrėjas nežinomas) JavaScript-compatible language • DotGnu JScript (dotGNU) Lexico • Lexico (kūrėjas nežinomas) ispaniška

78 LISP • clisp (Microsoft) • DotLisp (Rich Hickey) • L# (L Sharp .NET) (Rob Blackwell) LISP-based script language • FOIL (Rich Hickey and Eric Thorsen) • RDNZL (Edi Weitz) .NET Layer, skirtas Common Lisp LISP-like • MBase (Meta Alternative) • IronLisp (CodePlex bendruomenė) LOGO • MonoLOGO (Richard Hestilow) • TurtleTracks.net Logo (Patras universitetas) Lua • Lua.NET (PUC-RIO), sujungia Lua su Rotor Mercury • Mercury on .NET (kūrėjas nežinomas) Mixal Assembly Language • MixNet (SourceForge) Modrian • Mondrian for .NET (Nigel Perry) Modula-2 • GPM/CLR (Queensland University of Technology) • Nemerle (Wroclaw universitetas) Oberon • Active Oberon for .NET (ETH Zuerich) Pan • Pan# (programavimo kalba viduriniam išsilavinimui)

79 Pascal • TMT .NET (TMT) Pascal kompiliatorius Pascal Variants • Chrome (RemObjects) • Delphi (CodeGear/Borland) • Delphi.NET (Marcus Schmidt) Interoperability tools • (QUT) Perl • Perl for .NET, PerlNET (ActiveState SRL.) • PerlSharp (Joshua Tauberer) PHP • PHP4Mono (Raphael Romeikat) • PHP4Apps (Daaron) • PHP Sharp (kūrėjas nežinomas) • PHP Mono Extensions (Sterling Hughes) • (CodePlex Community) • IronPHP (Ross Girshick) Processing • Processing.NET (Jonatan Rubio ir kiti iš SourceForge) Prolog • P# (Jon Cook at Univ. of Edinburgh) • Prolog.NET (Oregon Institute of Technology) Python • IronPython (Microsoft) • KOBRA (Chetan Gadgil) • Python for .NET (Mark Hammond) • Python integracija į .NET platformą (Brian Lloyd) • IronPython (Microsoft)

80 RPG • Visual RPG .NET platformai (ASNA) Ruby • IronRuby (Microsoft) • Mono Ruby.NET (Jaen,Mono Developers) • NetRuby (arton) • Rook (Castle Project) • Ruby/.NET Bridge (Ben Schroeder, John Pierce) • RubyCLR (John Lam) • Ruby.NET (Queensland University of Technology) Scala • Scala on Microsoft.NET (Martin Odersky, LAMP at EPFL) Scheme • Common Larceny (Northeastern University) • Dot-Scheme (Pedro Pinto) PLT Scheme Bridge • Bigloo (Inria Sophia-Antipolis) • Hotdog (Northwestern University) • Tachy (Ken Rawlings) • Scheme.NET (Indiana University) • IronScheme (CodePlex Community) Smalltalk • S# (SmallScript LLC) • #Smalltalk (John Brant & Don Roberts) • VMX Smalltalk (Robowiz Corporation) • LSWVST.NET (Lesser Software)

81 SML • SML.NET (MS Research, Cambridge universitetas) Spry • Spry (Mark Hahn) Synergy • Synergy (Synergex) Tcl/Tk • TickleSharp (jscottb, Novell Forge) • Jacl.Net (Mailframe) Visual Objects • Vulcan.NET (GrafX Software Development) Zoon (Pascal, Modula-2 ir Oberon šeima) • (Eugene Zueff)

82 Literatūros šaltiniai

1. Симон Робинсон, Олли Корнес и др. C# для профессионалов . Том I. Издательство „ЛОРИ“, 2003, 516 p. (Simon Robinson, Ollie Cornes, Jay Glynn and others Professional C#, Wrox Press Ltd., 2001 ) 2. Ларс Пауэрс, Майк Снелл. Microsoft Visual Studio 2008 . БХВ-Петербург, 2009. ( Powers, Lars and Snell, Mike, Microsoft Visual Studio 2008, Pearson Education, Inc, 2008 ) 3. Giesela Engeln-Müllges, Frank Uhlig, M. Schon (vertėjas), F. Uhlig (vertėjas). Numerical Algorithms with C . Springer. 1996. 4. dotnetpowered Language List http://www.dotnetpowered.com/languages.aspx 5. Complete Comparison for VB.NET and C# http://www.codeproject.com/KB/dotnet/vbnet_c__difference.aspx 6. VB.Net — дорога в будущее http://www.mista.ru/net/vbnet_future.htm 7. sisteminė programa http://www.likit.lt/term/s/sistemine2_programa.html 8. taikomoji programa http://www.likit.lt/term/t/taikomoji_programa.html 9. VB.NET and C# Comparison http://www.harding.edu/fmccown/vbnet_csharp_comparison.html 10. А ты готов к Visual Basic.NET? http://www.interface.ru/microsoft/VBNET.htm 11. C# Keywords http://msdn.microsoft.com/library/x53a06bb.aspx 12. Visual Basic Language Keywords http://msdn.microsoft.com/en-us/library/ksh7h19t(VS.71).aspx 13. Programming Language Popularity http://langpop.com/widget/ 14. Visual Studio Express Edition http://msdn.microsoft.com/vstudio/express/default.aspx 15. Microsoft Unveils Next Version of Visual Studio and .NET Framework http://www.microsoft.com/presspass/press/2008/sep08/09-29VS10PR.mspx 16. Šiuo metu puslapis peradresuojamas į http://www.microsoft.com/visualstudio/en- gb/ http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx

83 17. Šiuo metu puslapis peradresuojamas į http://www.microsoft.com/visualstudio/en- us/visual-studio-events#launch http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx#launch 18. Procesas (informatika) http://lt.wikipedia.org/wiki/Procesas_(informatika) 19. Какие существуют виды ошибок? http://program.rin.ru/razdel/html/298.html 20. Сервер (программное обеспечение) http://ru.wikipedia.org/wiki/Сервер_(программное_обеспечение) 21. Числа с плавающей запятой http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой 22. Householder transformation http://en.wikipedia.org/wiki/Householder_transformation 23. Собственные вектора и значения матриц. Метод Хаусхолдера http://www.cyberguru.ru/programming/programming-theory/matrix-vectors- values-page8.html 24. Трёхдиагональная матрица http://ru.wikipedia.org/wiki/Трёхдиагональная_матрица 25. Transliavimo metodai http://mindeez.puslapiai.lt/files/Transliavimo_metodai.pdf 26. История появления языка программирования C# http://neoaxis-rus.com/index.php?nma=catalog&fla=stat&cat_id=4&nums=3 27. История языка программирования C# http://www.interestprograms.ru/articles/historyprogramming/historycsharp.php

84 Anotacija

Šiame darbe išdėstyta dviejų Microsoft programavimo kalbų – C# ir VB.NET - analizė. Kalbos palygintos įvairiais aspektais – istorijos, sintaksės r pan. Taip pat pateikti eksperimentiniai rezultatai, atvaizduojantys elementarių programų, parašytų tiek pirmąja, tiek antrąja kalba, vykdymo greičius. Parašytos programos apėmė dvi kategorijas: matematiniai skaičiavimai ir darbas su įvesties/išvesties sistema. Visi gauti rezultatai išnagrinėti atitinkamuose skyriuose.

85 Santrauka

Šio magistro baigiamojo darbo tema – „C# ir VB.NET kalbų palyginimas taikomųjų programų kūrimo požiūriu, darbo autorius – Arnoldas Judinas. Darbe įvairiais požiūriais analizuojamos dvi Microsoft korporacijos sukurtos kalbos: C# ir Visual Basic .NET. Darbas susideda iš dviejų pagrindinių dalių: teorinės analizės ir skaitinių programavimo eksperimentų. Kiekviena iš šių dviejų dalių savo ruožtu susideda iš smulkesnių (pvz., skaitinių eksperimentų metu buvo analizuojamos tiek matematinių, tiek įvesties/išvesties operacijų atlikimo greitis). Pasirinkau šiuos kriterijus kalbų lyginimui: • šių dviejų kalbų istorija; • sintaksės panašumai ir skirtumai; • vykdomo kodo greitaveika. Darbo metu paaiškėjo, kad C# kalba yra pranašesnė už VB.NET. Jos sintaksė lengviau perprantama paprastam programuotojui, kadangi ji artimesnė C kalbos (kuri yra standartas de facto) sintaksei. C# kodo vykdymas reikalauja mažiau laiko nei VB.NET kodo vykdymas. Pagaliau, pati Microsoft kompanija laiko C# svarbiausia taikomųjų (ne tinklo) programų kūrimo kalba. Magistro darbo pabaigoje pateikti du priedai. Pirmas priedas - išsamus programavimo terminų žodynas, kuris yra būtina norint suprasti viską, apie ką eina kalba pagrindinėje darbo dalyje. Antras priedas – Microsoft .NET platformos palaikomų programavimo kalbų sąrašas, kurio dydis parodo rimtą kompanijos požiūrį į savo produktą. Ko gero, šiame sąraše ras savo mėgstamą kalbą bet kuris pasaulio programuotojas. Eksperimentų metu sukurtų programų išeities tekstai įrašyti į kompaktinį diską, pateiktą kartu su atspausdintu magisto darbu.

86 Summary

This scientific work was written by Arnoldas Judinas. Its title is “C# and VB.NET comparison in terms of application development”. My master thesis compares two programming languages developed by Microsoft Corporation: C# and Visual Basic .NET. There are two main parts of this scientific work: theoretic analysis and programming experiments. Each of these parts is divided into smaller parts (i.e. during programming experiments I have analyzed time that take both mathematic operations and input/output operations). I have chosen these criteria to compare programming languages: • history; • similarity or difference of syntax; • rapidity of code that is being executed. While writing master thesis the superiority of C# language became obvious. Its syntax is easier to understand because it is closer to C syntax (which is de facto standard). The execution of C# code takes less time than the execution of VB.NET code. Finally, Microsoft itself considers C# as the main programming language for non-web application development. At the end of the master thesis I have supplied three supplements. First of all, it is a comprehensive vocabulary. It explains all the specific terms which can be found in my master thesis. The second supplement is a full list of .NET programming languages. This list shows serious Microsoft‘s attitude to .NET framework. Probably every on our planet will be able to find his/her favorite programming languages in that list. The source code of applications that were used during benchmark is written to CD which is attached to printed master thesis.

87