Úvod do .NET Frameworku

1. díl - Úvod do .NET Frameworku

Tomáš Herceg       3. 4. 2009       C#, VB.NET, .NET       17661 zobrazení

Tento seriál je určen pro čtenáře, kteří již mjí s programováním nějaké zkušenosti a chtějí se naučit programovat aplikace v .NET Frameworku, ať už v jazyce Visual Basic .NET či C#. V tomto díle si celý .NET Framework podrobně představíme a ukážeme si, jak probíhá kompilace a co všechno to vlastně umí.

Pro koho je tento seriál určen?

Tento seriál je určen pro vývojáře a programátory, kteří již mají nějaké programátorské zkušenosti, tedy ovládají (alespoň trochu) nějaký programovací jazyk, a chtějí se naučit .NET Framework. Je to ideální startovní bod pro vývojáře ve starších verzích jazyka Visual Basic, ale samozřejmě i všech jiných, kteří se chtějí naučit alespoň jeden jazyk postavený nad .NET Frameworkem.

Jsem začátečník a nikdy jsem neprogramoval, co mám dělat?

Tento seriál předpokládá základní znalosti programování. Pokud chcete pokračovat, měli byste vědět, co je to proměnná, funkce, procedura, pole, cyklus, podmínka, kompilace, knihovna atd. Pokud vám něco z toho není jasné, začněte raději seriálem Visual Basic .NET od začátku, který kromě úplných základů jazyka Visual Basic popisuje také základní principy a úplné základy programování (tím pádem nejde do hloubky a spoustu věcí začátečníkům zatajuje, aby se ve výkladu neztratili). Po přečtení tohoto seriálu pro začátečníky budete moci navázat tímto seriálem, kde by vám již mělo být všechno jasné a nabyté znalosti si prohloubíte a utřídíte.

Čemu se v tomto seriálu budeme věnovat?

Tento seriál je cílen především pro programátory, kteří přecházejí ze starších verzí VB na Visual Basic .NET a protože českých zdrojů o jazyce C# je málo, bude tento seriál obsahovat veškeré ukázky v kódu v obou jazycích. Program seriálu je zhruba následující:

  • Základní principy, kompilace, datové typy a obecné základy
  • Objektově orientované programování
  • Kolekce a generika
  • Práce s textem a kódováním, formátování čísel, data a času
  • Práce se vstupem a výstupem
  • Windows Forms aplikace – základ
  • Lehký úvod do databází a ADO.NET
  • Vlákna, procesy, synchronizace a jiná zvířátka
  • XML a šifrování
  • Práce se sítěmi
  • Novinky a rozšíření v .NETu verze 3.5
  • a možná ještě něco dalšího …

Tento seriál se tematicky dost inspiruje knihou MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework 2.0 Foundation, budeme se jistě zmiňovat i o oblastech, která v knize nenajdete, naproti tomu některé části zase vynecháme, většina obsahu se ale kryje. Pokud byste si ale chtěli v budoucnu udělat zkoušku 70-536, což je základ pro všechny budoucí certifikace týkající se .NET Frameworku, bude tento seriál jistě velmi dobrým základem.

Začínáme

Co je to .NET Framework?

.NET Framework (.NET čteme dot net) je rozsáhlá softwarová platforma, která je určena pro vývoj mnoha různých druhů aplikací. Za pomoci .NET Frameworku můžeme vyvíjet nejen klasické aplikace pro Windows, ale mimo jiné i webové aplikace a služby, aplikace pro mobilní zařízení a mnoho dalších.

Celý framework obsahuje kromě velké sady knihoven a funkcí i samotné běhové prostředí (CLRCommon Language Runtime), které zajišťuje běh a kompilaci aplikací. Obrovská škála funkcí nám zajišťuje to, že se nemusíme starat o psaní věcí, které se používají často, které jsou nudné a ve kterých se dá udělat mnoho chyb, například třídění pole, stažení webové stránky, vytvoření okna, práce s XML soubory atd., podobných příkladů by se dalo najít stovky. Díky běhovému prostředí pak budou naše aplikace rozumně rychlé a bezpečné. Vývoj v .NETu je rychlý, pohodlný a méně náchylný na chyby programátora.

V souvislosti s .NET Frameworkem se mluví o pojmech CLI (Common Language Infrastructure), což je standardizované jádro celého frameworku, a BCL (Base Class Library), což je sada základních knihoven.

Kompilace

K tomu, abychom pochopili, co se přesně myslí tím běhovým prostředím, musíme si vysvětlit princip, jakým probíhá v .NET Frameworku kompilace aplikací.

