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

Similar documents
JAVA pagrindai Lek. Liudas Drejeris

Unit 4. Lesson 4.1. Managing Data. Data types. Introduction. Data type. Visual Basic 2008 Data types

El. pašto konfigūravimas

Come to the TypeScript

C++ programavimo kalba. Konstruktorius, destruktorius, klasių metodų modifikatoriai, objektų masyvai (4 paskaita)

C programavimo kalba. 3 paskaita (Sąlygos ir ciklo operatoriai, funkcija scanf() )

C#: framework overview and in-the-small features

C programavimo kalba. 5 paskaita (Funkcijos, masyvai)

ios Uždara operacinė sistema skirta tik Apple įrenginiams: iphone ipad ipod touch Apple TV

Kas yra masyvas? Skaičių masyvo A reikšmės: Elementų indeksai (numeriai): Užrašymas Turbo Paskaliu: A[1] A[2] A[3] A[4] A[5]

Gijos. Gijų modelis Javoje. R.Vaicekauskas, OP, 2017

C++ programavimo kalba

2. A GUI A. uses buttons, menus, and icons B. should be easy for a user to manipulate C. both (a) and (b) D. stands for Graphic Use Interaction

Introduce C# as Object Oriented programming language. Explain, tokens,

C#.Net. Course Contents. Course contents VT BizTalk. No exam, but laborations

Parengė ITMM Artūras Šakalys 1

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Table of Contents VB.NET

PHP PROGRAMOS EIGOS VYKDYMO VALDYMAS

Polimorfizmas. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

