1 / 148

Ismétlés

Ismétlés. Néhány fontosabb nyelvi elem . Tulajdonságok. Tulajdonságok. Cél: Korlátozott láthatóságú adattagok beállítási/lekérdezési műveleteinek megoldása egyszerűbb (tömörebb) szintaktikával Számított értékű mező megvalósítása Mikor előnyös?

viola
Download Presentation

Ismétlés

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ismétlés Néhány fontosabb nyelvi elem

  2. Tulajdonságok

  3. Tulajdonságok Cél: • Korlátozott láthatóságú adattagok beállítási/lekérdezési műveleteinek megoldása egyszerűbb (tömörebb) szintaktikával • Számított értékű mező megvalósítása Mikor előnyös? • Kevés kód szükséges a hozzáférés szabályozásához • A kód nem virtuális J.Zs.Cs.: Vizuális programozás (c) 2013

  4. Elérők (accessors) • Tulajdonságelérő "tagfüggvények" class Nyomógomb { privatestring Felirat; //a háttérben levő korlátozott hozzáférésű adattag publicstringNFelirat//az adattagot "közzétevő" tulajdonság, ez látható { get { return Felirat;} //lekérdező elérő set { if( value!=null && …) //ellenőrzött beállítás Felirat=value; } } … J.Zs.Cs.: Vizuális programozás (c) 2013

  5. Csak olvasható tulajdonság private int Szélesség; private int Magasság; … public int Terület //számított tulajdonság, nincs mögötte adattag { get { return Szélesség*Magasság; } } //a tulajdonság csak olvasható J.Zs.Cs.: Vizuális programozás (c) 2013

  6. Használat Nyomógomb ng=new Nyomógomb(); … ng.NFelirat="Ok"; //set elérő használata … int Ter=ng.Terület; //get elérő használata J.Zs.Cs.: Vizuális programozás (c) 2013

  7. Jellemzők • Nem használható fel metódus ref vagy out paramétereként • Nincs címe • Lehet statikus • Elfedheti ősosztály azonos nevű tagját (new) • Lehet virtuális, absztrakt vagy override • Megjelenhet egy interfészben J.Zs.Cs.: Vizuális programozás (c) 2013

  8. Jellemzők • Nem lehet void • A mögötte levő korlátozott láthatóságú tagokat lecserélhetjük a "kifele" mutatott tulajdonság cseréje nélkül • Nem vehet át közvetlenül egynél több értéket J.Zs.Cs.: Vizuális programozás (c) 2013

  9. Tulajdonság típusok • Írható-olvasható • Csak olvasható • Csak írható • static: • Osztályszintű, csak az osztály statikus adataihoz fér hozzá, • Nem hivatkozhat a this-re vagy példány szintű tagokra • Nem lehet virtuális, absztrakt vagy override J.Zs.Cs.: Vizuális programozás (c) 2013

  10. Lazy creation • Lazyinstantiation, just-in-timecreation • A háttérben levő korlátozott hozzáférésű mező null kezdőértéket kap • Igazi kezdőértéket a tulajdonsághoz történő első hozzáféréskor, pl. olvasáskor kapja meg a get-be beépített inicializáló kód útján J.Zs.Cs.: Vizuális programozás (c) 2013

  11. Automatikus tulajdonság(automatikusan implementált) J.Zs.Cs.: Vizuális programozás (c) 2013

  12. Példaprogram Jelszóbekérő ablak

  13. Indexelők

  14. Indexelő • Rokon vonásokat mutat a tulajdonságokkal és a C++ tömbindex operátor átdefiniálásával Cél: • Egy objektumnév után illesztve a tömbindex operátort és indexként egy értéket megadva elérjük az objektum egy adattagját, vagy az adattagban tárolt adatok valamelyikét J.Zs.Cs.: Vizuális programozás (c) 2013

  15. Jellemzők • Átdefiniálható más indextípust megadva • Nem adható át ref vagy out paraméterként • Nem lehet statikus J.Zs.Cs.: Vizuális programozás (c) 2013

  16. Példaprogram Asszociatív

  17. Extensionmethod • Bővítő metódus • Létező osztály kiterjesztése új metódussal az eredeti osztály módosítása nélkül • Nem kell származtatott osztályt létrehozni (előnyös sealed osztályoknál) • Meghívható az eredeti osztály objektumára http://msdn.microsoft.com/en-us/library/bb311042%28v=vs.100%29.aspx J.Zs.Cs.: Vizuális programozás (c) 2013

  18. Létrehozás J.Zs.Cs.: Vizuális programozás (c) 2013

  19. Használat J.Zs.Cs.: Vizuális programozás (c) 2013

  20. Virtual példa 20 J.Zs.Cs.: Vizuális programozás (c) 2010 J.Zs.Cs.: Vizuális programozás (c) 2013

  21. Virtuális metódus • Futási időben dől el, hogy az osztályhierarchián belüli virtuális metóduslánc melyik tagja hajtódik végre • Virtuális metódus nem lehet private • A virtual kulcsszó nem használható a static, abstractésoverridekulcsszavakkal együtt • Ha definiálunk a leszármazott osztályban ugyanilyen paraméterszignatúrával egy metódust, akkor azt • a virtuális metóduslánc folytatásának tekintjük (override) • a lánctól független metódusnak tekintjük (new) • új virtuális lánc kezdetének tekintjük (newvirtual) J.Zs.Cs.: Vizuális programozás (c) 2013

  22. virtual - override class Szülő { ... public virtual intMetódus( ) { ... } public virtual int AdatLekér(){ … } } class Gyerek: Szülő { ... public overrideintMetódus( ) { ... } new public int AdatLekér(){ … } } J.Zs.Cs.: Vizuális programozás (c) 2013

  23. override • A felüldefiniált metódus virtuális vagy absztrakt kell legyen • Az override nem változtathatja meg az elem elérési szintjét (public, protected) • Nem használható a new, static, virtual, abstract kulcsszavak együtt J.Zs.Cs.: Vizuális programozás (c) 2013

  24. new • new-val virtuális metódus is definiálható (a bázis osztályban nem volt virtuális, de az aktuális osztályban és annak leszármazottaiban az) • new-val adattag és leszármazott osztály is elfedhető • Öröklött metódus vagy adattag elfedése: new kulcsszó J.Zs.Cs.: Vizuális programozás (c) 2013

  25. Lambda kifejezés • Egyszerű eszköz inline (névtelen)metódus megvalósítására • A fordító egy névtelen metódussal fogja helyettesíteni • Implicit típusdef. a parlistában: • (paraméterlista)=>{utasítások} • paraméter=>utasítás • Explicit típusdef a parlistában: • (int i)=>3*i J.Zs.Cs.: Vizuális programozás (c) 2012

  26. Lambda kifejezés és implicit típusdefiníció használata Random R=new Random(); List<int> L=new List<int>(); for (int i = 0; i < 20; i++) L.Add(R.Next(1000)); varPáratlanok = L.FindAll(Páratlan); Console.WriteLine("Páratlan számok: " +List2Str(Páratlanok)); varPárosok = L.FindAll(i => i%2==0); Console.WriteLine("Páros számok: " + List2Str(Párosok)); J.Zs.Cs.: Vizuális programozás (c) 2013

  27. Objektum inicializálás J.Zs.Cs.: Vizuális programozás (c) 2013

  28. Metódusreferencia és eseménykezelés

  29. Metódusreferencia (delegate) • Egy speciális változó, ami objektum jegyekkel is rendelkezik • Egy metódusra történő hivatkozást tárol, rajta keresztül hívható meg a metódus • Funkcióját tekintve hasonló a C++ függvénycímet tárolni képes mutatójához • Tartalma futási időben változtatható, különböző időpontokban más és más metódust – akár különböző osztályok tagjait – hívhatunk meg ugyanazon a metódusreferencián keresztül • Objektum tag és statikus osztálytag metódus egyaránt meghívható J.Zs.Cs.: Vizuális programozás (c) 2013

  30. Alkalmazás - cél • Pl. több osztály/objektum eltérő nevű, de azonos paraméterlistájú és visszatérési értékű metódussal rendelkezik • A feladat az, hogy ezeket felváltva, vagy egymás utáni sorozatban meghívjuk • A meghívó metódus olyan kell legyen, hogy a rendszer újabb osztályokkal történő bővítése ne igényeljen jelentős kódmódosítást J.Zs.Cs.: Vizuális programozás (c) 2013

  31. Megoldás • Egy tömböt/listát hozunk létre, aminek elemei metódusreferenciák lesznek • Amikor • egy új objektummal • egy új statikus metódussal • bővül a rendszerünk, létrehozunk egy metódusreferenciát, amiben tároljuk az új objektumban (v. osztályban) meghívni kívánt metódus referenciáját, majd • a metódusreferenciát felvesszük a listába J.Zs.Cs.: Vizuális programozás (c) 2013

  32. Lépések Metódusreferencia típus deklarálása publicdelegatevisszértéktipMetódusReferenciaTípusNév(paraméterlista); Metódusreferencia típusú változó definiálása MetódusReferenciaTípusNévMVáltozó; Metódusreferencia objektum létrehozása MVáltozó=newMetódusReferenciaTípusNév(objektumnév.metódusnév); objektumnév.metódusnév: meghívandó metódus neve Metódus meghívása: MVáltozó(aktuális paraméterek); J.Zs.Cs.: Vizuális programozás (c) 2013

  33. Metódusreferencia példaalkalmazás J.Zs.Cs.: Vizuális programozás (c) 2013

  34. Esemény • Lehetővé teszi, hogy egy objektum más objektumokat értesítsen egy változásról • Két szereplő (objektum) típust különböztetünk meg: • Közzétevő (publisher): előidéz egy eseményt, hogy értesítse az összes érdekelt – feliratkozott (subscriber) objektumot • Feliratkozó (subscriber): megad egy metódust, amit meg kell hívni egy esemény bekövetkeztekor, regisztrálja magát közzétevőnél • Egy eseményre többen is feliratkozhatnak, de az is előfordulhat, hogy nincs érdeklődő • Megvalósítás: metódusreferenciák segítségével J.Zs.Cs.: Vizuális programozás (c) 2013

  35. Megvalósítás • Metódusreferencia típus definiálásapublic delegate void MTípusNév(paraméterlista); a visszatérési érték típusa void kell legyen • A metódusreferencia típuson alapuló esemény definiálásapublic event MTípusNév EseményNév; J.Zs.Cs.: Vizuális programozás (c) 2013

  36. Megvalósítás Feliratkozás az eseményre az eseménykezelő metódus megadásával EseményNév+=newMTípusNév(objnév.esemkeznév) Vagy EseményNév+=objnév.esemkeznév Vagy EseményNév+=osztnév.esemkeznév J.Zs.Cs.: Vizuális programozás (c) 2013

  37. Esemény előidézése … if(EseményNév!=null) //ha van feliratkozó EseményNév(this); … • Meghívja sorban az egyes eseménykezelőket • A sorrend nem biztos • Ha közben kivétel keletkezik, akkor a még „várakozó” eseménykezelők meghívása elmaradhat J.Zs.Cs.: Vizuális programozás (c) 2013

  38. Paraméterek átadása • Első paraméter konvencionálisan a közzétevő objektum:object sender, mert egy eseménykezelő több objektum eseményeire is figyelhet • A további paramétereket egy objektum adattagjaiként kell átadni, ennek osztálya az EventArgs leszármazottja kell legyen • Létre kell hozni hozzá egy osztályt J.Zs.Cs.: Vizuális programozás (c) 2013

  39. Röviden a .Net platformról

  40. Mit nyújt? • biztosítja az eszközöket osztott web alkalmazások fejlesztéséhez • nyelvfüggetlen programozási modellt biztosít • támogatja a web-es protokollokat (HTTP, XML, XPath, SOAP) • ingyenesen letölthető • egységes felület, egyazon osztályhierarchia több nyelvből is elérhető • egy alkalmazás különböző részeit más célorientált nyelveken is írhatják • különböző nyelvekben járatos programozók „olcsón” (kis ráfordítással) képesek együttműködni egy projektben – RAD megvalósítása J.Zs.Cs.: Vizuális programozás (c) 2013

  41. A .NET fejlesztői platform Entity framework 3.5 LINQ WCS 3.0 WPF WCF WWF Windows Forms ASP.NET ADO.NET .NET 2.0 Base Class Library Common Language Runtime J.Zs.Cs.: Vizuális programozás (c) 2013

  42. Common Language Runtime Osztálykönyvtár-kiszolgálás Szálkezelő COM Marshaler Típusellenőrző Kivételkezelő Biztonsági motor Hibakereső motor IL  NatívJIT-fordítók Kódkezelő Szemétgyűjtő Osztálybetöltő J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]

  43. Használat • a programok futtatásához szükség van a keretrendszerre (.Net Framework) • a MS jelenleg saját operációs rendszereire fejleszti • MS Rotor - FreeBSD • Mono (www.go-mono.com) 2.6.3 • DotGnu (www.gnu.org/projects/dotgnu) 0.1 J.Zs.Cs.: Vizuális programozás (c) 2013

  44. Fordítás - futtatás • A fordítási folyamat eredményeképpen keletkező állomány megtévesztő módon exe kiterjesztést visel, de • ez egy bájtkód MS Intermediate Language-ben • végrehajtáskor egy JIT fordító állítja elő ebből a gépi kódot J.Zs.Cs.: Vizuális programozás (c) 2013

  45. Felügyelt kódFordítás és végrehajtás Fordítás Forráskód(.cs, .vb, …) Nyelvi fordító Kód (IL) + Metaadatok(.dll, .exe) Végrehajtás JIT fordító Szerelvény Natív kód Telepítéskor vagy a metódus első meghívásakor J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]

  46. Robosztusés biztonságosFelügyelt kód • Felügyelt köztes kód: • Ellenőrizhető • Kötelező metainformációk • Processzor és architektúra független • Kiértékelő verem alapú • A kód szigorú típusellenőrzésnek vethető alá • Megszűnnek a leggyakoribb hibaforrások • ellenőrizetlen veszélyestípusváltások, mutatóbűvészkedések • inicializálatlan változók, tömbből kilógó indexek • Kivételkezelés • Nyelvi szinten és a CLR-ben definiált hibakezelés • Integrálódik a Windows strukturált kivételkezelésével is (SEH) J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]

  47. Robosztusés biztonságosFelügyelt adatok • Felügyelt adat • Automatikus élettartam-felügyelet • Minden.NET objektumot a GC takarít el • GC: garbage collector – a szemetes • Nincs elfelejtett mutató vagy korai delete hívás • a cirkuláris hivatkozások nem okoznak gondot • Modern, önhangoló GC algoritmusok • a felhasználói interfész nem akad meg • jó szerver oldali átbocsátóképesség J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]

  48. Fejlesztőeszközök • Elvileg akár a jegyzettömbben is megírhatjuk programunkat, és lefordíthatjuk azt a keretrendszerbe beépített csc nevű fordítóval • SharpDevelop 3.2 – a C# és a VB.NET projektekhez http://www.icsharpcode.net/OpenSource/SD/ • MonoDevelop 2.2http://monodevelop.com J.Zs.Cs.: Vizuális programozás (c) 2013

  49. SharpDevelop J.Zs.Cs.: Vizuális programozás (c) 2013 http://www.icsharpcode.net/OpenSource/SD/

  50. ILDASM Start menü/Programok/ Microsoft Visual Studio 2008/ Visual Studio Tools/ Visual Studio 2008 Command Prompt J.Zs.Cs.: Vizuális programozás (c) 2013

More Related