Klasická kompilace

Klasická kompilace

Pokud kompilujete aplikaci například v C++, Delphi, Visual Basicu 6 či některých dalších jazycích, výstupem kompilátoru je přímo strojový kód. Ten je samozřejmě závislý na platformě – jednak na operačním systému, na kterém aplikace poběží, a samozřejmě také na konkrétním procesoru, který je v daném počítači.

Jedná se o tzv. neřízený (unmanaged) kód. Je obvykle velmi rychlý (procesor pracuje přímo se strojovým kódem, výstup kompilátoru je pro procesor víceméně nachystaný), ale je zde také mnoho nevýhod.

Největší nevýhodou je asi náchylnost na chyby v samotné aplikaci a bezpečnostní rizika. Vzhledem k tomu, že v C++ se velmi často pracuje přímo s pointery (tedy ukazateli na konkrétní paměťové adresy), je možné prakticky kamkoliv zapsat cokoliv a může se stát (a také se to velmi často stává), že v aplikaci je chyba, což vede například k přístupu na neplatnou adresu a následnému pádu aplikace, nebo dokonce k bezpečnostním rizikům (podvržení dat, která se spustí jako kus programu).

Kompilace v .NET Frameworku

Kompilace v .NET Frameworku

Pokud kompilujete aplikaci napsanou v .NET Frameworku, probíhá to trochu jinak. Kompilátor vezme zdrojové kódy a jeho výsledkem není strojový kód, ale tzv. CIL (Common Intermediate Language), častěji se pro něj používá zkratka MSIL. Jedná se o kód podobný kódu strojovému (tvoří jej relativně jednoduché a nízkoúrovňové instrukce), ale jeho výhodou je to, že je nezávislý na platformě a dá se spustit všude tam, kde je běhové prostředí .NET Frameworku.

Kód přeložený do jazyka CIL se spolu s přidanými datovými soubory (obrázky atd.) zabalí do tzv. assembly, což je soubor s příponou exe či dll. Na první pohled výsledné soubory vypadají stejně jako výstup kompilátoru v C++. Obrovský rozdíl je až při jejich spuštění.

Při spuštění .NETové assembly se provede částečná kompilace – to, co je pro běh aplikace zatím potřeba, se přeloží do strojového kódu (optimalizovaného přesně pro daný procesor a platformu, i když ne nějak výrazně, je důležité, aby spouštění netrvalo dlouho, nekompiluje se tedy vše, ale jen to, co je potřeba, a to ještě s minimem optimalizací) a následně se aplikace spustí. Kompiluje se obvykle na úrovni metod (tedy funkcí a procedur), pokud je potřeba zavolat nějakou metodu, která ještě není zkompilovaná, JIT (Just-in-time překladač) ji před prvním spuštěním přeloží a výsledek si schová pro další volání. Díky tomu se překládá jen ta část kódu, která je třeba, a nemusí se překládat celá velká assembly při spuštění, které musí být rychlé (v řádu jednotek sekund).

Pokud je ale na kompilaci dost času, JIT může provádět velmi složité a dobré optimalizace, takže výkon aplikace může být dokonce lepší než u aplikace v C++, protože kompilátor C++ musí optimalizovat pro nejstarší procesor dané rodiny procesorů (většina aplikací v C++ na Windows se kompiluje do instrukční sady procesoru 386, novější instrukce, které umí nové procesory, se nevyužívají). Většinou tomu ale tak není, protože JIT je optimalizován hlavně na rychlost spouštění, nemůže si dovolit, aby aplikaci hodinu kompiloval a pak až spustil. Assembly můžete nechat celou zkompilovat pomocí nástroje ngen, což je vhodné udělat při instalaci aplikace na daný počítač.

Tomuto kódu se říká řízený (managed), už od základu se počítá s bezpečností a korektností přístupů do paměti (nedá se přistupovat v paměti kamkoliv, nebo jen velmi těžko, není možné jen tak někde přepsat kus paměti, což by mohlo způsobit rozbití jiného mechanismu), striktní typovou kontrolou (nemůžete jen tak přetypovat něco na něco úplně jiného), mechanismem obsluhy výjimek apod.

C++ versus .NET

Jaké jsou tedy výhody .NET Frameworku? Především bohatost a rozsáhlost knihoven, bezpečnost a rychlost vývoje. Je také možné kombinovat kód z více různých programovacích jazyků, zdrojový kód se kompiluje do jazyka CIL a tomu je jedno, jestli původní kód byl ve Visual Basicu nebo v C#. z jedné assembly tedy můžete volat funkce jiné assembly, která byla napsána v jiném programovacím jazyce. Nad .NETem dnes můžete využívat mnoho programovacích jazyků, kromě již zmiňovaných dvou je k dispozici C++/CLI, IronPython, funkcionální F#, J#, IronRuby, PHP a jistě by se našlo mnoho dalších.

