330 likes | 690 Views
Rēzeknes Augstskola Inženieru fakultāte Datorzinātņu un matemātikas katedra. Programminženierija I. M.sc.ing., lekt. Aleksejs Zorins. E-pasts: Aleksejs.Zorins@ru.lv Lekciju materiāli: www.ru.lv /~ alex. …. J#. Perl. Visual Basic. C++. C#. User Interface. XML Web Services.
E N D
Rēzeknes Augstskola Inženieru fakultāte Datorzinātņu un matemātikas katedra Programminženierija I M.sc.ing., lekt. Aleksejs Zorins E-pasts: Aleksejs.Zorins@ru.lv Lekciju materiāli: www.ru.lv/~alex
… J# Perl Visual Basic C++ C# User Interface XML Web Services ASP.NET .NET Framework apskats ADO.NET: Data and XML .NET Framework Class Library Common Language Runtime Application Services (COM+, IIS un citi) Windows
.NET Framework apskats Strādājot Windows vidē Framework ļauj izmantot tādus lietojumu servisus, kā dažādu komponenšu servisus, Internet Information Server (IIS) un citus caur klašu bibliotēku. Common Language Runtime – vienotā vide, kura ļauj vienkāršot aplikāciju izstrādi ar plašām iespējam (vienu un to pašu vidi var izmantot Windows un Web aplikāciju izstrādei). Tiek nodrošināts vairāku programmēšanas valodu atbalsts (C#, C++, J#, Visual Basic un citu izstrādātāju valodas). Šī iespēja tiek realizēta ar Microsoft Intermediate language (MSIL) kompilatora palīdzību. ADO.NET dod iespēju strādāt ar datu bāzes objektiem bez pieslēguma datu bāzei (disconnected programming model), kā arī ļauj plaši izmantot XML. ASP.NET paredzēta Web aplikāciju veidošanai. XML Web Services ir programmatiskās Web komponentes, kuras var kopīgi izmantot caur Internet vai intranet. User Interfaces iekļauj sevī instrumentus Web un Windows formu izstrādei, kā arī konsoles aplikācijām.
.NET Framework klašu bibliotēka .NET Framework klašu bibliotēka ļauj izmantot plašu funkcionalitāti ar namespace (vārdkopa) palīdzību. Namespace ir loģiskā telpa (krātuve), kura apvieno vairākās klases pēc kādas pazīmes. Daži vārdvietu piemēri: System – iekļauj sevī klases ar parasti lietojamiem datiem, notikumiem un notikumu apstrādātājiem, interfeisiem, atribūtiem un izņēmumu apstrādātājiem, kā arī citus; System.IO – ievads un izvads failos, plūsmas utt.; System.Data – klases ADO.NET modeļa lietošanai (piem., DataSet klase); System.Xml – XML atbalsts; System.Web – web aplikāciju veidošanai paredzētas klases; System.Windows.Forms - klases klienta aplikācijas lietotāja saskarnes veidošanai.
Pamata izvada operācijas Konsoles aplikācijās par ievadu un izvadu ir atbildīga Console klase, kura strādā ar: - standarta ievadu no tastatūras; - standarta izvadu monitorā; - standarta kļūdu izvadu monitorā. Console.Write un Console.WriteLine metodes izvada informāciju uz monitora ekrāna, pie tam WriteLine papildus pārvieto kursoru nākamajā rindā. Metode var izmantot string formātu un/ vai parametrus: Console.WriteLine(100); Console.WriteLine(“Hello!”); Parametrus sākumā definē ar speciālo marķieru palīdzību un pēc tam norāda parametru vērtības: Console.WriteLine(“{0}+{1}={2}”, 5, 7, 5+7); Izvadā būs: 5+7=12
Izvada formatēšana Parametru definējumā var norādīt līdzinājumu, piemēram: Console.WriteLine(“Skaitlis: {0, -10};”, 100); Console.WriteLine(“Skaitlis: {0, 10};”, 100); Izvadā būs:Skaitlis: 100 ; Skaitlis: 100; {0,10}– nozīmē līdzināts pa labi laukā ar platumu 10; {0,-10}– nozīmē līdzināts pa kreisi laukā ar platumu 10 Skaitļu izvada formatēšanai var lietot dažādus formātus, kuru pieraksta veids ir: {N:Format}, kur N – parametra numurs, Format – formatējuma veids. Pastāv vairāki formatējuma veidi, piem., C – naudas, E – eksponenciālais, D- vesels skaitlis, F – skaitlis ar fiksētu ciparu skaitu aiz komata un citi). Console.Write(“{0:F2}”, 255.76654); → 255.77
Pamata ievada operācijas, komentāri Metode Console.Read nolasa nākamo simbolu, savukārt metode Console.ReadLine nolasa visu ievada rindu. Nākošais programmas koda piemērs ļauj ievadīt kādu simbolu rindu un tā tiks izvadīta monitora ekrānā: string ievads = Console.ReadLine(); Console.WriteLine(“{0}”, ievads); C# valoda ļauj izmantot divu veidu komentārus: //Tas ir vienas rindas komentārs /*šīs ir vairāku rindu komentārs*/
Type Value Type Reference Type C# datu tipi Vienotās izstrādes vides sastāvdaļa ir kopīgā tipu sistēma (Common Type System), kura nodrošina vērtību un referenču tipu mainīgu izmantošanu. Vērtību tipi (Value Type) tieši satur datus vienā eksemplārā, un operācijas ar šiem datiem nevar ietekmēt citus mainīgus. Referenču tipi (Reference Type) satur atsauces uz datiem. Dati šiem tipiem tiek glabāti objektos, un ir pieļauts, ka divi referenču tipi atsaucās uz vienu un to pašu objektu, tādēļ operācija ar vienu šāda tipa manīgo var ietekmēt cita mainīga datus.
Lietotāja definētie tipi Sakārtotās secības (Enumeration) class Program { enum Color { Red, Green, Blue } static void Main() { Color colorPalette = Color.Red; Console.WriteLine("{0}", colorPalette); } } Lietotāja tipus definē pirms vai pēc Main funkcijas. Pēc noklusējuma katrai pirmajai secības vērtībai piešķir 0. Atsaukties var izmantojot konkrētus nosaukumus vai vērtību numurus: colorPalette = (Color)0;
Lietotāja definētie tipi class Program { public struct Darbinieki //definējam struktūras tipu { //string datu tipā var saglabāt patvaļīgā //garuma simbolu virkni public string uzvards; public int vecums; } static void Main() { Darbinieki firmasDarbinieki;/*definējam mainīgo un piešķīrām vērtības*/ firmasDarbinieki.uzvards = "Vaivods"; firmasDarbinieki.vecums = 35; Console.WriteLine("{0},{1}", firmasDarbinieki.uzvards, firmasDarbinieki.vecums); } }
dalskaitlis 100.57= veselu 100 isais 100= garo 100 Datu tipu konvertācija Pastāv netiešā (implicit) un tiešā (explicit) konvertācija. Netiešā konvertācija vienmēr būs veiksmīgi izpildīta un nekad nenovedīs pie datu zaudējuma. To pielieto mazāku (gan izmēra, gan precizitātes ziņā) datu tipu konversijai lielākos (bet ne otrādi!), piemēram: int i=100; long j = i; Console.WriteLine(“isais {0} = garo {1}”, i, j); Pretējā gadījumā jāizmanto tiešā konvertācija, kura var novest arī pie datu un vai precizitātes zaudējuma, piemēram: double i=100.57; int j = (int)i; Console.WriteLine(“dalskaitlis {0} = veselu {1}”, i, j);
Iterāciju izteikumi C# valodā ir ieviests jauns cikla veids foreach, kuru ērti izmantot dažādu ierakstu kolekciju apstrādei (šīs cikla veids pārlasa visus kolekcijas elementus). using System; using System.Collections;//satur ArrayList objektu class Program { static void Main() { //definējam jauno ArrayList objektu “skaitli” ArrayList skaitli = new ArrayList(); for (int i=0;i<10;i++) skaitli.Add(i);//piešķiram viņam i vērtības //cikls pārlasa visus elementus mūsu objektā “skaitli” foreach (int j in skaitli) Console.WriteLine(j); } }
Izņēmumu situāciju apstrāde Tradicionālā izņēmumu situāciju apstrāde nav ērta, jo programmas kods ir slikti saprotams un kļūdas kodi parasti nenes nekādas informācijas, piemēram: int ErrorCode=0; int n = int.Parse(textBox1.Text); int m = int.Parse(textBox2.Text); if (m == 0) ErrorCode = 1; else if (n > 200 || m > 200) ErrorCode = 2; else { int z = n / m; label1.Text = z.ToString(); } switch (ErrorCode) { case 1: MessageBox.Show("Division by zero"); break; case 2: MessageBox.Show("Memory overflow"); break; }
Izņēmumu situāciju apstrāde .NET Framework paredz izņēmumu apstrādi ar klasēm, kuros ir definētas dažādas izņēmumu situācijas, piemēram: OverflowException – atmiņas bufera pārpildīšana; DivideByZeroException– dalīšana ar nulli; IndexOutOfRangeException– mēģinājums atsaukties uz neeksistējošo masīva indeksu; FileNotFoundException – nav atrast fails ar norādīto nosaukumu; OutOfMemoryException– trūkst atmiņas turpmākai programmas izpildīšanai.
SystemException ApplicationException DivideByZeroException OutOfMemoryException Citas klases OverflowException Citas klases Exception klases Exception
try un catch bloku izmantošana Izņēmumu situāciju apstrāde tiek veikta ar try un catch bloku palīdzību šādā veidā: try { //programmas kods, kurš var izraisīt izņēmuma situāciju } catch (viena no Exception klases, nosaukums) { //programmas kods, kurš tiek izpildīts izņēmuma gadījumā } Tādā veidā programmas kods ir strikti sadalīts divās daļās. Pirmajā daļā ir parastais programmas kods, kurš var izraisīt izņēmuma situāciju (kļūdu). Ja kļūdas nebija, programmas turpina savu darbību izlaižot catch bloku. Ja izņēmumu situācija ir notikusi try blokā, vadība tiek nodota catch blokam, kura parametrs ir viens no izņēmumu situācijas objektiem.
try un catch bloku izmantošana //pārbaudām šo kodu pret izņēmumu situācijām try { int n = int.Parse(textBox1.Text); int m = int.Parse(textBox2.Text); int z = n / m; label1.Text = z.ToString(); } //izpildās ja notiek dalīšana ar nulli catch (DivideByZeroException d) { MessageBox.Show(d.ToString()); } //izpildās ja notiek atmiņas bufera pārpildīšana catch (OverflowException o) { MessageBox.Show(o.ToString()); }
try un catch bloku izmantošana try { int n = int.Parse(textBox1.Text); int m = int.Parse(textBox2.Text); int z = n / m; label1.Text = z.ToString(); } catch (DivideByZeroException d) { MessageBox.Show(d.ToString()); } catch (OverflowException o) { MessageBox.Show(o.ToString()); } //izpildās visu pārējo kļūdu gadījumos catch (Exception i) { MessageBox.Show("Kaut kas nav labi"); }
Šeit būs kļūda, jo Exception objekts ir vispārīgāks par pārējiem Exception klašu hierarhija try { int n = int.Parse(textBox1.Text); int m = int.Parse(textBox2.Text); int z = n / m; label1.Text = z.ToString(); } catch (Exception i) { MessageBox.Show("Kaut kas nav labi"); } catch (DivideByZeroException d) { MessageBox.Show(d.ToString()); } catch (OverflowException o) { MessageBox.Show(o.ToString()); }
Masīvu inicializēt un norādīt tās izmēru var arī vienā rindā: int [] masivs = new int[10]; Vairāku dimensiju masīviem ir nepieciešams norādīt visu dimensiju izmērus: int [,] masivs = new int[3,4]; Masīvi Masīvi ļauj uzglabāt vienāda tipa mainīgus. Masīvu definēšana C# notiek šādi: int [] masivs; masivs = new int[10]; Atšķirībā no C++, C# var inicializēt masīvu, kuras izmērs tiks noteikts programmas darbības gaitā: string s = textBox1.Text; int size = int.Parse(s); double [] mas = new double [size];
Abos gadījumos garums=10 Tādā pašā veidā var noteikt arī vairāku dimensiju masīvu garumu: int [,] masivs = new int[2,5]; label1.Text = masivs.Length.ToString(); Pieeja atsevišķam masīva elementam notiek ar masīva nosaukumu un elementa indeksa numuru: //izvada masīva elementus textBox logā foreach (int j in masivs)//foreach nevar mainīt elementus { string t = masivs[j].ToString(); textBox3.Text = textBox3.Text+t; } Masīvu elementu skaits un pieeja tiem Pēc masīva inicializācijas un tā izmēra definēšanas jebkura programmas vietā var noteikt šī masīva garumu ar Length īpašības palīdzību: int [] masivs = new int[10]; label1.Text = masivs.Length.ToString();
Masīvi un kolekcijas Masīvu priekšrocības: - aizņem mazāk atmiņas; - ātrākā apstrāde. Kolekciju priekšrocības: - ļauj mainīt savu izmēru pēc izveidošanas; - var uzglabāt dažāda tipa datus; - pastāv iespēja pievienot “read-only” elementus, kurus pēc tam nevar mainīt. Viens no kolekcijas piemēriem ir ArrayList klase, kura definēta System.Collections vārdvietā. //tiek izveidots ArrayList objekts ar nosaukumu masivs ArrayList masivs = new ArrayList();
Masīvu elementu inicializācija //piešķiram vērtības uzreiz pēc inicializācijas int [] m1 = new int [3] {1,2,3}; int [,] m2 = new int [2,3] { {1,2,3}, {4,5,6}, }; //inicializējam masīvu int [,] mas = new int [5,10]; //piešķiram masīva elementiem vērtības for (int i=0; i<mas.GetLength(0);i++) for (int j=0; j<mas.GetLength(1);j++) mas[i,j]=i+j; GetLength īpašība ļauj noteikt katras dimensijas izmēru vairāku dimensiju masīvu gadījumos.
Masīvu īpašības un metodes Darbam ar masīviem .NET Framework ir arī paredzēta sava klase System.Array. Šī klase satur vairākas metodes un īpašības, kuras atvieglo masīvu apstrādi. Īpašība Length ļauj iegūt masīva kopējo elementu skaitu, bet GetLength - katras dimensijas garumu. Vēl viena īpašība Rank parāda masīva dimensiju skaitu. Visas šīs īpašības ir “read-only”. int[,,] mas = new int[3, 4, 5]; string t = mas.Length.ToString(); textBox1.Text = textBox1.Text + t+" ";//elementu skaits=60 t = mas.GetLength(0).ToString(); textBox1.Text = textBox1.Text + t + " ";//1.dimensija=3 t = mas.GetLength(1).ToString(); textBox1.Text = textBox1.Text + t + " ";//2.dimensija=4 t = mas.GetLength(2).ToString(); textBox1.Text = textBox1.Text + t + " ";//3.dimensija=5 t = mas.Rank.ToString(); textBox1.Text = textBox1.Text + t;//dimensiju skaits=3
1 2 3 4 5 4 0 0 0 2 Masīvu īpašības un metodes Metode Sort ļauj šķirot viendimensiju masīva elementus augošā secībā: int[] mas = new int[5] {4,3,1,5,2}; Array.Sort(mas); for (int i=0; i<5; i++) { string t = mas[i].ToString(); textBox1.Text = textBox1.Text + t + " "; } Metode Clear piešķir nulles vērtības norādītiem masīva elementiem. Pirmais metodes parametrs ir masīva nosaukums, otrais – elementa indekss, ar kuru sākam tīrīšanu un trešais – elementu skaits: int[] mas = new int[5] {4,3,1,5,2}; Array.Clear(mas, 1, 3); for (int i=0; i<5; i++) { string t = mas[i].ToString(); textBox1.Text = textBox1.Text + t + " "; }
Masīvu īpašības un metodes Ar Clone metodes palīdzību var veidot masīvu kopijas. Piešķirot kopijas saturu citam masīvam ir nepieciešama tiešā datu tipu konvertācija: int[] mas = new int[5] {4,3,1,5,2}; //izveidojam pirmā masīva kopiju un piešķiram to otram masīvam int[] kopija = (int [])mas.Clone(); //iztīram pirmo masīvu Array.Clear(mas, 0, mas.Length); //izvadam abu masīvu elementu vērtības for (int i=0; i<5; i++) { string t = mas[i].ToString(); textBox1.Text = textBox1.Text + t + " "; t = kopija[i].ToString(); textBox2.Text = textBox2.Text + t + " "; }
Kolekcijas un darbības ar tām Plašāk lietojamie kolekciju veidi ir šādi: ArrayList – sakārtotu objektu kolekcija, pieeja pie kuriem tiek nodrošināta ar indeksu palīdzību; Hashtable – atšķirībā no ArrayList indeksi tiek definēti ar nosaukumu palīdzību (optimizēti meklēšanai); Queue – realizē rindas struktūru, kad pieeja pie elementiem notiek pēc principa “pirmais iekšā, pirmais ārā”; Stack – realizē stekus, kad pieeja pie elementiem notiek pēc principa “pirmais iekšā, pēdējais ārā”.
Darbs ar ArrayList klasi Metode Add ļauj pievienot jauno objektu kolekcijai, savukārt metode AddRange ļauj pievienot kolekcijai elementu virkni no citas kolekcijas: ArrayList kolekcija = new ArrayList();//izveidojam kolekciju kolekcija.Add(10);//un trīs pievienojam elementus kolekcija.Add("otrais"); kolekcija.Add(100); ArrayList lielaKolekcija = new ArrayList();//vēl kolekcija lielaKolekcija.Add(1);//pievienojam elementu lielaKolekcija.AddRange(kolekcija);//un visus no pirmās kolekcijas for (int i = 0; i < kolekcija.Count;i++ ) {//foreach ciklu izmantot nevaram, jo kolekcijā ir dažāda tipa mainīgie string t = kolekcija[i].ToString(); textBox1.Text = textBox1.Text + t + " "; } for (int i = 0; i < lielaKolekcija.Count; i++) { string t = lielaKolekcija[i].ToString(); textBox2.Text = textBox2.Text + t + " "; }
100 Darbs ar ArrayList klasi Metode Remove nodzēš objektu no kolekcijas pēc norādītas vērtības, savukārt metode RemoveAt nodzēš elementu ar norādīto indeksu: ArrayList kolekcija = new ArrayList(); kolekcija.Add(10); kolekcija.Add("otrais"); kolekcija.Add(100); //dzēšam elementu ar nosaukumu otrais kolekcija.Remove("otrais"); //kolekcijā palika 2 elementi, tagad dzēšam 1.elementu kolekcija.RemoveAt(0); for (int i = 0; i < kolekcija.Count; i++) { string t = kolekcija[i].ToString(); textBox1.Text = textBox1.Text + t + " "; }
Darbs ar ArrayList klasi Metode RemoveRange nodzēš objektus norādītajā indeksu intervālā, bet metode Clear nodzēš visus elementus no kolekcijas: ArrayList kolekcija = new ArrayList(); kolekcija.Add(10); kolekcija.Add("otrais"); kolekcija.Add(100); kolekcija.Add(“ceturtais”); //dzēšam elementu ar nosaukumu otrais kolekcija.RemoveRange(1,2); //palika 10 un “ceturtais” kolekcija.Clear(); //tagad ir tukša kolekcija Metode TrimToSize ierobežo kolekcijas iespējamo elementu skaitu ar tajā jau eksistējošiem elementiem.
informāciju kolekcija satur svarīgu Tāda Tāda svarīgu satur kolekcija informāciju kolekcija.Sort(); kolekcija.Reverse(); Darbs ar ArrayList klasi Metode Insert ieraksta kolekcijā elementu ar norādīto indeksu: ArrayList kolekcija = new ArrayList(); kolekcija.Insert(0, “Tāda"); kolekcija.Insert(1, "kolekcija"); kolekcija.Insert(2, "satur"); kolekcija.Insert(3, "svarīgu"); kolekcija.Insert(4, "informāciju"); Metode Sort sašķiro kolekcijas elementus augošā kārtībā (simboliskās informācijas gadījumā pēc alfabēta), bet metode Reverse maina elementu kārtību uz pretējo:
Darbs ar ArrayList klasi Darbam ar kolekcijām var izmantot kursorus, kurus var izveidot no klases IEnumerator. Šāda tipa kursors pārvietojas pa kolekcijas elementiem un satur tikai divas metodes – MoveNext (pāriet pie nākošā) un Reset (atgriezties kolekcijas sākumā): ArrayList kolekcija = new ArrayList(); kolekcija.Insert(0, "Tāda"); kolekcija.Insert(1, "kolekcija"); kolekcija.Insert(2, "satur"); kolekcija.Insert(3, "svarīgu"); kolekcija.Insert(4, "informāciju"); //izveidojam kursoru mūsu kolekcijai IEnumerator kursors = kolekcija.GetEnumerator(); //cikls izpildās kamēr visi elementi nebūs izskatīti while (kursors.MoveNext()) { //piešķiram mainīgajam t kursora tekošo vērtību string t = kursors.Current.ToString(); textBox1.Text = textBox1.Text + t + " "; }