V 1.01 Szoftverfejlesztés párhuzamos és elosztott környezetben Generikus típusok Delegáltak Anonim függvények Lambda kifejezések GUI készítése.

Slides:



Advertisements
Hasonló előadás
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
Advertisements

Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
C# tagfüggvények.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
V 1.0 OE-NIK HP 1 Programozási Paradigmák és Technikák Eseménykezelés Névtelen metódusok (anonymous methods)
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Delphi Készítette: Rummel Szabolcs Elérhetőség:
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Visual Basic 2008 Express Edition
Visual Basic 2008 Express Edition
Java programozási nyelv Metódusok
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Objektum orientált programozás
Webprogramozó tanfolyam
A Visual Basic nyelvi elemei
Programozás III. Grafikus felület API-k és összehasonlításuk
Webprogramozó tanfolyam Űrlapok (form-ok). Űrlapok a HTML-ben Biztosan mindenki találkozott már vele – Űrlap példapélda Felhasználási lehetőségei – Regisztráció,
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
Haladó Programozás Delegáltak, események OE-NIK HP 1.
User Profiles Endrődi Tamás (MCT, MCP, MCITP) GDF Informatikai Intézet vezetője SZÁMALK Oktatóközpont.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
Excel programozás (makró)
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
Informatikai gyakorlatok 11. évfolyam
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Windows Forms alkalmazás készítése Czigléczky Gábor 2009.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
V 1.0 Programozás III. Grafikus felület API-k és összehasonlításuk WPF Hello World Fontosabb UI-elemek UI-elemek tartalommodelljei UI-elemek öröklődési.
Programozás II. labor 2. rész (Adatszerkezetek)
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Alkalmazásfejlesztés gyakorlat
Neumann János Informatikai Kar
Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
a programegységek között
Neumann János Informatikai Kar
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Programozási Nyelvek II.
Web programozás és haladó fejlesztési technikák – C#
Web programozás és haladó fejlesztési technikák – C#
Folyamatok.
B M Java Programozás 5. Gy: Java alapok IT A N Adatkezelő 1.rész
Előadás másolata:

V 1.01 Szoftverfejlesztés párhuzamos és elosztott környezetben Generikus típusok Delegáltak Anonim függvények Lambda kifejezések GUI készítése

V 1.0 Gyakorló feladat 2 Készítsünk olyan osztályt, amiben három tetszőleges összetartozó elemet tudunk tárolni.

V 1.0 Generikus típusok Példa: milyen típusú adatokat tudjon tárolni? –Feladattól függően rögzítjük a típust, pl. int → nem szerencsés, mert egy hasonló, de pl. stringeket tartalmazó osztálynál újra kell írni az egész kódot –Object típusokkal dolgozunk → működik, de számos hátránnyal jár Sok castolás miatt nehézkes lehet a használata Nincs fordítás idejű típusellenőrzés (csak futás közbeni hibák) Hasonló problémák –Láncolt listát implementálnánk, mi legyen a tartalom mező típusa? –Programozási tétel (pl. Keresés) milyen típusú adatokkal dolgozzon? Összefoglalva –Nyelvi támogatást szeretnénk, hogy azonos algoritmusok különböző típusokon is tudjanak működni fordításkori típusellenőrzéssel –Hasonló: pl. C++ template-ek 3

V 1.0 Generikus típusok Előző problémák megoldása: típusparaméterek használata Minden típusparaméter egy típust képvisel –Osztály tervezésekor ez még nem ismert –Objektum példányosításakor már meg kell adni –Tehát fordítás idejére már biztosan ismert lesz Típusparaméter használható minden helyen, ahol egyébként típus állhatna –Mezők, tulajdonságok típusa –Metódusok paramétereinek típusa –Metódusok visszatérési értékének típusa –Metódusok lokális változóinak típusa OE-NIK HP 4

V 1.0 Gyakorló feladat 5 Készítsünk olyan osztályt, amiben három tetszőleges összetartozó elemet tudunk tárolni. Készítsünk Stack osztályt a következő 3 metódussal: Push, Pop, Peek.

V 1.0 OE-NIK HP 6 Beépített generikus típusok List Lista adatszerkezet Stack Verem adatszerkezet Queue Sor adatszerkezet Dictionary Kulcs-érték párokból álló gyűjtemény (hash) KeyValuePair Kulcs-érték pár Tuple Elempár Tuple Elemhármas Tuple Elem n-es

V 1.0 Gyakorló feladat 7 Készítsünk metódust, amely ellenőrzi egy kifejezés/kód zárójelhelyességét. Számoljuk meg egy (nem feltétlenül csak angol karakterekből álló) szövegben az egyes karaktereket.

