.NET (Dot-NET) #1 (Bevezetés) v0.2a 2004.02.05. 23:49:00
Eszterházy Károly Főiskola Információtechnológia tsz.
Hernyák Zoltán adj. e-mail:
[email protected] web: http://aries.ektf.hu/~aroan 1
E jegyzet másolata nem használható fel szabadon, az előadás anyagának kivonata. Ezen teljes jegyzetről, vagy annak bármely részéről bármely másolat készítéséhez a szerző előzetes írásbeli hozzájárulására van szükség. A másolatnak tartalmaznia kell a sokszorosításra vonatkozó korlátozó kitételt is. A jegyzet kizárólag főiskolai oktatási vagy tanulmányi célra használható! A szerző hozzájárulását adja ahhoz, hogy az EKF számítástechnika tanári, és programozó matematikus szakján, a tárgyat az EKF TO által elfogadott módon felvett hallgatók bármelyike, kizárólag saját maga részére, tanulmányaihoz egyetlen egy példány másolatot készítsen a jegyzetből. A jegyzet e változata még tartalmazhat mind gépelési, mind helyességi hibákat. Az állítások nem mindegyike lett tesztelve teljes körűen. Minden észrevételt, amely valamilyen hibára vonatkozik, örömmel fogadok. Hernyák Zoltán
[email protected]
2
3
Alapfogalmak CLR: Common Language Runtime: egy rendszer, amely egy „virtuális gépi kódú nyelv”-re fordított programokat (.exe) képes futtatni. BCL: Base Class Library: egy osztálygyűjtemény, amely „kész”, általános célú objektumokat tartalmaz. Ezeket az objektumokat a .NET minden támogatott nyelvében el lehet érni. CLS: Common Runtime Specification: A „virtuális gépi kódú” nyelv, melyre le kell fordítani a .NET alatt futtatandó programokat. A .NET programok (bár .exe-k), nem közvetlenül futtatható programok, hanem egy köztes kódra fordított programok, amelyeknek az „eleje” normális gépi kód, de csak annyit „csinál”, hogy értesíti az operációs rendszert, hogy töltse be rá a CLR rendszert, amely átveszi a program futtatásának feladatát. 4
A CLR, a BCL szabadon letölthető (free software) a Microsoft honlapról „.NET Framework” címszó alatt. Ezt
(többek
között)
a
„C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\”
alkönyvtárba telepszik fel. Ebben
található
egy
„CSC.EXE”,
amely
a
C#
(C-Sharp,
ejtsd
szí-sarp)
programnyelv parancssori fordítója. A másik mód, hogy a „Microsoft Visual Studio v7.0” másik nevén „Microsoft Visual Studio .NET” fejlesztőrendszert tesszük fel (5 cd). Ezt tartalmazza a Framework-t is. A Framework-nek készül a LINUX-os változata!!!! (http://www.go-mono.org) A C# fordító is készült LINUX-ra. 5
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). Ugyanakkor ezzel megvalósítható a kód futtatásának felügyeletét: - erőforrás-felügyelet: szabályozható, hogy a program milyen erőforrásokhoz férhet hozzá (file-ok, internet, hálózati kapcsolatok, stb…) - a programok ezt az ellenőrzést nem kerülhetik meg - minden erőforrásigénylésüket a CLR-en keresztül kell megvalósítaniuk - minden programhoz beállítható, hogy miket engedélyezünk neki: START menü / Beállítások / Vezérlőpult / Felügyeleti eszközök / Microsoft .NET Framework Configuration - Ezzel megvédhetjük számítógépeinket, hogy pl. az Internet-ről letöltött, és elindított programok ne legyenek képesek „illegális” tevékenységeket folytatni (vírusok), ne olvashassák a file-okat, ne küldhessenek adatokat ki valamely hálózati kapcsolaton keresztül, … 6
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). - ugyanakkor nem érdekes, hogy melyik programnyelven írtuk az eredeti kódot, a számítógép a generált .exe-t fogja futtatni - ezért tetszőleges programnyelven meg lehet (majd) írni a programokat, csak a lényeges, hogy a fordító és szerkesztő programok ne „natív” windows-os .exe-t generáljanak, hanem .NET-es .exe-t. - a virtuális gépi kód OOP-t támogató kód! - ezért az általunk használt magasszintű programnyelveknek is OOP nyelveknek kell lenniük! - jelenleg is már 10 fölötti a .NET-et támogató nyelvek listája - a Microsoft a Visual Basic, C++, C#, Java Script, J# (Java-alapú) nyelvekhez elkészítette a fordítókat - egyéb nyelvekhez külső cégek készítik el a fordítókat (pl. Inprise-Delphi)
7
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). - az interpretert egy JIT (Just-In-Time) compiler támogatja, amely „dönthet” úgy, hogy a virtuális gépi kód bizonyos (sűrűn hívott) részeit futtatás közben a memóriában natív kódra fordítja (sebességnövekedés) - ezzel pl. megoldható az, hogy a jövő processzorai új regisztereket is tartalmaznak majd, akkor ugyanaz az .exe kód ezeken ezt máris ki fogják használni - a processzor-specifikus gépi kódú utasításokat használja (AMD, Intel Pentium,…) - az adott operációs rendszer lehetőségeit messzemenőkig kihasználja a program
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). Ugyanakkor az NGEN.EXE-vel a lefordított .NET programot natív kódra lehet fordítani. Ezzel a kód az adott processzorhoz és operációs rendszerhez lesz optimalizálva, futása ebben a környezetben 2x 3x gyorsabb lesz (lehet)!
8
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). - ezzel megszűnnek az eredeti magasszintű nyelvek adatábrázolási különbségei: - sztringek tárolása (C és PASCAL stílus, ASCII és UNICODE, stb…) - számtípusú adatok tárolási különbsége (méret, pontosság, stb…) - tömbök indexelése (egységesen 0..n-1 indexelésú (Basic-esek sírnak!!!)) - stb… - a CLS-nek megfelelő nyelvek képesek együtt működni: - a kész projekt egyik felét pl. C++-ban is meg lehet írni - a másik felét Visual Basic-ben - mindkét felét először CLS-nek megfelelő „virtuális gépi kódra” fordítják le - a kettőből a szerkesztő összeállítja a működő kész programot
9
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). - de a program futtatásához szükséges DLL (Dynamic Link Library = közös (shared)
eljárás
és
fvgyűjtemény)
verzióit
minden
program
magának
specifikálhatja, azaz nem okoz problémát, hogy ha valamelyik program ugyanazon néven feltesz egy közös DLL-t, azt erre hivatkozó programok vagy „megbíznak” ebben a DLL-ben, és használják, vagy a saját régebbi verziót használják tovább - ennek kezelését a CLR végzi - A DLL-ek nem csak függvényeket exportálhatnak, hanem típusinformációval ellátott objektumosztályokat!!! - a programok védettek a buffer overflow vírustechnikával szemben
10
A CLR interpreteres üzemmódban futtatja a .NET programokat (ez lassú). - a CLR nyilvántartja a program erőforrás-felhasználását, és hiba esetén terminálja a programot, és korrekt módon felszabadítja az erőforrásokat - ez kiterjed az objektumok destruktorainak automatikus meghívására is (garbage collector funkció) „normális” programfuttatás közben is.
11