Struktūrų sintaksė Struktūra tai vienodo arba skirtingo tipo kintamųjų rinkinys. Sintaksė: struct vardas { ; type1 var1; type2 var2;... typen varn; //

Apletai (įskiepiai) Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

C++ programavimo kalba

.Net Technologies. Components of.net Framework

Amadeus On-Line Helpdesk

Introduction to C# Applications

This tutorial has been prepared for the beginners to help them understand basics of c# Programming.

Paskirstytos atminties lygiagretusis programavimas Įvadas į MPI

Hierarchical inheritance: Contains one base class and multiple derived classes of the same base class.

Informacijos apsaugos standartai serija

WWW aplikacijų saugumas 2

VB.NET MOCK TEST VB.NET MOCK TEST I

Buferio perpildymo klaida Įvadas, techniniai klausimai

Trumpai-ilga istorija

Elektroninis.lt šakninių sertifikatų diegimas

Naujos galimybės su Lotus Notes 8.5.1: naudotojams ir programuotojams

C++\CLI. Jim Fawcett CSE687-OnLine Object Oriented Design Summer 2017

Redis Ma as, greitas, galingas. Specialiai VilniusPHP

C++ programavimo kalba

Paveikslėliai. Lekt. dr. Pijus Kasparaitis m. m. pavasario semestras.

DUOMENŲ STRUKTŪROS IR ALGORITMAI. Rūšiavimo algoritmai (įterpimo, burbulo, išrinkimo)

Vilniaus Gedimino technikos universitetas,

Darshan Institute of Engineering & Technology for Diploma Studies

HTML dokumentai. Praktinės užduotys

Tautvydas Dagys Microsoft Lietuva

Kodėl programą sudaro daug failų? Sukurtos tipinės funkcijų galėtų būti panaudojamos dar kartą; Sudaroma aiškesnė programos struktūra; Sudaroma galimy

Pasirenkamojo modulio kūrybinio darbo atlikimas ir vertinimas

INFORMACINĖS SISTEMOS INVENTORIAUS VALDYMO SISTEMA

Interneto technologijų taikymai

A.Kynienė. С, C++ kalbų ABC. Metodinė priemonė

Modern Programming Tools and Techniques-III DCAP301

Principles of Computer Architecture Processors Lecture 1

2-3 PASKAITOS. Paprasčiausia programa:

A Comparison of Visual Basic.NET and C#

Projektas. .h failai Header failai (interface) .m failai Pačios programos failai ( .xib /.storyboard Vartotojo sąsajos failai

PROJEKTAS PROFESIJOS MOKYTOJŲ IR DĖSTYTOJŲ TECHNOLOGINIŲ KOMPETENCIJŲ TOBULINIMO SISTEMOS SUKŪRIMAS IR ĮDIEGIMAS (NR.: VP1-2.2-ŠMM-02-V ) 1

Masyvai Javoje. Masyvai. Objektų talpyklos. Masyvo tipas. Deklaravimo pavyzdžiai. Deklaracija ir sukūrimas. Masyvo superklas - Object

Fig 1.1.NET Framework Architecture Block Diagram

Objektinis programavimas II (JAVA) Rimantas Vaicekauskas, 2013 m.

C++ programavimo kalba

Eksperimentiniai sprendimai

DAD Lab. 1 Introduc7on to C#

Objectives. Introduce the core C# language features class Main types variables basic input and output operators arrays control constructs comments

Table of Contents Preface Bare Necessities... 17

KAUNO TECHNOLOGIJOS UNIVERSITETAS

DUOMENŲ BAZIŲ VALDYMO SISTEMŲ ANALIZĖ

WVGA :9 None. This is the only supported resolution for Windows Phone OS 7.1.

Getting started 7. Storing values 21. Creating variables 22 Reading input 24 Employing arrays 26 Casting data types 28 Fixing constants 30 Summary 32

C# IR JAVA PROGRAMAVIMO KALBŲ LYGINAMOJI ANALIZĖ

Vilniaus universitetas Fizikos fakultetas Radiofizikos katedra R. Grigalaitis Programavimas (Programavimo C++ kalba paskaitų konspektas)

Programavimas C kalba

Web servisai WSDL. Osvaldas Grigas

ĮVADAS JVM Java Virtual Machine Java virtualios mašinos (JVM) JVM write once, run everywhere

VILNIAUS PEDAGOGINIS UNIVERSITETAS MATEMATIKOS IR INFORMATIKOS FAKULTETAS INFORMATIKOS KATEDRA EDITA MUDURYTĖ

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS

Programinio kodo saugumas

Chapter 1 Getting Started

VB.NET MOCK TEST VB.NET MOCK TEST III

Language Specification

Paprastų lentelių kūrimas

6-7-8 PASKAITOS. Bendros žinios

Introduction to.net, C#, and Visual Studio. Part I. Administrivia. Administrivia. Course Structure. Final Project. Part II. What is.net?

ŽILVINAS VAIRA. Programinės įrangos kūrimo technologijos. Mokomoji priemonė

JAVA PROGRAMOS KODO ANALIZĖS NAUDOJANT SCRO ONTOLOGIJĄ GALIMYBIŲ TYRIMAS

14. GNU operacinės sistemos komponentas Linux

Web technologijos. Hostingas JavaScript PHP

ELEKTRONINIŲ PROJEKTŲ RENGIMO IR VALDYMO SISTEMA

Step-by step guide for MRU students to uploading Master s Thesis to elaba repository

C# Programming in the.net Framework

T u r b o P a s k a l i s 7.0

PHP Lietuviškai. Turinys

MD3 Integrated Model-Driven Data Design for Objects, XML, and Relational Databases

THE COMPARISON OF STANDARD PASCAL AND TURBO PASCAL 7.0

UNIT 1. Introduction to Microsoft.NET framework and Basics of VB.Net

C # Language Specification

II. Programming Technologies

Pažintis su C++ Builder

Trusted Components. Reuse, Contracts and Patterns. Prof. Dr. Bertrand Meyer Dr. Karine Arnout

LOGINĖS DB SCHEMOS ATSTATYMAS NAUDOJANT JDBC

Duhok Polytechnic University Amedi Technical Institute/ IT Dept. Halkawt Rajab Hussain

K R I S T I N A L A P I N. I dalis. Matematikos ir statistikos studijų krypčių pirmo kurso studentams

Transcription:

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. Microsoft.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 Microsoft Visual Studio... 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 Mono 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. Common Language Runtime). 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 Type System, 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ų, Common Type System 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. generic programming); iteratorius; anonimines funkcijas; LINQ; komentarus XML formatu. C# kalbos kūrėjus įtakojo šios programavimo kalbos: 10