V 1.0 OE-NIK HP 8 Olyan típus, aminek változóiban metódusokat tudunk elhelyezni –A delegált típusa meghatározza, hogy milyen szignatúrájú függvényt tehetünk bele –A konkrét delegáltban tárolhatjuk el a függvényeket –A delegáltnak null értéke van, amíg nincs benne függvény Delegate delegate double MyDelegate(int param1, string param2); double funct(int elso, string masodik) { return elso + masodik.Length; } MyDelegate del = new MyDelegate(funct); //hosszú megadás MyDelegate del = funct; //rövid megadás

V 1.0 OE-NIK HP 9 A C#-os delegáltak multicast tulajdonságúak, több függvény is lehet bennük – függvény hozzáadása, eltávolítása: Delegáltban lévő függvények hívása: –A hívási sorrend a keretrendszer által nincs garantálva, ne építsünk rá! (.NET 4.5-ös állapot: abban a sorrendben hívja, amiben beleraktuk) –Visszatérési érték használata esetén az utoljára hívódó metódus visszatérési értékét kapjuk meg (szinte sohasem használjuk így a fenti miatt, inkább: GetInvocationList()) Delegate használata del += new MyDelegate(Function1); //hosszú megadás del += Function1; //rövid megadás del -= new MyDelegate(Function1); //hosszú megadás del -= Function1; //rövid megadás MyDelegate temp = del; //Az ideiglenes változó if (temp != null) //szálbiztonság (thread safety) temp(0, "alma"); //miatt kell.

V 1.0 OE-NIK HP 10 Saját delegált megadása: –„Olyan függvényt képes fogadni, aminek double visszatérési értéke van, és egy int és egy string paramétere” – +kovariancia + kontravariancia Szinte soha nincs rá szükség, a keretrendszerben rengeteg a beépített delegált típus, használjuk inkább ezeket! Saját vs. beépített delegált típus delegate double MyDelegate(int param1, string param2);

V 1.0 OE-NIK HP 11 Beépített delegált típusok Predicate bool(T) List.Find(),.Exists(), RemoveAll()… Comparison int(T1,T2) List.Sort(), Array.Sort() MethodInvokervoid() EventHandlervoid(object,EventArgs) EventHandler void(object,T) (T EventArgs utód) Actionvoid() Action void(T) Action void(T1,T2) Action void(T1,T2,...,T16) Func TRes() Func TRes(T) Func TRes(T1,T2) Func TRes(T1,T2,...,T16)

V 1.0 OE-NIK HP 12 Rengeteg keretrendszeri példa! Delegate használata a gyakorlatban private bool ParosE(int i) { return i % 2 == 0; } private int ParosakatElore(int i1, int i2) { bool i1Paros = ParosE(i1); bool i2Paros = ParosE(i2); if (i1Paros && !i2Paros) return -1; else if (!i1Paros && i2Paros) return 1; else return 0; } int[] tomb; List lista; //... int elsoParos = lista.Find(ParosE); List osszesParos = lista.FindAll(ParosE); bool vanParos = lista.Exists(ParosE); Array.Sort(tomb, ParosakatElore);

