.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: aroan@ektf.hu 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 aroan@ektf.hu 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
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
- 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
- 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
- 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
- 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 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