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í (CLR – Common 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
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
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#.