V 1.0 OE-NIK HP 13 delegate bool Osszehasonlito(object bal, object jobb); class EgyszeruCseresRendezo { public static void Rendez(object[] tomb, Osszehasonlito nagyobb) { for (int i = 0; i < tomb.Length; i++) for (int j = i + 1; j < tomb.Length; j++) if (nagyobb(tomb[j], tomb[i])) { object ideiglenes = tomb[i]; tomb[i] = tomb[j]; tomb[j] = ideiglenes; } Array.Sort-szerű példa

V 1.0 OE-NIK HP 14 Array.Sort-szerű példa – példaosztály class Diak { public string Nev { get; set; } public int Kreditek { get; set; } public Diak(string nev, int kreditek) { this.Nev = nev; this.Kreditek = kreditek; } Diak[] csoport = new Diak[] { new Diak("Első Egon", 52), new Diak("Második Miksa", 97), new Diak("Harmadik Huba", 10), new Diak("Negyedik Néró", 89), new Diak("Ötödik Ödön", 69) };

V 1.0 OE-NIK HP 15 Array.Sort-szerű példa – használat bool KreditSzerint(object elso, object masodik) { return ((elso as diak).Kreditek < (masodik as diak).Kreditek); } Osszehasonlito del = new Osszehasonlito(KreditSzerint); EgyszeruCseresRendezo.Rendez(csoport, del); VAGY EgyszeruCseresRendezo.Rendez(csoport, KreditSzerint);

V 1.0 Névtelen függvények Delegáltak fő használati módjai: –Események –Metódussal való paraméterezés Probléma: az egyszer használatos függvények „elszennyezik” a kódot (pl: IntelliSense-t is) Megoldás: névtelen függvények Az angol dokumentáció szerint: ( us/library/bb aspx) OE-NIK HP 16 anonymous methods Anonymous functions lambda expressions

V 1.0 Anonim függvények Ma már nem használjuk (-> lambdák) OE-NIK HP 17 int elsoParos = lista.Find(delegate(int i) { return i % 2 == 0; }); List osszesParos = lista.FindAll(delegate(int i) { return i % 2 == 0; }); bool vanParos = lista.Exists(delegate(int i) { return i % 2 == 0; }); Array.Sort(tomb, delegate(int i1, int i2) { bool i1Paros = i1 % 2 == 0; bool i2Paros = i2 % 2 == 0; if (i1Paros && !i2Paros) return -1; else if (!i1Paros && i2Paros) return 1; else return 0; });

V 1.0 Lambda kifejezések Új operátor: => (Lambda operátor) –Bemenet és a kimenet összekötésére Szintaxis: paraméter[ek] => kimenetet meghatározó kifejezés Használata: –delegate típus (saját v. keretrendszeri) –delegate változó elkészítése és függvény megadása lambda kifejezés formájában, metódus meghívása OE-NIK HP 18 delegate double SingleParamMathOp(double x); SingleParamMathOp muvelet = x => x * x; double j = muvelet(5);

V Lambda kifejezések Beépített delegált típussal: Több paramétert zárójelezni kell A paraméterek típusozása nem kötelező, csak speciális esetekben delegate double TwoParamMathOp(double x, double y); TwoParamMathOp myFunc = (x, y) => x + y; double j = myFunc(5, 10); //j = 15 Func myFunc = (x) => x * x; int j = myFunc(5); //j = 25 Func myFunc2 = (x, y) => x + y; int j2 = myFunc2(5, 10); //j = 15

V 1.0 Lambda kifejezések OE-NIK HP 20 int elsoParos = lista.Find(i => i % 2 == 0); List osszesParos = lista.FindAll(i => i % 2 == 0); bool vanParos = lista.Exists(i => i % 2 == 0); Array.Sort(tomb, (i1, i2) => { bool i1Paros = i1 % 2 == 0; bool i2Paros = i2 % 2 == 0; if (i1Paros && !i2Paros) return -1; else if (!i1Paros && i2Paros) return 1; else return 0; });

V 1.0 Lambda kifejezések Altípusok: –Kifejezéslambda (Expression Lambda) Szigorúan egyetlen kifejezés a kimenetet meghatározó oldalon x => x * x –Kijelentéslambda (Statement Lambda) Akár több sorból álló kód a kimenetet meghatározó oldalon, változólétrehozás,.NET függvény hívása, return is megengedett x => { Console.WriteLine(x); } –Különbség: Az kifejezéslambda adott helyeken (pl. adatbázis felé való kommunikáció) nem delegáltra fordul, hanem kifejezésfára (Expression Tree) – pl. adatbázisszerver tudja az SQL dialektusára való fordítás után végrehajtani OE-NIK HP 21

V 1.0 OE-NIK HP 22 Névtelen függvények és lambdák Előny: –A függvény azonnal olvasható a felhasználás helyén –Kevesebb „szemét” tagfüggvény az osztályban Csak az egyszer használatos, és lehetőleg rövid függvényeket írjuk így meg: –A hosszú kód olvashatatlan –Mivel „beágyazott kód”, ezért nem újrafelhasználható Lehetőleg ne ágyazzunk egymásba névtelen metódusokat Óriási hibalehetőség: Outer Variable Trap

V 1.0 Outer Variable Trap A névtelen metódusok és lambdák belsejében felhasználhatók a külső változók DE a külső változókat a függvény referencia formájában kapja meg – az érték típusúakat is! „Elvárt” kimenet: 0, 1, 2, 3, 4, 5, … Valós kimenet: 10, 10, 10, 10, 10 … Megoldás ideiglenes változó bevezetésével (amit sehol nem változtatunk később) OE-NIK HP 23 Action szamkiiro = null; for (int i = 0; i < 10; i++) { szamkiiro += delegate() { Console.WriteLine(i); }; } szamkiiro(); //... int f = i; szamkiiro += delegate() { Console.WriteLine(f); }; //...

V 1.0 Gyakorló feladat 24 Készítsünk általános Logger osztályt, amely tetszőleges naplózási metódust képes használni. A logolási metódus szignatúrája az egyszerűség kedvéért: void(string message) Az osztály 2 publikusan elérhető függvényt tartalmazzon: AddLogMethod(), Log() Teszteljük az osztályt legalább 2 konkrét logolási metódussal (pl: fájlba írás, konzol)

V 1.0 WPF Hello World 25

V 1.0 WPF Hello World 26

V 1.0 WPF Hello World View -> View -> Other Windows -> 27

V 1.0 WPF Hello World Projektbeállítások –Fordítási beállítások –Fordítás előtti és utáni események –Parancssori argumentumok –Felhasználói/alkalmazásszintű beállítások –Stb. Hivatkozások –Keretrendszeri vagy harmadik fél által készített könyvtárakra Alkalmazás fájljai Ablak fájljai 28

V 1.0 App, MainWindow App osztály: –App.xaml.cs + generált bin/obj/App.g.cs = App osztály –A Main függvény alapértelmezésben ide generálódik, benne példányosít egyet ebből az osztályból és megjeleníti a főablakot –Alkalmazásunkat reprezentálja: Current statikus tagban van tárolva egy mindig elérhető példány. Startup, Exit események, Shutdown() függvény a bezáráshoz (App.Current.Shutdown()) MainWindow osztály: –Egy ablakot reprezentál (alapbeállítás szerint ez a „főablak”, de ez módosítható) –MainWindow.xaml.cs + generált bin/obj/MainWindow.g.cs = MainWindow osztály –InitializeComponent() függvény generálódik bele, amiben betölti a XAML fájlt 29

V 1.0 WPF Hello World Felhasználói felület XAML nyelvű leírása és designer 30

V 1.0 WPF Hello World Ablak mögöttes kód (code-behind) fájlja 31

V 1.0 WPF Hello World A kijelölt felhasználóifelületelem-példány tulajdonságai a Properties ablakban szerkeszthetők 32

V 1.0 WPF Hello World II. 33

V 1.0 WPF Hello World II. Eseménykezelés –A vezérlők (később pontosítjuk!) eseményeire való feliratkozást a Properties ablakban (villám ikon) lehet megtenni –Kettős kattintással új eseménykezelő jön létre a code-behind fájlban, és megtörténik a feliratkoztatás az eseményre –Törlés és enter után a feliratkozás törlődik, a létrejött függvény nem! (Kézzel törlendő, ha már nem szükséges.) –Eseménykezelőt hozzárendelni a vezérlőn való kettős kattintással is lehet, ez az ún. alapértelmezett eseményhez rendel eseménykezelőt 34

V 1.0 Toolbox Vezérlők –Felhasználói interakcióhoz Egyszerű grafikai elemek Ablakkereteket kiegészítő elemek –Menü, eszközkészlet, státuszsor… Tartalommenedzserek –Elemek csoportosítására, méretezés kezelésére Stb. 35

V 1.0 Egyszerű vezérlők Button (nyomógomb) –Content tulajdonság tartalmazza a szöveget (?) –Click esemény Label (szöveg) –Content tulajdonság tartalmazza a szöveget(?) CheckBox (jelölőnégyzet) –Content tulajdonság tartalmazza a szöveget (?) –IsChecked tulajdonság tartalmazza, hogy be van-e jelölve –Checked/Unchecked események RadioButton (rádiógomb) –Content tulajdonság tartalmazza a szöveget (?) –GroupName csoportosítja, de enélkül is biztosít a csoportosításra logikát –IsChecked –Checked/Unchecked események 36

V 1.0 Egyszerű vezérlők TextBlock (szöveg II) –Text tulajdonságban van a szöveg TextBox (szövegbeviteli mező) –Text tulajdonságban van a szöveg –TextChanged esemény GroupBox (csoportosító doboz) –Header tartalmazza a fejléc szövegét –Content tulajdonságban van a tartalom Stb. 37

V 1.0 Listavezérlők ListBox (lista) –Items tulajdonság tartalmazza az elemeket –SelectionChanged esemény ComboBox (legördülő lista) –Items tulajdonság tartalmazza az elemeket –SelectionChanged esemény TreeView + TreeViewItem (fanézet) –Items tartalmazza az elemeket Ha TreeViewItem van benne, azon belül is Items tartalmazza az elemeket, Header a szöveget 38

V 1.0 Feladat 39

V 1.0 Gyakorló feladat 40

V 1.0 Feladat 41

V 1.0 Feladat – előző kiegészítése 42

V 1.0 Feladat 43