Vizuális, eseményvezérelt programozás X. V 1.0 ÓE-NIK, 2011 1
Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. V 1.0 2
Mi a.net keretrendszer? A.NET keretrendszer (.NET Framework ) egy önálló programozási környezet az operációs rendszer szintje felett, amely új absztrakciós rétegként ékelődik be a szoftveralkalmazások és az operációs rendszer közé. Ezt az absztrakciós réteget szokás virtuális gép -nek is nevezni, amely saját, nyelvi szinten objektumorientált programozási felületet megvalósító utasításkészlettel rendelkezik A.NET keretrendszerre írt programok számára ez az utasításkészlet érhető el, futtatásukat pedig a keretrendszer végzi és felügyeli (ebből következően a.net programok futtatásához szükség van a keretrendszerre is). Maga a keretrendszer elvileg bármely operációs rendszerre elkészíthető, ami a megírt programok számára a platformfüggetlenség lehetőségét kínálja fel. V 1.0 3
A köztes nyelv és a.net futtatókörnyezet A.NET alapú alkalmazások által használható utasításkészlet az ún. köztes nyelv utasításaiból áll A köztes nyelv elnevezése Intermediate Language vagy IL, emellett szokás CIL ( Common Intermediate Language ) vagy MSIL ( Microsoft Intermediate Language ) néven is hivatkozni rá. A magasabb szintű.net nyelveken (C#, Visual Basic.NET stb.) írt programokat erre a nyelvre fordítja le a megfelelő fordítóprogram (így ún. köztes kód jön létre) Futtatáskor a köztes kódot menet közben ellenőrzi és fordítja le az ún. futtatókörnyezet a tényleges hardverplatformon használt, a processzoron közvetlenül futtatható gépi kódra ( natív kód ) A futtatókörnyezet a keretrendszer része, a neve Common Language Runtime Execution Engine, vagy röviden CLR. A keretrendszer által ellenőrzött és kézben tartott köztes kódú programot felügyelt kód -nak ( managed code ) nevezzük. A natív gépi kódra lefordított, immár ellenőrzött és biztonságos programkódot az operációs rendszer futtatja a hardveren V 1.0 4
C# fordítóprogram.net futtatókörnyezet A.NET keretrendszerre C# nyelven megírt forráskód A forráskód lefordítása után előállt köztes (IL) kód Amennyiben az elkészült programot x86 processzoron futtatjuk, az alábbi natív gépi kód készül el, majd fut le V 1.0 5
Menet közbeni fordítás és optimalizálás A köztes kód natív gépi kódra való fordítását a menet közbeni fordító ( JIT fordító, angolul JIT compiler vagy just-in-time compiler ) végzi el A JIT fordító minden metódust az első híváskor fordít le natív gépi kódra. A fordítás eredményét eltárolja, így ezt követően a metódus újabb hívásai esetén már nincs szükség fordításra, ilyenkor a már lefordított gépi kód fut. Ebből következően a programok indításánál és az egyes metódusok első végrehajtásánál komoly sebességveszteség lép fel, ami azonban később, a program futása közben eltűnik. Az OOP általános jellemzője a metódushívások igen nagy száma és gyakori ismétlődése, így ez a megoldás teljesítmény szempontjából is jól illeszkedik az OOP paradigmához. Az első hívás sebességveszteségének ellensúlyozására előfordítás végezhető. A menet közbeni fordítás lehetőséget ad a kód optimalizálására is. V 1.0 6
A.NET egységes típusrendszere A.NET keretrendszer egységesen, a köztes nyelv szintjén rögzít bizonyos nyelvi tulajdonságokat és típusokat Ezek a tulajdonságok az IL (tehát a köztes kód) szintjén valósulnak meg, így minden olyan magasabb szintű nyelvre érvényesek, amelyhez létezik a.net keretrendszert támogató, IL kódot készítő fordítóprogram. Az egységes típusrendszer neve angolul Common Type System vagy röviden CTS A típusrendszer legfontosabb jellegzetességei: a) Objektumorientált felépítés, interfészek intenzív alkalmazása b) Nyelvfüggetlenség (a magasabb szintű nyelvek tekintetében) c) Szigorú típuskezelés d) Értéktípusok és referenciatípusok egyértelmű megkülönböztetése e) Átfogó kivételkezelés f) Attribútumok koncepciója V 1.0 7
Automatikus memóriakezelés Objektumorientált rendszerekben az egyes típusok (osztályok) példányosításához és használatához memóriára van szükség A.NET programozási környezetben a referenciatípusok memóriakezelésének főbb lépései a következők: 1. A típus egy példányához szükséges memória lefoglalása A C# nyelvben például a new operátor használatakor. 2. A lefoglalt memóriában tárolandó kezdőértékek beállítása, a példány használható állapotba hozása Ezt a feladatot mindig a típus megfelelő konstruktora hajtja végre. 3. A típusból létrejött példány életciklusának fő részeként a következő lépés a hozzá tartozó tagok használata, akár többször egymás után ismételve 4. A példány használatának befejezésekor szükség lehet állapotmódosításra vagy az általa használt erőforrások korábbi állapotának visszaállítására Ezt a feladatot általában a típus destruktora/dispose() függvénye hajtja végre. 5. A típusból létrehozott példány által használt memória felszabadítása A.NET automatikus memóriakezelője vállalja magára ezt a teendőt. V 1.0 8
Automatikus memóriakezelés A szemétgyűjtő ( garbage collector ) A.NET memóriakezelője a lefoglalás és a felszabadítás lépéseit automatikusan elvégzi A két leggyakoribb programozói hiba a nem használt memóriaterületek felszabadításának elfelejtése, illetve a már felszabadított memória újbóli használata. Ezeket a hibákat a.net felügyelt memóriakezelése kiküszöböli. A memóriakezelő azokat a memóriaterületeket szabadítja fel, amelyeket már egyetlen osztály egyetlen példánya sem használ A memóriakezelőnek azt a részét, amely a felszabadítható memóriaterületek megkeresését és a felszabadítás műveletét végzi, szemétgyűjtőnek nevezzük. A szemétgyűjtő külön szálon fut, és bizonyos feltételek fennállása esetén felébred, hogy memóriát szabadítson fel. Mivel ez komoly erőforrásigényű művelet, igen bonyolult algoritmusok biztosítják, hogy erre a lehető leggyorsabban és optimális időpontokban, csak szükség esetén kerüljön sor. A szemétgyűjtő algoritmus a System.GC osztály Collect() metódusán keresztül is meghívható. V 1.0 9
Automatikus memóriakezelés Destruktorok A destruktorok feladata hagyományosan a fenti 4. lépés, tehát a típus által használt erőforrások korábbi állapotának visszaállítása A.NET típusrendszerében erre az automatikus memóriakezelés következtében ritkán van szükség, ezért a.net programozási nyelveiben csak speciális helyzetekre szokás destruktort készíteni. A destruktor valójában egy Finalize() nevű metódus, amelyet például a C# fordító nem enged meghívni még a típus saját kódjából sem, megakadályozandó, hogy a programozók elfelejtsék kezelni a kivételeket vagy elfelejtsék meghívni az őstípus destruktorát. Mivel a szemétgyűjtő futása a program szemszögéből nézve nem determinisztikus, nem lehet előre tudni, hogy a már nem használt objektumokon mikor fut le a típus destruktora Előfordulhat, hogy egy-egy típusnál nem célszerű vagy nem gazdaságos megvárni, amíg szükség lesz szemétgyűjtésre (például szűkös grafikai vagy adatbázis-erőforrások használata esetén). Megoldás: IDisposable interfész megvalósítása (Dispose() metódus) V 1.0 10
Automatikus memóriakezelés A felügyelt memória ( managed heap ) [A] Felügyelt memóriaterület A B C D E F G H I J K Következő objektum helye Hivatkozások Mezők Paraméterek Helyi változók CPU regiszterek A C G K Destruktorhívásra váró objektumok listája ( freachable queue ) Destruktorhívást igénylő objektumok listája ( finalization queue ) V 1.0 11
Automatikus memóriakezelés A felügyelt memória ( managed heap ) [A] Felügyelt memóriaterület (egy szemétgyűjtési ciklus után) A C D F G H I K Következő objektum helye Hivatkozások Mezők Paraméterek Helyi változók CPU regiszterek G K A C Destruktorhívásra váró objektumok listája ( freachable queue ) Destruktorhívást igénylő objektumok listája ( finalization queue ) V 1.0 12
A.NET keretrendszer vázlatos felépítése.net keretrendszer ASP.NET osztálykönyvtár Windows Forms osztálykönyvtár Vezérlők.NET alapú alkalmazások Memóriakezelés Webszolgáltatások Vezérlők Grafikai eszközök Egyéb szolgáltatások.net osztálykönyvtár (Framework Class Library) ADO.NET IO Management Messaging Net... Reflection Remoting Security Threading XML....NET futtatókörnyezet (Common Language Runtime) JIT fordító Egységes típusrendszer Verziókezelés Programkód ellenőrzése Kompatibilitási réteg Operációs rendszer V 1.0 13
A.NET osztálykönyvtárai A.NET osztálykönyvtárai különböző névterekben több ezer előre megírt osztályt tartalmaznak, amelyek széles körű beépített funkcionalitást tesznek elérhetővé ASP.NET osztálykönyvtár Windows Forms osztálykönyvtár Vezérlők Webszolgáltatások Vezérlők Grafikai eszközök Egyéb szolgáltatások.net osztálykönyvtár (Framework Class Library) ADO.NET IO Management Messaging Net... Reflection Remoting Security Threading XML... V 1.0 14
A.NET osztálykönyvtárai Fontosabb beépített névterek System alapvető típusok minden alkalmazáshoz System.Collections gyűjtemények, vermek, sorok, listák, hasítótáblák... System.Diagnostics alkalmazások hibakeresésének támogatása System.Drawing kétdimenziós rajzolófunkciók System.IO adatfolyam-alapú fájlkezelés, könyvtárak kezelése System.Net hálózati kommunikáció System.Reflection metaadatok és típusok futási idejű vizsgálata System.Runtime.Remoting típusok és példányaik távoli elérése System.Runtime.Serialization objektumok tárolása és visszaállítása System.Security adatok és erőforrások védelme System.Threading többszálú aszinkron programozás, párhuzamos erőforráselérés System.XML XML sémák és XML formátumú adatfolyamok feldolgozása V 1.0 15
A.NET osztálykönyvtárai Fontosabb támogatott alkalmazástípusok Windows-alapú grafikus felülettel rendelkező programok Windows 2000, XP és Vista alkalmazások Windows-alapú konzolos alkalmazások Parancssoros ablakon keresztül kommunikáló programok Komponensek és osztálykönyvtárak Tetszőleges osztályok, vezérlők és komponensek gyűjteményei Háttérben futó rendszerszolgáltatások Felhasználói felület nélküli, a géppel együtt induló háttérszolgáltatások XML webszolgáltatások Távolról, http és https protokollon keresztül hívható metódusok Webes felülettel rendelkező programok Weboldalak és portálok V 1.0 16