Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás
Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok = new int[] 1,8,4,3,5}; Elemeke elérése: szamok[0]=1; Hossz lekérése, a Length tulajdonság: int[] szamok = new int[4]1,2,3,4}; int sum=0, i; for (i = 0; i < szamok.length; i++) sum += szamok[i];
Többdimenziós tömbök Definíció: típus[,] név; (pld. int[,] matrix; ) int[,] numbers = new int[3, 2]; int[,] numbers = new int[3, 2] 1,2}, 3,4}, 5,6}}; int[,] numbers = new int[,] 1,2}, 3,4}, 5,6}}; int[,] numbers = 1,2}, 3,4}, 5,6}}; A Length tulajdonság a teljes elemszámot adja vissza (6 jelen esetben) A Rank tulajdonság a mátrix dimenzióját adja vissza. A GetLength(int i) metódus adja vissza az adott dimenzió hosszát
Többdimenziós tömb, példa int[,] matrix = new int[5,4]; for (int li = 0; li < matrix.getlength(0); li++) for (int lj = 0; lj < matrix.getlength(1); lj++) matrix[li, lj] = li * lj; 0 0 0 0 0 1 2 3 0 2 4 6 0 3 6 9 0 4 8 12
Tömbök tömbje (Nem azonos a többdimenziós tömbbel) int[][] haromszog = new int[5][]; for (int i = 0; i < haromszog.length; i++) haromszog[i] = new int[i+1]; for (int j = 0; j < haromszog[i].length; j++) haromszog[i][j] = j; } haromszog[0]: 0 } haromszog[1]: 0, 1 } haromszog[2]: 0, 1, 2 } haromszog[3]: 0, 1, 2, 3 } haromszog[4]: 0, 1, 2, 3, 4 }
A foreach foreach (azonosító in vektor) utasítás; Ez az utasítás egyenértékű a vektor-elemeken történő végiglépdeléssel. Az azonosító, mint ciklusváltozó felveszi egyenként e vektor elemeit. int paros = 0, paratlan = 0; int[] v = new int[] 0, 1, 2, 5, 7, 8, 11 }; foreach (int i in v) if (i % 2 == 0) paros++; else paratlan++; }
Függvények paraméterátadása Alapesetben érték szerinti a paraméterátadás: void swap( int a, int b) int c = a; a = b; b = c; } int a, b; a = 10; b = 11; swap( a, b); MessageBox.Show("a:"+a.ToString() + " b:" + b.tostring());
Függvények paraméterátadása cím (referencia) szerinti átadás Ha a paraméternév elé a ref(hivatkozás) kulcsszót beszúrjuk, akkor a hivatkozás szerinti paraméterátadást definiáljuk. Ezt a kulcsszót be kell szúrnunk a függvénydefinícióba és a konkrét hívás helyére is void swap( ref int a, ref int b) int c = a; a = b; b = c; } int a, b; a = 10; b = 11; swap(ref a, ref b); MessageBox.Show("a:"+a.ToString() + " b:" + b.tostring());
Függvények paraméterátadása kimenő paraméter Ha a paraméternév elé a out kulcsszót beszúrjuk, akkor a paraméter kimenő Ezt a kulcsszót be kell szúrnunk a függvénydefinícióba és a konkrét hívás helyére is void feltolt(out int[] vektor) vektor = new int[5] 1, 2, 3, 4, 5}; } void megegy(int[] vektor) for (int i = 0; i < vektor.length;i++) vektor[i]++; } int[] vektor; string s = ""; feltolt(out vektor);//vektor: 1,2,3,4,5} megegy(vektor); //vektor: 2,3,4,5,6}
A Form Komponens (System.Windows.Forms.Form) Eddig tanult tagok: tulajdonság int Width Szélesség Pixelben tulajdonság int Height Magasság pixelben tulajdonság int Top pozíció (Form teteje a tároló tetejétől) tulajdonság int Bottom pozíció (Form alja a tároló tetejétől) tulajdonság int Left pozíció (Form bal széle a tároló bal szélétől) tulajdonság int Right pozíció (Form jobb széle a tároló bal szélétől) tulajdonság string Text Fejlécfelirat tulajdonság bool Enabled Engedélyezve tulajdonság Color BackColor Háttérszín tulajdonság Color ForeColor Előtér színe tulajdonság bool Visible Látható esemény Load A Form betöltésekor esemény Click A Form-ra klikkeléskor
A Button Komponens (System.Windows.Forms.Button) Eddig tanult tagok: tulajdonság int Width Szélesség Pixelben tulajdonság int Height Magasság pixelben tulajdonság int Top pozíció (Button teteje a tároló tetejétől) tulajdonság int Bottom pozíció (Button alja a tároló tetejétől) tulajdonság int Left pozíció (Button bal széle a tároló bal szélétől) tulajdonság int Right pozíció (Button jobb széle a tároló bal szélétől) tulajdonság string Text Fejlécfelirat tulajdonság bool Enabled Engedélyezve tulajdonság Color BackColor Háttérszín tulajdonság Color ForeColor Előtér színe tulajdonság bool Visible Látható esemény Click A Form-ra klikkeléskor
A TextBox Komponens (System.Windows.Forms.Textbox) Eddig tanult tagok: tulajdonság int Width,Height Méret tulajdonság int Top, Bottom, Left, Right Pozíció tulajdonság string Text Fejlécfelirat tulajdonság bool Enabled Engedélyezve tulajdonság Color BackColor, Forecolor Szinek tulajdonság bool Visible Látható tulajdonság bool MultiLine metódus AppendText(string s) szöveg hozzáfűzése esemény TextChanged Szöveg megváltozásakor
A Timer Komponens (System.Windows.Forms.Timer) Események: Tick Amikor az előre beállított idő lejár Fontosabb Tulajdonságok bool Enabled Amennyiben true, a timer számol, ellenkező esetben nem. int Interval A timer periódusideje ms-ban. Metódusok void Start() elindítás (Enabled=true;) void Stop() leállítás (Enabled=false;)
Osztályok class osztálynév [: szülő, ] osztálytaglista }; Minden osztály egy közös ősből, az object osztályból származik
AZ OOP alapelvei Egységbezárás (Encapsulation) Az adatokat es a hozzájuk tartozó eljárásokat egyetlen egységben (osztályban) kezeljük. Az osztály adatmezői tároljak az adatokat, a metódusok kommunikálnak a külvilággal. Öröklés (Inheritance) Az osztály továbbfejlesztése. Ennek során a származtatott osztály örökli az ősosztálytól az összes attribútumot, metódust. Ezeket azonban újakkal is kibővíthetjük, ill. bizonyos szabályok mellett az örökölt metódusokat is megváltoztathatjuk. Sokalakúság (Polymorphism) Ugyanarra a metódusra a különböző objektumok különbözőképpen reagáljanak. A származtatás során az ősosztályok metódusai képesek legyenek az új, átdefiniált metódusok használatára újraírás nélkül is. Ezt virtuális (vagy dinamikus) metódusokkal érhetjük el.
Hozzáférési szintek osztályok esetében 1. A private tagokat csak az adott osztályon belülről érhetjük el. 2. Az osztályok publikus public mezőit bárhonnan elérhetjük, módosíthatjuk. 3. A protected mezők az osztályon kívüliek számára nem elérhetőek, míg az utódosztályból igen. 4. Az internal mezőket a készülő program osztályaiból érhetjük el. 5. A protected internal elérés valójában egy egyszerű vagy kapcsolattal megadott hozzáférési engedély. A mező elérhető a programon belülről, vagy az osztály utódosztályából! (Egy osztályból természetesen tudunk úgy utódosztályt származtatni, hogy ez nem tartozik az eredeti programhoz.)
Konstruktorok Osztályok esetén ez a kezdőérték-adás nem biztos, hogy olyan egyszerű, mint volt elemi típusok esetén, ezért ebben az esetben egy függvény kapja meg az osztály inicializálásával járó feladatot. Ez a függvény az osztály születésének pillanatában automatikusan végrehajtódik, és konstruktornak vagy konstruktor függvénynek nevezzük. A konstruktor neve mindig az osztály nevével azonos. Ha ilyet nem definiálunk, a keretrendszer egy paraméter nélküli automatikus konstruktort definiál az osztály számára. Az osztály referencia típusú változó, egy osztálypéldány létrehozásához kötelező a new operátort használni, ami egyúttal a konstruktor függvény meghívását végzi el.
Példa egyszerű osztályra class Ember private int eletkor; public string nev; } Ember e = new Ember(); //automatikus konstruktor e.nev = "Béla"; //működik e.eletkor = 12; //nem működik
Példa egyszerű osztályra 2. class Ember private int eletkor; public string nev; public Ember(int peletkor) eletkor = peletkor; } public int geteletkor() return eletkor; } Ember le = new Ember(12); le.nev = "Béla"; MessageBox.Show(le.getEletkor().ToString());
is, as operátorok Az is operátor ellenőrzi, hogy egy objektum kompatibilis-e egy típussal. Az as operátor kompatibilis objektumok közötti típus konverzióra ad lehetőséget.
Egyszerű példa öröklődésre class UjEmber : Ember public bool nem; public UjEmber(int peletkor) : base(peletkor) } } UjEmber le = new UjEmber(13); le.nev = "Béla"; //örökölt tulajdonság le.nem = true; //saját tulajdonság // is operátor: if (le is Ember) MessageBox.Show("Ember"); if (le is UjEmber) MessageBox.Show("UjEmber"); if (le is object) MessageBox.Show("object"); if (le is Button) MessageBox.Show("Button");
Egyszerű példa is, as operátorokra object akarmi; UjEmber valaki; akarmi = new UjEmber(12); if (akarmi is UjEmber) valaki = akarmi as UjEmber;
is as példa Visual Studioban
Statikus osztályok,tagok (a static kulcsszó) Egy statikus osztály lényegében ugyanolyan, mint a nem statikus osztály, azzal a különbséggel, hogy a statikus osztályt nem lehet példányosítani. Egy nem statikus osztálynak is lehetnek statikus tagjai (metódusai és adatelemei), ezeket a static kulcsszóval jelöljük. A static függvények éppen ezért nem érhetik el a nem statikus adatokat, hiszen azok egyedfüggőek. A static elemeket típusnévvel, a nem static elemeket egyedhivatkozással érjük el.
Példa statikus elemekre Statikus MessageBox.Show() Convert.ToInt32() int.parse() Math.akármi stb Nem statikus akármi.tostring()
Példa static tagokra class Osztaly public static int static_szam = 2; public int szam = 3; public static int static_osszead(int a) return a + static_szam; } public int osszead(int a) return a + szam + static_szam; } } Osztaly.static_szam++; MessageBox.Show( Osztaly.static_szam.ToString() ); Osztaly c = new Osztaly(); MessageBox.Show( c.osszead(21).tostring() ); MessageBox.Show( Osztaly.static_osszead(21).ToString() );