A.NET Framework és programozása C# nyelven Kedd 16-17 30 I104
Feltételek I104 Visual Studio 2013 Letölthető http://msdn.mik.uni-pannon.hu oldalról Aki saját gépet hoz, annak javasolt a legújabb verzió letöltése A telepítésnél MsSQL Express is Gyakorlati jegy (portfólió): Zh (lehet saját gépen, minden használható) Órán feltöltött feladatok HF-ok Választott témakör feldolgozása (beépítése a keretrendszerbe)
Témakörök A.NET A C# A Visual Studio fejlesztőeszköz Az osztály és az objektum A vezérlők, tulajdonságok, események, ablakok Az öröklés és a.net osztálykönyvtár A felügyelt kód és a Toolbox komponensek Nyelvi specialitások DLL Windows vezérlő Adatbázis-elérés Webalkalmazás Mobilalkalmzás
Ajánlott irodalom Albert István, Balássy György, Charaf Hassan, Erdélyi Tibor, Horváth Ádám, Levendovszky Tihamér, Péteri Szilárd, Rajacsics Tamás: A.NET Framework és programozása, Szak kiadó, 2004 Bradley L. Jones: C# mesteri szinten, Kiskapu Kft, 2004 MSDN Online: http://msdn.microsoft.com www.microsoft.com/net Code.msdn.com Csharp.lap.hu Sipos Marianna: Programozás élesben, InfoKit, 2004 John Sharp: Visual C# 2005, Szak kiadó, 2005 Trey Nash: C# 2008, Panem Könyvkiadó, 2009
MCP vizsgák Bővebben: http://www.microsoft.com/learning/mcp/default.asp Kapcsolodó vizsgák: http://www.microsoft.com/learning/exams/70-315.asp http://www.microsoft.com/learning/exams/70-316.asp http://www.microsoft.com/learning/exams/70-320.asp http://www.microsoft.com/learning/exams/70-340.asp
Mi a.net? Platform, melynek fő részei Absztrakciós réteg az operációs rendszer fölött (Common Language Runtime), benne közös típusrendszer Közös típusrendszerre épülő sokrétű osztálykönyvtár (Base/Framework Class Library) Fejlesztő eszközök és nyelvek, melyek a közös köztes nyelvre (Common Language Infrastucture) készítenek programokat
A.NET Framework ASP.NET Web Forms Web Services Mobile Internet Toolkit ADO.NET and XML Base Class Library Common Language Runtime Windows Windows Forms Rich Runtime Environment (Sokrétű futási környezet) Common Language Runtime (közös nyelvi futási környezet) minden nyelv számára közös: Típusrendszer Metaadat kezelés Futtató környezet Jobb biztonság és telepítés Rich Class libraries (Sokrétű osztálykönyvtárak) Sokrétűbb API lehetőségek Hierarchikus névterek Konzisztens, lényegében objektum-orientált tervezési minták Koncentrálás a kódra, és nem a ragasztó részekre Eszközök támogatása Tervezés, Nyomkövetés, stb..
.NET Framework Előnyök Biztonságos kód Könnyű telepítés Többnyelvűség Konzisztens programozási modell Kisebb kódhiba lehetőség Hardver és op rendszer függetlenségi lehetőség (Compact Framework) Hátrányok Nem natív kód, fordítás szükséges
Nyelvi támogatás A.NET által támogatott nyelvek A.NET platform és nyelv semleges Minden.NET nyelv teljes értékű A meglévő nyelvtudás továbbra is használható VB C++ C# Perl Python Web Services User Interface ASP.NET ADO.NET: Data and XML Base Framework Common Language Runtime
Nyelvi támogatás 21 nyelv Microsoft C++, C#, Visual Basic, Jscript, Java Oberon Perl Scheme Mercury C++ VBScript Smalltalk Eiffel.NET C# Python JScript Haskell COBOL Visual Basic Oz ML APL Más gyártók APL, Cobol, Component Pascal, Eiffel, Fortran, Fujitsu Cobol, Haskell, Mercury, Oberon, Oz, Perl, Python, RPG, Scheme, Smalltalk, Standard ML, Delphi
Nyelvi támogatás Alap nyelvek Visual C#.NET Visual C++.NET Visual Basic.NET Modern, komponens orientált, szigorúan típusos nyelv C++-hoz hasonló szintaktika Gyors alkalmazás fejlesztés lehetősége C++ fejlesztőknek Attribútum alapú programozás Felügyelt kiterjesztések (Managed Extensions) C++-hoz Teljesen illeszkedik a.net keretrendszerbe Objektum orientált nyelv kód újrahasznosítással Szabad szálkezelés, maximális léptékezhetőség Strukturált kivétel kezelés, könnyű karbantarthatóság Megőrizte a megszokott Visual Basic szintaktikát
CLR.NET 4.5.1
Visual C#.NET Egy komponens alapú nyelv A C# az első komponens orientált nyelv a C/C++ családban Kiváló komponens koncepciók Tulajdonságok, tagfüggvények, események Tervezés- és futásidejű attribútumok XML-en alapuló integrált dokumentáció Programozás egy helyen Nincsenek header, IDL, stb. fájlok Beágyazható ASP.NET lapokba
A fájlok struktúrája Nincs header fájl C# támogatja a definíció a deklarálásnál" modellt mint a Visual Basic, Pascal, Modula, Java Minden kód és deklaráció egy helyen a kód konzisztens és könnyen kezelhető csapatmunka esetén sokkal közérthetőbb deklaráció metaadatokon át jobban elérhető Feltételes fordítás (prepocesszor) van, de makró nincs
A típus rendszer A.NET CLS típus-rendszerére épül Natív elérés a.net típus rendszerhez C# a.net bölcsőjéből született Minden Objektum minden objektum implicite a System.Object ből származik Console.Write( 256.ToString() ); Megkülönböztetés érték és a referencia típusok között érték: egyszerű típusok, enum, struct referencia: interface, class, array, string,...
Az egyszerű típusok Egész típusok int, uint (32 bit), long, ulong (64 bit) byte, sbyte (8 bit), short, ushort (16 bit) IEEE lebegőpontos típusok double (pontosság: 15-16 számjegy) float (pontosság: 7 számjegy) Pontos szám típus decimal (28 szignifikáns számjegy) Karakter típusok char (egy unicode karakter, nem cserélhető fel az int-tel) string (gazdag funkcionalitás, referencia szerinti típus) Boolean típus bool (külön típus, nem cserélhető fel az int-tel)
Tömbök Nulla alapú, erősen típusos, a.net System.Array osztályán alapul Deklaráláskor típus és dimenziók, de nincs korlát int[] EgyDim; int[,] KetDim; int [][] Beagyazott; Létrehozás new val (korlátokkal vagy inicializálással) EgyDim = new int[20]; KetDim = new int[,] { {1,2,3}, {4,5,6} }; KetDim[0,0] == 1! Beagyazott = new int[1][]; Beagyazott[0] = new int[]{1,2,3}; Beagyazott[0][2] == 3!
Statementek C-szerű: Flow Control és Loop if (<bool expr>) {... } else {... } switch(<var>) { case <const>:...; } while (<bool expr>) {... } for (<init>;<bool test>;<modify>) {... } foreach( típus <var> in <var> ) {... } do {... } while (<bool expr>); Nem C szerű: lock(<object>){... }; nyelvvel járó kritikus szekció szinkronizáció lehetőség checked {... }; unchecked {... }; checked (... ); unchecked (... ); uncheck: aritmetikai műveletek hibáinak kezelése, nullával osztás NEM
Operátorok C-szerű: Logikai: && ^! Aritmetikus: * / + - % << >> Relácionális: ==!= < > >= <= C-hez hasonló: Integer: & és bináris AND/OR Bool: & és logikai operátor teljes kiértékeléssel 1 == 0 && isvalid( a ) 1 == 0 & isvalid( a ) isvalid hívás Nem C-szerű: is: Runtime-Type tesztelése as: Type-Cast, nincs exception, null lesz typeof: Runtime-Type lekérése
Feladat Automatikus szemétgyűjtő demo (egy osztály, amelyik statikus adattagban számolja a példányai számát)
Szemétgyűjtő Módszerek Kézi (free, delete): hatékony, sok hibalehetőség, csak egy modulon belül működik Referencia számlálás (komponens rendszerek): körkörös hivatkozások detektálása probléma Teljesen automatikus (Java,.NET): gyors fejlesztés, nincs memória szivárgás, lassú lehet Módszer A gyökér elemektől (globális, lokális, modulokat összekapcsoló változók) bejárni a hivatkozási láncot Ami elérhetetlen a programból, az szemét, törölhető Memóriatömörítés (defragmentálás)
Szemétgyűjtő A.NET-ben Ideje nem definiált Generációk (a fiatal objektumok korán halnak) Nincs mindig memóriatömörítés Destruktorok (nem törölhető rögtön az objektum, újraélesztés lehetséges) Szerver és kliens változatok + objektum (Konkurens futás, Szálak száma) + objektum + objektum + gyökérobjektu m + objektum + objektum szemét + gyökérobjektu m + objektum + objektum + gyökérobjektu m + objektum szemét
Reflector math.uni-pannon.hu\~lipovitsa\reflector.zip