.Net előadás jegyzet – 1. óra
1.oldal
.NET Microsoft .Net Framework Előadás jegyzet Előadó: Pócza Krisztián ELTE,2008
.NET Framework alapjai Hasznos tudnivalók A jegyzet Pócza Krisztián .NET Framework és Programozása I. című előadása alapján készült A tárgy honlapja : http://avalon.inf.elte.hu/edu/net/default.aspx E-mail: kpocza at kpocza dot net A tárgy honlapján további hasznos információk, példaprogramok, stb található. Ajánlott irodalom: 1. Albert István (szerk.), A .NET Framework és programozása, ISBN 9639131628, Szak. Kiadó Kft., 2004 2. Bradley L. Jones, C# mesteri szinten 21 nap alatt, ISBN 9639301736, Kiskapu Kft., 2004 3. Nyékyné Dr. Gaizler Judit (szerk.), Programozási nyelvek, ISBN 9639301469, Kiskapu Kft., 2003
Bevezetés Fejlődés 1985-1993: A Windows kezdetei verzióiban a nem volt eszköz a komponens alapú fejlesztés támogatására. (a komponens egy olyan bináris (lefordított) szoftver egység, amely által megvalósított funkció jól definiált formában, a komponens interfészén keresztül érhetõ el) A Windows API segítségével lehetett fejleszteni alkalmazásokat. Windows 3.0-as verziójában jelent meg az OLE (Object Linking and Embedding) a programok között szoftverkomponensek megosztására. Ez volt a COM elődje. 1993 COM (Component Object Moldel) bármely programozási nyelvből elérhető interface. Komponens orientált. Szabványos hívásokkal teszi lehetővé a komponens alapú fejlesztést. 1999 DNA (Windows Distributed interNet Architecture) Web alkalmazásokra használták. Nem nagyon terjedt el. (ASP- COM üzleti logika – SQL server) 2000 Elosztott rendszerek igénye miatt létrejött a COM+ Ez szerepkör alapú biztonsági modell (role based security). Csoportok és felhasználók különböző szerepkörökbe rendelhetők. Alkalmazás, componens, osztály, függvény szinten szabályozható hozzáférés. Elosztott tranzakció-kezelés. Bármely két nyelv tudjon kommunikálni! Költséges és bonyolult a COM implementációja. 2002 .NET Framework
1
.Net előadás jegyzet – 1. óra
2.oldal
Microsoft válasza a Java-ra. Ez egy fejlesztői platform. Egy virtuális gép segítségével teszi lehetővé a különböző nyelveken írt pogramok komponens alapú fejlesztésést. A COM is megmaradt, és a .NET korlátozottan kompatibilis vele, de a szerepét átvette a komponens alapú fejlesztésben.
.NET Framework verziók: 2002. .NET 1 2003. .NET 1.1 2005. .NET 2 (ezt fogjuk megnézni) 2006. .NET 3 2007. .NET 3.5
A .NET előnyei Széles körű felhasználási lehetőség. -Microsoftos platformon (Windows) mindenhol használható: UI, Adatbázis, Szerver-kliens, mobil eszköz, elosztott… A különböző programozási nyelveket egyazon fejlesztő környezetben lehet használni. A viruális gép lefordítja a kódokat egy köztes nyelvre,ez a : Common Intermediate Language (több mint 24 programozási nyelvet támogat) Az osztálykönyvtár nagy része szabványos, de a WinFormot, ASP.NET-t nem szabványosították – csak Windowson fut úgyis. ASP.NET 2.0 által generált kód szabványos XHTML. SOAP – a webszervizek szabványa: Különböző platformokon futó rendszer egy szabványos interfacen keresztül összekacsoljuk, kérésválasz levelek. Elosztott rendszerek SOAP protokollon kommunikálnak, ha ezt egy webszerver köpi ki, akkor webszervizekkel kommunikál. Pl Java, apache hasonló. Lehet integrálni rendszereket különböző platformon. Ingyenes
Implementációk A ppt-ből 7.dia. Mivel szabványos, ezért leimplementálták többen is a nyílt forráskód miatt több platformra: Mono: spanyolul majom. A Mono fut Unix, Linux, Solaris, Mac OS X, Windows. Vannak problémák. Rotor: Kutatási ill oktatási célú. Nyílt forráskódja nagyrészt megegyezik a .NET FW forráskódjával. Dotgnu
Platform Architektúra Az alap a CLS (Common Language Specifications) szabvány, megadja a szolgáltatások formátumát, hogyan kell ábrázolni, továbbítani, függvényt meghívni, memóriát kezelni, kivétel kezelés, láthatóságok.. CLR (Common Language Runtime): .NET szíve, ez a .NET legfontosabb része Ez az alap, a szoftverfejlesztő plattform, ami lehetővé teszi a fejlesztést és a futtatást, a különböző nyelveken, illetve elérhetővé teszi a különböző technológiákat.
2
.Net előadás jegyzet – 1. óra
3.oldal
BCL (Base Class Library ): minden nyelven elérhető alapszolgáltatásokat nyújt, főleg IO műveletekhez (file kezelés, képernyő kezelés, XML dokumentum kezelés, adatbázis kezelés) ADO.NET első sorban adatbázis elérést és XML tárolási módok Megjelenítési réteg: Win Forms és ASP.NET webes alkalmazások, webservice
Futtatókörnyezet (CLR) Több programnyelv támogatása Microsoft Intermediate Language: köztes nyelvre fordít, nincs gépi kód, bárhol lefordul később. CLS (nyelv -> IL -> JIT) Just in time compilation, során készül el a natív kód. CTS (value, ref, GC) Alapvető típus rendszer, milyen típusaink lehetnek? Érték és referencia. Ez a két nagy csoport. Érték: Stacken tárolódik, ha értékadás történik két objektum közt, akkor lemásolódnak (Két referencia közt csak pointer szerűen mutat.) Referencia: New lefoglal memóriában (heap) területet. A heap pointer növelésével, egyszerűen. Felszabadítást automatikusan a keretrendszer végzi: Gerbage Collektor (GC) végzi. GC: Kijelöli melyiket kell felszabadítani, majd felszabadítja és tömörít. Kijelölésnél egy gráfot rajzol az objektumokból. Osztály, tag változó, stb.-ből a behúzott vonalak meghatározásával megjelöli miket használ, amiket nem használ az a felesleges. A nem használt elemek eltávolítása után a memóriát az elaprózódás miatt tömöríti. A objektumok generációt beszámozza. Tömörítés után átszámozza: 0, 1, 2. Pl: lokális változók függvényből kilépés után természetesen felszabadíthatóak. Ezek referencia típusra működnek csak! Small objektum heapen (kb) 20 KB-nál kisseb referencia típusú objektumon működik. (A nagyobb objektumokat nem érdemes mozgatni. Normál algoritmus működik)
.NET FrameWork szolgáltatások Ld. Későbbiekben. Nagyjából erről lesz szó a félévben.
Intermedaite Language - . NET assembly Műveletek a Stacken Pl: tölts be egy integert, allokálj memóriát, hozz létre tömböt, végez el valamit, töltsd be az osztálynak a mezőjét (stackre), a változó értéke legyen valami: (stackről)(assembly nyelv szerű) Fordítás: Ezt natív gépi kódra fordul le. (Intermedaite Language) A JIT (Just In Time) compilation függvényenként fut le amikor, ha még az éppen végrehajtani kívánt függvényt nem fordítottunk le natív kódra. JIT közben próbál optimalizálni is. Lehet hogy .NET-ben valami gyorsabb mint C++ ahol Class A; először létrejön és kilépéskor a destruktor fut, míg a .Net-ben a GC gyűjti majd be. Assembly (szerelvény) =Hasonló bármelyik Windows-os .exe-hez vagy .dll-hez. De benne.NET IL kód+meta adatok vannak. Metaadat leírja, hogy milyen típusok, függvények, tagváltozók, osztályok vannak az assemblyben. Milyen külső típusokra hivatkoztam külső assemblikből.
3
.Net előadás jegyzet – 1. óra
4.oldal
Ildasm példa: Pl: Típus a MetaInfóknál: A Double: System.Double ami Token ID, ToSting metódus látható. Stloc.0 (store) string típusnak adja stacken keresztül, betölti, Managed kód Egyedi azonosítója(Strong Name) van az Assemblyknek. Név, verzió, nyelv (kultúra), kulcs ezek a tulajdonságok egyértelművé teszik és majd megmondhatjuk melyiket akarjuk a mi projektünkben alkalmazni. A fordító meg tudja különböztetni az erős név alapján is az assablyket. Ez egyfajta biztonságot is ad. A kulcs az RSA algoritmushoz hasonló titkos. A windows.dll fájlok most már a Windows/WinSxS könyvtárba kerülnek Az assambly fájlokat Global Assambly Cache-be találjuk meg a Windows/Assambly/GAC könyvtárakban. Rendszer szintűek - csak erős névvel (Strong Name). Segéd program van hozzá a pl: a c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\ alatt a gacutil.exe Ezzel kilistázhatjuk őket. Két fajta van: MSIL – Microsoft Intermediate Language X86 – natív kódu, gyorsabb (NGEN programmal lehet konvertálni) Fontos hogy a rendszer először nem a programunk mellet kezdi az assamblyket keresi, hanem a GAC-ban. Erre figyelni kell.
BCL (Base Class Library)– osztálykönyvtár „Hol lakik” : c:\WINDOWS\Microsoft.NET\Framework\ CLS (integráció zökkenőmentes) Ha a nyelv megfelel ennek, akkor akkor elérik típus könyvtárt. Library-ben objektum orientált módon az osztályok névterekben vannak elhelyezve. Fontos: System könyvtár pl System.IO, System.Web stb .NET 2.0 verzió Base Class. Van parancssoros fordítók is: C# fordító: csc.exe, J# fordító: jsc.exe Stb. MSBuild.exe – Visual Studio Solution-t (.sln) tud fordítani. De build folyamat is vezérelhető vele Ngen.exe .Net-es assemblykből másik dll-t generál, amiben natív kód vannak. A fontos rendszerkomponenseket telepítéskor lefordítja az installer.. GAC könyvtár (Global Assembly Cache): először itt keresi a dll-eket aztán az aktuális könyvtárban. Később bővebben. Kiterjeszthetőek: Származtatni, specializálni, testreszabható műveletek írni
Támogatott Nyelvek .NET 2.0 24 nyelvet támogatott kezdetben (a cél jóval több) Például: C# az elsődleges nyelv, J# java szintaktikából .Net es kódot fordít, VB.Net Stb.
4
.Net előadás jegyzet – 1. óra
5.oldal
.NET Framework alapjai ............................................................................................................ 1 Fejlődés .............................................................................................................................. 1 A .NET előnyei .................................................................................................................. 2 Implementációk .................................................................................................................. 2 Platform Architektúra ......................................................................................................... 2 Futtatókörnyezet (CLR) ..................................................................................................... 3 .NET FrameWork szolgáltatások ....................................................................................... 3 Intermedaite Language - . NET assembly .......................................................................... 3 BCL (Base Class Library)– osztálykönyvtár ..................................................................... 4 Támogatott Nyelvek ........................................................................................................... 4
5