Nevýhodou .NETu je nepatrně nižší výkon u některých typů aplikací (většinou v řádu jednotek procent) a trochu větší paměťová náročnost. V .NET Frameworku se třeba nevyvíjí mnoho velkých počítačových her, protože tam je důležitá zejména práce s hardwarem pro realizaci grafiky (volání unmanaged funkcí DirectX je z managed kódu o něco pomalejší než z C++) a menší spotřeba paměti u klasických aplikací je také argumentem proti. Na druhou stranu pro vývoj menších a středně velkých her existuje technologie XNA, která je postavena nad .NETem a díky které můžeme vytvářet hry nejen pro Windows, ale také pro herní konzole XBox 360. XNA se ale nehodí pro gigantické herní projekty, spíše pro malé a středně velké hry, kde zmíněné nevýhody .NET Frameworku zase tolik nevadí.

Výhodou a zároveň nevýhodou .NETu je, že do výsledné assembly se ukládá velké množství metadat. Díky tomu je možné za běhu dynamicky manipulovat s vnitřní strukturou objektů, jednoduše se implementují pluginy, dokonce lze za běhu dogenerovat kus kódu a spustit jej. Bohužel z metadat se také dají získat téměř původní zdrojové kódy celé aplikace. Dá se tomu zabránit pomocí tzv. obfuskace, ale ne úplně.

Výhodou C++ je především rychlost. V C++ se vždy dávalo přednost výkonu a efektivitě před bezpečností kódu, což nemusí být vždy špatné a některé typy aplikací (třeba ovladače) v .NETu dost dobře napsat nejdou. Na druhou stranu většina pádů aplikací je způsobena chybami při prací s pamětí, které v .NET Frameworku nemohou nastat. U běžných okenních aplikací, které se dnes vyvíjejí asi nejvíce, není rychlostní výhoda C++ oproti .NETu nijak výrazně viditelná. Webové aplikace se navíc v C++ píší dost špatně a výkonově by se získaly opět jen jednotky procent výměnou za mnoho různých problémů.

Výhody a nevýhody obou prostředí se snaží skloubit mutant zvaný C++/CLI, kde můžete s jistými omezeními kombinovat managed a unmanaged kód.

Rozhodně se nedá říct (a bohužel je to velmi často slyšet), že aplikace v .NETu jsou pomalé a nenažrané (dost lidí navíc přidává termín zbastlené, což už vůbec nezáleží na technologii, ale na programátorovi). Důležité je uvědomit si, že bychom měli používat věci na to, k čemu jsou určeny. V C++ samozřejmě lze napsat rozsáhlou databázovou aplikaci, ale mnohem komfortněji a rychleji (co se týče času programátora) se to dá udělat v .NETu, přičemž výkonnostní rozdíl bude nepatrný. Pokud budeme psát ovladač pro nějaké zařízení či aplikaci, která provádí složité algoritmické výpočty, je naopak rozhodně lepší použít C nebo C++, případně funkční jádro udělat v C/C++ a uživatelské rozhraní a horní vrstvy v .NETu.

Pro spuštění aplikací psaných v .NETu je nutné mít na počítači nainstalovanou příslušnou verzi .NET Frameworku, to by dnes již ale neměl být problém. Operační systém Windows Vista jej obsahuje již v základu a do systému Windows XP se dá doinstalovat buď přes automatické aktualizace.

Co všechno .NET Framework umí?

Zde je jen stručný a nekompletní seznam toho, co .NET Framework obsahuje a jaké technologie v něm můžeme využívat. V prvním sloupci jsou názvy jmenných prostorů (funkce jsou řazeny po skupinách podle oblastí, které se týkají), ve druhém sloupci popis, co daný jmenný prostor obsahuje.

