vizuális, eseményvezérelt programozás - users.nik.uni...

16
V 1.0 Vizuális, eseményvezérelt programozás X. 1 ÓE-NIK, 2011

Upload: hoanganh

Post on 09-Apr-2019

231 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0

Vizuális, eseményvezérelt programozás

X.

1 ÓE-NIK, 2011

Page 2: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 2

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.

Page 3: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 3

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.

Page 4: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 4

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

Page 5: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 5

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

C# fordítóprogram

.NET futtatókörnyezet

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

Page 6: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 6

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.

Page 7: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 7

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

Page 8: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 8

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.

Page 9: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 9

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ó.

Page 10: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 10

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)

Page 11: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 11

Automatikus memóriakezelés

A felügyelt memória („managed heap”) [A]

A B C D E F G H I J K

Felügyelt memóriaterület

Hivatkozások Mezők

Paraméterek Helyi változók

CPU regiszterek

Következő objektum helye

A C G K

Destruktorhívást igénylő objektumok listája („finalization queue”)

Destruktorhívásra váró objektumok listája („freachable queue”)

Page 12: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 12

Automatikus memóriakezelés

A felügyelt memória („managed heap”) [A]

A C D F G H I K

Felügyelt memóriaterület (egy szemétgyűjtési ciklus után)

Hivatkozások Mezők

Paraméterek Helyi változók

CPU regiszterek G K

Destruktorhívást igénylő objektumok listája („finalization queue”)

Destruktorhívásra váró objektumok listája („freachable queue”)

Következő objektum helye

A C

Page 13: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 13

A .NET keretrendszer vázlatos felépítése

Operációs rendszer

.NET keretrendszer

.NET futtatókörnyezet (Common Language Runtime) JIT fordító

Egységes típusrendszer

Memória-kezelés

Programkód ellenőrzése

Kompatibilitási réteg

Verziókezelés

.NET osztálykönyvtár (Framework Class Library) IO Management Messaging Net ADO.NET

Remoting Security Threading XML Reflection ...

...

Windows Forms osztálykönyvtár Vezérlők

Grafikai eszközök

Egyéb szolgáltatások

ASP.NET osztálykönyvtár Web-

szolgáltatások Vezérlők

.NET alapú alkalmazások

Page 14: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 14

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é

.NET osztálykönyvtár (Framework Class Library) IO Management Messaging Net ADO.NET

Remoting Security Threading XML Reflection ...

...

Windows Forms osztálykönyvtár Vezérlők

Grafikai eszközök

Egyéb szolgáltatások

ASP.NET osztálykönyvtár Web-

szolgáltatások Vezérlők

Page 15: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 15

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

Page 16: Vizuális, eseményvezérelt programozás - users.nik.uni ...users.nik.uni-obuda.hu/vep/Diasorozatok/VEPuj_10-11-1_dotnet.pdf · V 1.0 7 A .NET egységes típusrendszere •A .NET

V 1.0 16

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