C++; Java; Delphi (arba Object Pascal); Modula 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 Software 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 Microsoft Windows 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. Virtual Execution System). 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škaiorientuota 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, Protected, Static1, Shared, Dim declarators (keywords include user-defined types 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 į duotojo objekto virtualų metodą MyClass nėra Simbolio išgavimas iš eilutės GetChar Function [] Sudėtinės duomenų Structure <nariai> End struktūros apibrėžimas Structure (Visual Basic e: Structure) Objekto inicializavimas (konstruktoriai) Tiesioginis objekto sunaikinimas Metodas iškviečiamas prieš šiukšlių surinkimą Kintamojo inicializavimas apibrėžimo metu Funkcijos adreso gavimas Sub New() nėra Finalize Dim x As Long = 5 Dim c As New _ Car(FuelTypeEnum.Gas) AddressOf (Klasės nariams šis operatorius grąžina nuorodą į funkciją (deleguotos esybės pavidalu) struct, class, interface Konstruktoriai, arba konstruktoriai pagal nutylėjimą nėra destructor // inicializacija: int x = 123; // arba naudoti // konstruktorių // pagal nutylėjimą: int x = new int(); delegate 20

Paskirtis VB.NET C# Objekto asinchroniško nėra volatile modifikavimo apibrėžimas Priverstinis kintamųjų apibrėžimas Option Explicit nėra (visi kintamieji turi būti 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 <realizacija> class Nurodymas, kad klasė gali būti tik paveldėta. Klasės egzempliorius negali būti sukurtas MustInherit abstract Nurodymas, kad klasė negali NotInheritable sealed būti paveldėta Declare an enumerated type Enum <members> End Enum enum Klasės konstantos apibrėžimas Const const (Applied to a field 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 praplėstas, apibrėžimas NotOverridable (pagal nutylėjimą metodai nėra sealed Declare a virtual method, property (Visual Basic), or property accessor (C#, C++) overridable) Overridable virtual 21

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

Paskirtis VB.NET C# Prieinamas tik projekto Private private ribose (tam tikrais atvejais gaubiančios klasės ribose) Prieinamas už klasės ir projekto arba modulio ribų Public public 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 ' komentaras //, /* */ - komentarams, užimantiems kelias eilutes /// - XML komentarams Ar svarbus raidžių registras? ne taip Windows API iškvietimas Declare <API> naudokite Platform Invoke Apibrėžti ir iššaukti įvykį Event, RaiseEvent event Gijų primityvai SyncLock lock Go to (eik į nurodytą kodo vietą) Goto goto 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 abėcėlės raidė C# VB.NET a abstract, as AddHandler, AddressOf, Alias, And, AndAlso, Ansi, As, Assembly, Auto b base, bool, break, byte Boolean, ByRef, Byte, ByVal Call, Case, Catch, CBool, CByte, c case, catch, char, checked, CChar, CDate, CDec, CDbl, Char, class, const, continue CInt, Class, CLng, CObj, Const, CShort, CSng, CStr, CType d Date, Decimal, Declare, decimal, default, Default, Delegate, Dim, delegate, do, double DirectCast, Do, Double e else, enum, event, Each, Else, ElseIf, End, Enum, explicit, extern Erase, Error, Event, Exit f false, finally, fixed, float, for, foreach False, Finally, For, Friend, Function g goto Get, GetType, GoSub*, GoTo h - Handles i if, implicit, in, in (angl. If, Implements, Imports, In, 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 abėcėlės raidė C# VB.NET m - Me, Mod, Module, MustInherit, MustOverride, MyBase, MyClass n namespace, new, null, Namespace, New, Next, Not, Nothing, object NotInheritable, NotOverridable o operator, out, out (angl. generic modifier), override Object, On, Option, Optional, Or, OrElse, Overloads, Overridable, Overrides p params, private, ParamArray, Preserve, Private, Property, protected, public Protected, Public r readonly, ref, return RaiseEvent, ReadOnly, ReDim, REM, RemoveHandler, Resume, Return s sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch Select, Set, Shadows, Shared, Short, Single, Static, Step, Stop, String, Structure, Sub, SyncLock t this, throw, true, try, typeof Then, Throw, To, True, Try, TypeOf u uint, ulong, unchecked, unsafe, ushort, using Unicode, Until v virtual, void, volatile Variant* w while When, While, With, WithEvents, WriteOnly x - Xor papildomi - #Const #ExternalSource, #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ų apibrėžimas Dim x As Integer Public x As Integer = 10 Komentarai ' komentaras x = 1 ' komentaras Rem comment? Priskyrimo sakiniai Sąlygos sakiniai Pasirinkimo iš kelių variantų sakinys int x; int x = 10; // komentaras /* kelių eilučių komentaras */ nval = 7 nval = 7; If ncnt <= nmax Then ' tas pats: ntotal = ' ntotal + ncnt. ntotal += ncnt ' tas pats: ncnt = ncnt + 1. ncnt += 1 Else ntotal += ncnt ncnt -= 1 End If Select Case n Case 0 MsgBox ("Zero") ' Visual Basic.NET exits ' the Select at ' the end of a Case. Case 1 MsgBox ("One") Case 2 MsgBox ("Two") Case Else MsgBox ("Default") End Select if (ncnt <= nmax) { ntotal += ncnt; ncnt++; } else { ntotal +=ncnt; ncnt--; } switch(n) { case 0: Console.WriteLine("Zero"); break; case 1: Console.WriteLine("One"); break; case 2: Console.WriteLine("Two"); break; default: Console.WriteLine("?"); break; } 28

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

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

Paskirtis VB.NET C# Parameter Passing by Value ' The argument Y is 'passed by value. Public Sub ABC( _ ByVal y As Long) 'If ABC changes y, the ' changes do not affect x. End Sub ABC(x) ' Call the procedure. ' You can force parameters to ' be passed by value, ' regardless of how ' they are declared, ' by enclosing ' the parameters in ' extra parentheses. ABC((x)) Parametras, Public Sub ABC(ByRef y As Long) perduodamas ' Parametras y apibrėžiamas kaip nuoroda ' pagal nuorodą ' (angl. by reference). ' Jeigu ABC keičia y, ' pakinta x reikšmė End Sub ABC(x) ' procedūros iskvietimas. /* Note that there is no way to pass reference types (objects) strictly by value. You can choose to either pass the reference (essentially a pointer), or a reference to the reference (a pointer to a pointer).*/ // The method: void ABC(int x) {... } // Calling the method: ABC(i); /* Note that there is no way to pass reference types (objects) strictly by value. You can choose to either pass the reference (essentially a pointer), 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ūrizuotų išimčių If x = 0 Then Try valdymas Throw New Exception( _ "x equals zero") Else Throw New Exception( _ "x does not equal zero") End If Catch err As System.Exception MsgBox( _ "Error: " & Err.Description) Finally MsgBox( _ "Executing finally block.") End Try // try-catch-finally try { if (x == 0) throw new System.Exception( "x equals zero"); else throw new System.Exception( "x does not equal zero"); } catch (System.Exception err) { System.Console.WriteLine( err.message); } finally { System.Console.WriteLine( "executing finally block"); } Objektinė nuoroda į nieką Tipų inicializacija o = Nothing Dim dt as New System.DateTime( _ 2001, 4, 12, 22, 16, 49, 844) o = null; System.DateTime dt = 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 Imports System VB.NET C# Programos struktūra using System; Namespace Hello Class HelloWorld Overloads Shared Sub Main(ByVal args() As String) Dim name As String = "VB.NET" If args.length = 1 Then name = args(0) namespace Hello { public class HelloWorld { public static void Main(string[] args) { string name = "C#"; if (args.length == 1) name = args[0]; Console.WriteLine("Hello, " & name & "!") End Sub End Class End Namespace viena eilutė REM viena eilutė ''' <summary>xml komentarai</summary> Komentarai Console.WriteLine("Hello, " + name + "!"); } } } // viena eilutė /* kelios eilutės */ /// <summary>xml komentarai vienoje eilutėje</summary> /** <summary>xml kometarai keliose eilutėse</summary> */ Kintamųjų tipai Boolean Byte, SByte Char Short, UShort, Integer, UInteger, Long, ULong Single, Double Decimal Date Duomenų tipai Kintamųjų tipai bool byte, sbyte char short, ushort, int, uint, long, ulong float, double decimal DateTime (not a built-in C# type) 33

Nuorodų tipai Object String Inicializacija Dim correct As Boolean = True Dim b As Byte = &H2A 'hex arba &O52 aštuntainiams Dim person As Object = Nothing Dim name As String = "Dwight" Dim grade As Char = "B"c Dim today As Date = #12/31/2007 12:15:00 PM# Dim amount As Decimal = 35.99@ Dim gpa As Single = 2.9! Dim pi As Double = 3.14159265 Dim ltotal As Long = 123456L Dim stotal As Short = 123S Dim ustotal As UShort = 123US Dim uitotal As UInteger = 123UI Dim ultotal As ULong = 123UL Nuorodų tipai object string Inicializacija bool correct = true; byte b = 0x2A; // hex object person = null; string name = "Dwight"; char grade = 'B'; DateTime today = DateTime.Parse("12/31/2007 12:15:00"); decimal amount = 35.99m; float gpa = 2.9f; double pi = 3.14159265; long ltotal = 123456L; short stotal = 123; ushort ustotal = 123; uint uitotal = 123; ulong ultotal = 123; Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer) x += 1 y += 1 z = 5 End Sub Dim a = 1, b = 1, c As Integer ' c pagal nutylėjima lygus 0 TestFunc(a, b, c) Console.WriteLine("{0} {1} {2}", a, b, c) ' 1 2 5 Funkcija void TestFunc(int x, ref int y, out int z) { x++; y++; z = 5; } int a = 1, b = 1, c; // c nereikalauja inic, TestFunc(a, ref b, out c); Console.WriteLine("{0} {1} {2}", a, b, c); // 1 2 5 Function Sum(ByVal ParamArray nums As Integer()) As Integer Sum = 0 For Each i As Integer In nums Sum += i Next End Function int Sum(params int[] nums) { int sum = 0; foreach (int i in nums) sum += i; return sum; } Dim total As Integer = Sum(4, 3, 2, 1) ' returns 10 int total = Sum(4, 3, 2, 1); // grąžina 10 34

Lyginimo = < > <= >= <> VB.NET C# Operatoriai Lyginimo == < > <= >=!= Aritemtiniai + - * / Mod \ (sveikojo dalyba) ^ (kėlimas laipsniu) Priskyrimo = += -= *= /= \= ^= <<= >>= &= Binariniai And Or Xor Not << >> Loginiai AndAlso OrElse And Or Xor Not Aritmetiniai + - * / % (mod) / (sveikoji dalyba, jei abu operandai yra int tipo) Math.Pow(x, y) Priskyrimo = += -= *= /= %= &= = ^= <<= >>= ++ -- Binariniai & ^ ~ << >> Loginiai && & ^! Eulučių sujungimo (konkatenacijos) & Dim nums() As Integer = {1, 2, 3} For i As Integer = 0 To nums.length - 1 Console.WriteLine(nums(i)) Next ' 4 yra paskutinio elemento indeksas Dim names(4) As String names(0) = "David" names(5) = "Bobby" ' išmeta System.IndexOutOfRangeException Eulučių sujungimo (konkatenacijos) + Masyvai int[] nums = {1, 2, 3}; for (int i = 0; i < nums.length; i++) Console.WriteLine(nums[i]); // 5 yra masyvo dydis string[] names = new string[5]; names[0] = "David"; names[5] = "Bobby"; // išmeta System.IndexOutOfRangeException ' Masyvo dydžio pakeitimas, išsaugant esamas reikšmes ReDim Preserve names(6) Dim twod(rows-1, cols-1) As Single twod(2, 0) = 4.5 Dim jagged()() As Integer = { _ New Integer(4) {}, New Integer(1) {}, New Integer(2) {} } jagged(0)(4) = 5 // C# negali dinamiškai pakeisti masyvo dydį. Reikia nukopijuoti jį į naują masyvą. string[] names2 = new string[7]; Array.Copy(names, names2, names.length); // or names.copyto(names2, 0); float[,] twod = new float[rows, cols]; twod[2,0] = 4.5f; int[][] jagged = new int[3][] { new int[5], new int[2], new int[3] }; jagged[0][4] = 5; 35

VB.NET C# Ciklai Išankstinė sąlyga: Išankstinė sąlyga: While c < 10 c += 1 End While Do While c < 10 c += 1 Loop Do Until c = 10 c += 1 Loop For c = 2 To 10 Step 2 Console.WriteLine(c) Next // nereikia "until" while (c < 10) c++; for (c = 2; c <= 10; c += 2) Console.WriteLine(c); Post-sąlygą: Do c += 1 Loop While c < 10 Do c += 1 Loop Until c = 10 Post-sąlyga: do c++; while (c < 10); ' Darbas su masyvais arba kolekcijomis Dim names As String() = {"Fred", "Sue", "Barney"} For Each s As String In names Console.WriteLine(s) Next ' Ciklo nutrukimas Dim i As Integer = 0 While (True) If (i = 5) Then Exit While i += 1 End While ' Perėjimas prie kitos iteracijos For i = 0 To 4 If i < 4 Then Continue For Console.WriteLine(i) ' Išveda 4 Next // Darbas su masyvais arba kolekcijomis string[] names = {"Fred", "Sue", "Barney"}; foreach (string s in names) Console.WriteLine(s); // Ciklo nutrukimas int i = 0; while (true) { if (i == 5) break; i++; } // Perėjimas prie kitos iteracijos for (i = 0; i < 5; i++) { if (i < 4) continue; Console.WriteLine(i); // Išveda 4 } 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 Produktas Plėtiniai Projektų Klasių Išoriniai Integracija Refaktoringas diegimo kūrėjas įrankiai su MSDN galimybės (designer) Visual MSDN Studio ne minimalūs af 2 express Express ne af Visual Studio taip taip af taip taip taip Standard Visual Studio taip taip taip taip taip taip Professional Visual Studio Team System taip taip taip taip taip taip 1) pakartotinis panaudojamumas 2) af apribotas funkcionalumas; 39

Lentelė 6. Skirtingų Visual Studio aplinkos paketų palyginimas (tęsinys) Produktas Visual Studio Express Visual Studio Standard Visual Studio Professional Visual Studio Team System 1) af apribotas funkcionalumas VS Itanium Klaidų 64 bitų Tools procesorių aptikimas palaikymas for palaikymas Office Windows Mobile Development af 1 ne ne ne ne taip taip ne ne ne taip taip ne taip taip taip taip taip taip taip 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ž 2 32 ), į 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 35 33,811 30 25 20 laikas, s 15 14,109 18,984 13,249 19,217 10 5 2,953 7,233 1,984 2,734 5,124 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 laikas, s 40 30 20 2,953 13,249 18,984 5,124 2,734 1,984 19,217 10 0 14,109 7,233 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: formules: Tridiagonalizacijos pirmame žingsnyje reikia apskaičiuoti α ir r pagal tokias ir Paėmus α ir r reikšmes, sukuriamas vectorius v:, kur v 1 = 0;, ir kiekvienam k = 3, 4... n Po to skaičiuojam: 47

ir Suradus P 1 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: Q 1 48

A 1 = Q 1 AQ 1 Naudojant A 1 formuojame Q 2 = A 2 = Q 2 A 1 Q 2 = 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į laikas, ms 40000 35000 30000 25000 20000 15000 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