System Základní třídy a funkce
System.Addin Třídy a funkce pro tvorbu pluginů a rozšíření aplikací
System.Collections Implementace mnoha různých datových struktur a kolekcí
System.Configuration Třídy a funkce pro práci s konfigurací aplikací
System.Data Třídy a funkce pro práci s databázemi
System.Drawing Pokročilé grafické funkce pro vykreslování nad rozhraním GDI+
System.Globalization Třídy a funkce reprezentující národní zvyklosti a kulturně specifické záležitosti
System.IO Třídy a funkce pro práci se souborovým systémem
System.Management Třídy a funkce pro správu systému a zařízení (WMI)
System.Net Třídy a funkce pro práci se sítí
System.Runtime.InteropServices Třídy a funkce pro spolupráci s Windows API a COM
System.Runtime.Serialization Třídy a funkce pro serializaci a deserializaci objektů
System.Security Třídy a funkce pro zabezpečení a kryptografii (šifrování dat)
System.Text Třídy a funkce pro práci s textem a regulárními výrazy
System.Threading Třídy a funkce pro práci s vlákny
System.Web Třídy a funkce pro tvorbu webových aplikací v technologii ASP.NET
System.Windows.Forms Třídy a funkce pro tvorbu okenních aplikací
System.Xml Třídy a funkce pro práci s XML

Nejsou zde samozřejmě uvedeny všechny jmenné prostory. .NET Framework kromě toho obsahuje několik dalších technologií, o kterých je dobré se zmínit:

  • ASP.NET – technologie určená pro vývoj webových aplikací nad .NET Frameworkem
  • Windows Communication Foundation – framework pro snadnou komunikaci aplikací nad různými komunikačními protokoly a technologiemi
  • Windows Presentation Foundation – framework pro vytváření bohatého hardwarově akcelerovaného uživatelského rozhraní s využitím různých grafických efektů
  • Windows Workflow Foundation – framework pro vývoj aplikací spravujících složité procesy
  • Windows Sync Framework – framework pro usnadnění synchronizace dat
  • Entity Framework – ORM mapper, který umožňuje reprezentovat data v databázi jako objekty
  • LINQ – syntaktické konstrukce v programovacích jazycích, které zjednodušují dotazování nad různými typy dat

O některých z těchto technologií si budeme povídat v příštích dílech tohoto seriálu.

Instalace vývojového prostředí a kde jej sehnat?

Abyste mohli vyvíjet aplikace běžící na .NET Frameworku, potřebujete vývojové prostředí. Microsoft se o platformu .NET stará velice dobře a vývojové prostředí s bohatou dokumentací dává k dispozici zdarma.

Pro vývoj v .NET Frameworku můžete využít Visual Studio 2008, což je plnohodnotné profesionální vývojové prostředí, které podporuje programovací jazyky VB.NET, C# a C++. Tento produkt je placený a obsahuje kromě základních funkcí i pokročilé nástroje pro testování aplikací, profilování a týmový vývoj. Pokud jste ovšem studenti, možná máte na škole program MSDN AA, díky kterému můžete zdarma získat plné Visual Studio, případně existuje projekt DreamSpark, který umožňuje totéž, stačí mít platnou ISIC kartu.

Kromě velkého Visual Studia Microsoft uvolnil i jeho odlehčené verze (Express editions) pro nekomerční i komerční užití zdarma. Obsahují skoro vše až pro nástroje pro týmový vývoj a testování, ale to stejně ze začátku nevyužijete, jediné znatelnější omezení je, že nemáte jeden produkt pro všechny jazyky, ale pro každý programovací jazyk je samostatná aplikace.

Stažení Express edic

Z výše uvedeného odkazu si můžete stáhnout Express edici Visual Studia pro jazyk, který se chcete naučit – vybrte si buď Visual Basic .NET (vhodné, pokud znáte VB6 či VBA) nebo C# (pokud vám vyhovuje céčková syntaxe, nebo umíte Javu či C++). Oba jazyky jsou až na pár drobností rovnocenné, kompilují se do stejného kódu, takže jsou i stejně rychlé. Je to pouze otázka zvyku a osobních preferencí.

Při instalaci nechte zaškrtnutou i možnost nainstalování Express edice SQL Serveru 2005, jedná se o databázový server, který je rovněž k dispozici zdarma a který budeme v některém z příštích dílů potřebovat. Pokud byste měli s instalací nějaké problémy, můžete se podívat na videonávod na MSTV.cz.

Historie .NET Frameworku

.NET Framework je s námi již zhruba od roku 2000. První verze 1.0 a 1.1 se dnes již moc nepoužívají. Od roku 2005 máme verzi 2.0, která přinesla nové běhové prostředí a mnoho nových vlastností. Zhruba o rok později přišla verze 3.0, která má ovšem stejný runtime a je to pouze sada knihoven nad verzí 2.0. Aktuální verzí je verze 3.5, která přinesla kromě dalších přidaných knihoven i rozšíření dvou hlavních jazyků Visual Basic .NET a C#.

V době vydávání tohoto článku se připravuje verze 4, která má přinést mnoho nových vylepšení. V této tabulce je verze vývojového prostředí pro danou verzi, verze programovacích jazyků Visual Basic .NET a C# a některé změny, které se v dané verzi frameworku objevily.

Verze Vývojové prostředí Verze VB.NET Verze C#  
1.0 Visual Studio 2002 Visual Basic 7 C# 1 - první verze frameworku
1.1 Visual Studio 2003     - dramatické zvýšení výkonu
- rozšíření a změny API
2.0 Visual Studio 2005
Visual Basic 2005 Express
Visual C# 2005 Express
Visual C++ 2005 Express
Visual Basic 8 C# 2 - nová verze runtime
- podpora generiky
- plná podpora 64 bitů
- výrazná vylepšení knihoven
- vylepšení ASP.NET
- parciální třídy
- anonymní metody
3.0       - Windows Communication Foundation
- Windows Presentation Foundation
- Windows Workflow Foundation
- Windows CardSpace
3.5 Visual Studio 2008
Visual Basic 2008 Express
Visual C# 2008 Express
Visual C++ 2008 Express
Visual Basic 9 C# 3 - nové verze VB.NET a C# - expression trees, lambda výrazy
- LINQ
- extension metody
- podpora AJAXu v ASP.NET
- Entity Framework
4.0 Visual Studio 2010 Visual Basic 10 C# 4 - dynamické datové typy
- vylepšení stávajících technologií

Pozor! Nepleťte si verze programovacího jazyka s verzemi vývojového prostředí!

Závěrem

Tento první díl byl spíše jen pro seznámení s .NET frameworkem a k získání obecného přehledu o tom, k čemu to je a co to umí. Je zde mnoho nových informací a zkratek, které si nemusíte pamatovat, většina věcí je spíš tak pro zajímavost. V příštích dílech se již podíváme prakticky na to, jak se programuje v jazycích VB.NET a C#.

 

hodnocení článku

1 bodů / 1 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Všechny díly tohoto seriálu

7. Rozhraní 19. 7. 2010
6. Dědičnost - dokončení 1. 1. 2010
5. Dědičnost 9. 9. 2009
4. Třídy 9. 6. 2009
3. Datové typy 5. 5. 2009
2. Základní elementy VB.NET a C# 18. 4. 2009
1. Úvod do .NET Frameworku 3. 4. 2009

 

 

 

Nový příspěvek

 

Zdravím,

přehledný a pěkně napsaný článek.

Díky, pomohlo.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Úvod do .NET Frameworku

Zdravim,

moc pekny clanek, jen jsem se chtel zeptat jestli lze s pomoci Visula Studia 2008 udelat i prenositelnou aplikaci bez nutnosti instalace frameworku ..

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ve Visual Studiu 2008 můžete psát i v C++, kde .NET Framework nepotřebujete, to ale není tématem tohoto článku.

Ve skutečnosti s .NETem v 99% případů není problém a dnes již je všude nainstalován. Od Windows Vista je v systému zaintegrován defaultně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Úvod do .NET Frameworku

Pěkně přehledně napsáno, Díky pomohlo.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Úvod do .NET Frameworku

ahojky, po zapnuti PC se mi objevuji okna fatal execution engine error (0x7927F26E), po odkliknuti se objevi dalsi okno cli.exe - common language rintime debuging servis proces id=0xc2c (3116), thread id=0xc30 (3120). Nevedel by nahodou nekdo jak tenhle problem odstranit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Úvod do .NET Frameworku

Zajímalo by mě jak je to s tou dekompilací programů. Slyšel jsem o nějakém Reflektoru, který prý umí rekonstruovat zdrojové kody z exe nebo dll.

Dá se tomu nějak zabránit?

Tomas

PS: Zajímavý článek, těším se na další díly...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jedna z možností jak tomu zabránit je použití Obfuscatoru. Více na Wikipedii - http://en.wikipedia.org/wiki/Obfuscated_...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

S použitím profesionálních obfuskačních nástrojů se tomu zabránit dá, každopádně vždy lze zobrazit alespoň CIL kód (bez obfuskace lze zobrazit i zdrojový kód). Existuje spousta nástrojů na obfuskaci, jejich popis a srovnání naleznete na http://howtoselectguides.com/dotnet/obfu... Například to co se dodává s Visual Studiem (Dotfuscator Community Edition) je naprosto nepoužitelný krám.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Diskuse: Úvod do .NET Frameworku

Velice dobrý článek a budu se těšit na další díly!

nahlásit spamnahlásit spam 6 / 6 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback