.NET – Seznamte se, prosím 1. díl

Zahajujeme nový seriál, ve kterém se budeme věnovat problematice tvorby .NET aplikací z praktického hlediska. Tento seriál není určen pro úplné začátečníky, spíše má být průvodcem do nového světa .NET pro lidi, kteří už mají alespoň mírné základy v programování.
Co přináší toto zvučné slovo do života informačních technologií? Někdo si jej spojuje s výrazy jako C#, další si pod tímto pojmem představuje nutnost svěřovat své důvěrné informace Microsoftu, někteří ho už dopředu odsoudili, jiní na něj čekají jak na spasení ... Vskutku, ohlasy na toto téma jsou velice různorodé. A proto je načase, abychom si společně udělali krátký výlet do světa .NET a sami posoudili, co nám přinese (nebo odnese).

Tento seriál není určen pro úplné začátečníky, spíše má být průvodcem do nového světa .NET pro lidi, kteří už mají alespoň mírné základy v programování. Předpokládám základní znalost ASP (nebo jiného skriptovacího nástroje, např. PHP), HTML, HTTP, databází a objektového programování.

Úkolem seriálu bude porovnat rozdíly mezi ASP a ASP.NET a seznámit čtenáře s .NET Frameworkem jako celkem. Praktickým výsledkem by pak také měla být ukázková aplikace demonstrující řešení typických problémů. Tu budeme budovat po částech v každém dílu vždy se zaměřením na konkrétní probírané téma.

Ve zkratce

.NET se dá charakterizovat jako vývojová platforma, která má nahradit nedostačující COM (Component Object Model). Architektura .NET rozdělila mechaniku aplikací do dvou fází. Nejdříve se napsaný program zkompiluje pomocí kompilátoru do tzv. Intermediate Language (dále IL). Jako programovací jazyk můžete použít Visual Basic .NET, C#, C++, JScript od Microsoftu nebo některý z plánovaných jazyků třetích stran, připravuje se např. FORTRAN, Python a Perl a mnoho dalších. Přeložené IL instrukce v binární podobě jsou uloženy přímo v .exe, nebo .dll souboru.

Při spuštění aplikace se IL nejdříve přeloží Just In Time (JIT) pomocí kompilátoru do strojového kódu a ten je následně proveden. Určitě vám tato strategie trochu připomíná Javu a její JIT kompilátory. Co nabízí .NET navíc, je jednoduché rozšíření o nové programovací jazyky. To by bylo pro začátek dost teorie, takže

Hurá na něj

Základním kamenem pro vývoj .NET aplikací je .NET Framework Software Development Kit (SDK), který naleznete na MSDN Download . Soubor je možné stáhnout odděleně po deseti částech, nebo vcelku – celková velikost je 130 MB. Pro instalaci potřebujeme některý z následujících systémů: Windows NT 4.0 (nutný Service Pack 6a), Windows 2000 (doporučuje se Service Pack 2) a Windows XP Proffesional. Dále je nutné mít Internet Explorer 5.01 nebo vyšší. Nároky na hardware udává Microsoft následující :

Klient

  • Procesor: Intel Pentium, 90 MHz nebo vyšší
  • RAM: 32 MB (96 MB nebo více doporučeno)
  • Pevný disk (instalace): 160 MB
  • Pevný disk (volné místo): 70 MB
  • Rozlišení: 800x600, 256 barev
Server
  • Procesor: Intel Pentium, 133 MHz nebo vyšší
  • RAM: 128 MB (256 MB nebo více doporučeno)
  • Pevný disk (instalace): 600 MB
  • Pevný disk (volné místo): 370 MB
  • Rozlišení: 800x600, 256 barev
Po úspěšné instalaci se objeví adresář „Microsoft .NET“ v „Program Files“ a v adresáři systému Windows. Ten v systémovém adresáři obsahuje soubory potřebné pro základní funkčnost .NET a druhý adresář (v „Program Files") obsahuje vývojové nástroje. Většina nástrojů je ovládána z příkazové řádky, nejlépe proto uděláme, když si ji spustíme. Jako první je dobré spustit dávku „Program Files\Microsoft.NET\BIN\corvars.bat“, která nám nastaví cesty (PATH) do obou zmíněných Microsoft.NET adresářů, takže nemusíme pořád přepínat adresáře.

Web Hosting

Všichni, kdo chtějí na svém počítači vyvíjet ASP.NET aplikace, musí mít nainstalovanou službu IIS. Pokud chcete umístit vaše stránky na některý z web hostingových serverů, můžete použít jeden z následujících: Nezbývá než začít praktickou část a jak jinak, než tradičním pozdravem

Hello World

Module App
    Sub Main()
        System.Console.Write("Hello World")
    End Sub
End Module

Uložíme jako Hello.vb

Všechny ukázky v tomto seriálu budou napsány ve Visual Basicu .NET, protože základní syntaxe Basicu je mnohým z vás, kteří děláte ASP, známá. V dalších dílech se zaměříme právě na srovnání ASP s Visual Basic Scriptem a ASP.NET s Visual Basicem .NET. ASP.NET je možné pochopitelně psát v jakémkoliv z jazyků pro .NET. Visual Basic .NET „povýšil“ Visual Basic na úroveň ostatních moderních jazyků v rámci .NET. Na konkrétní nové vlastnosti se ale podíváme až někdy jindy, teď je na řadě seznámení s naším prvním příkladem.

Soubor Hello.vb zkompilujeme příkazem vbc hello.vb /debug a podíváme se , co kompilátor vytvořil:

Vytvořeny byly soubory hello.exe a hello.pdb. Po spuštění hello.exe program vypíše, co by měl. Soubor .pdb má na svědomí přepínač /debug a obsahuje informace usnadňující další ladění programu.

Stavební kameny

Podívejme se nyní, z čeho se vlastně SDK skládá. Nejdůležitější pro nás jsou pro tuto chvíli následující programy, sídlící v Program Files\Microsoft.NET\BIN.

Csc.exe kompilátor jazyka C#
Vbc.exe kompilátor jazyka Visual Basic .NET
Jsc.exe kompilátor Jscript .NET
Ilasm.exe Assembler pro Intermediate Language
Ildasm.exe Disassemlber pro IL
Dbgclr.exe Debbuger používající windows GUI
Cordbg.exe Debbuger pro příkazovou řádku

Kompilátory vytvářejí již samotný .exe nebo .dll soubor, který obsahuje binární IL, není proto potřeba navíc použít assembler. Disassembler umožňuje „rozkódovat“ binární IL do textové podoby – nezpřístupní nám tedy sám původní zdrojový kód v některém z použitých high-level jazyků.

To bychom měli jednoduchou konzolovou aplikaci. Určitě mi dáte za pravdu, že v dnešní době musí efektivní nástroj pro vývoj aplikací umožňovat mnohem více než příkazovou řádku a textový režim. Velice bohatá nabídka systémových tříd nám ale, jak si dále ukážeme, umožní pomocí stejných nástrojů vyvíjet jak pro web, tak GUI i konzoli. Zkusme tedy napsat jednoduchý ASP.NET formulář.

ASP.NET

<SCRIPT language="vb" runat=server>
Sub Button1_Click(sender as Object, e as EventArgs)
  Label1.Text="po kliknutí"
End Sub
</SCRIPT>

<HTML>
<BODY>
<form runat="server">
  <asp:Label Text="na začátku..." id=Label1 runat="server"/><br>
  <asp:Button id=Button1 runat="server" onclick="Button1_Click" Text="Tady!"/>
</form>
</BODY>
</HTML>

uložíme jako aspnet1.aspx

Soubor uložíme do libovolného virtuálního adresáře Internet Information Service (IIS). Pokud je IIS správně nastaveno, měla by se po zadání odpovídajícího URL (např. http://localhost/aspnet1.aspx) do prohlížeče objevit stránka s textem a jedním tlačítkem. Po jeho stisknutí se text změní.

Některým z vás je už možná po uvedení této ukázky jasné, kam Microsoft míří. Co v ASP.NET udělali, je, že naprogramovali kompletní objektový model pro HTML stránky, který řídí veškeré procesy na základě událostí.

Tím programování stránek velice přiblížili filozofii windows formulářů nebo programování desktopových GUI aplikací vůbec. Zastánci RAD (Rapid Aplication Development) jásají. Vůbec, velice krásně se celá tato filozofie zužitkuje ve Visual Studio .NET, který bezpochyby patří mezi špičku v RAD vývojových nástrojích.

Podívejme se nyní na samotný kód stránky. Ten je rozdělen do dvou logických částí: kód (uzavřený v tagu SCRIPT) a definice HTML společně se zvláštními tagy <asp:xxx>, které probereme později. Určitě jste si všimli jedné zvláštnosti – parametru runat=server. Pro zjednodušenou představu – tag, ve kterém se tento parametr nachází, je určen pro zpracování na straně serveru – v podstatě obdoba <% %> bloků v ASP.

První část ukázkového programu je velice srozumitelná: definujeme proceduru Button1_Click, která přebírá určité parametry a vykoná jedinou instrukci, změní vlastnost Text objektu Label1 na hodnotu „po kliknutí“. Parametry definované v hlavičce funkce jsou potřebné pro identifikaci objektu, který událost vyvolal, popřípadě pro předání parametrů.

Sub Button1_Click(sender as Object, e as EventArgs)
  Label1.Text="po kliknutí"
End Sub

Druhá část definuje, jak bude daný formulář vypadat. ASP.NET zamění <asp:> tagy za odpovídající HTML kód v závislosti na typu klienta a podporované verzi HTML. Toto je jedna z klíčových vlastností ASP.NET – kód se vždy přizpůsobí možnostem klienta. Tím je umožněno vytvářet stránky, které např. ošetřují události pomocí JavaScriptu na straně klienta, nebo pokud klient tyto možnosti nepodporuje, vyhodnocení proběhne na serveru. Ve zkratce by se daly použité WebControls (tak se jmenují ty <asp:xxx/> objekty) popsat asi takto :

Název Popis ASP.NET Výsledné HTML
Label zobrazí na dané pozici text, vlastnost Text určuje obsah <asp:Label id=”Label1” Text=”Hello World” runat=“server“/> <span id="Label1">Hello World</span>
Button vloží tlačítko. Vlastnost Text opět určuje nápis na tlačítku. <asp:Button id=“Button1“ Text=“Ok“ runat=“server“/> <input type="submit" name="Button1" value="Ok" id="Button1" />

Každý objekt má svoje ID, kterému odpovídá název objektu. Za vytvořením a zpřístupněním takového objektu pro náš kód stojí právě magický parametr runat=server.

Tady je jasně vidět jedna z největších výhod ASP.NET – konzistentní objektový model, který umožňuje programově měnit vlastnosti jednotlivých objektů na stránce bez nutnosti přizpůsobovat kód klientovi – to za nás udělá ASP.NET samo.

Další výhoda ASP.NET oproti klasickému ASP je také oddělení kódu a HTML – některým z vás to možná nepřipadá až takové velké plus, ale z vlastní bohaté zkušenosti musím říct, že toto je jeden z klíčových faktorů, jak udržet projekt škálovatelný až do rozměrů velkých systémů bez toho, abychom vynaložili enormní úsilí na komentování a organizování kódu. Možná znáte situaci, kdy přebíráte po někom projekt, a místo toho, abyste okamžitě začali tam, kde váš předchůdce skončil, strávíte několik hodin probíráním se v HTML kódu, abyste vůbec pochopili logiku aplikace skrytou a propletenou mezi JavaScriptem, smyčkami ASP a tabulkami v HTML.

Tím, že zavedl zpracování na základě událostí, „povýšil“ ASP.NET webové formuláře na úroveň windows formulářů – stejný kód můžeme nyní použít pro obě uživatelská rozhraní bez nutnosti velkých změn. Pochopitelně, z podstaty HTTP a HTML vyvstávají určité specifické požadavky, o tom ale později.

Co je v pozadí ...

Jak tedy ASP.NET docílilo efektu, který jsme viděli na naší pokusné stránce? Nejdříve se zaměříme na jednu vlastnost, která jej zásadně odlišuje od jeho předchůdce. ASP je interpretované, ASP.NET kompilované. Výhody jsou jasné. Poté, co se aplikace zkompiluje při prvním spuštění, běží mnohem rychleji než interpretovaný kód skriptu ASP. Samozřejmě že každého hned napadne otázka – a to je nutné po každé změně projekt kompilovat? To by pochopitelně bylo velice nepohodlné, krása ASP je právě v tom, že po uložení souboru stačí okno Exploreru znovu natáhnout. Jak je tedy toto dilema řešeno v ASP.NET ? Odpověď naleznete – pokud jste již aplikaci alespoň jednou spustili pomocí vyvolání URL – v adresáři WINDOWS\Microsoft.NET\Framework\v1.0.3705\Temporary ASP.NET Files . Ano, vaše stránka byla zkompilována a knihovna .dll uložena právě v tomto adresáři. O celém procesu kompilace se můžete přesvědčit ještě jinak: udělejte schválně syntaktickou chybu ve zdrojovém souboru. Výsledná chybová zpráva bude v odkazu Show Detailed Compiler Output obsahovat příkaz pro kompilaci vašeho zdrojového kódu (smazal jsem klíčové slovo Sub před jménem procedury):

Nyní se pustím do popisu mechanismu, který umožňuje vlastní vyvolávání událostí. HTTP protokol je ve své podstatě bezstavový (uživatel může aplikaci kdykoliv ukončit, procházet zpátky, dopředu bez toho, aby měla aplikace možnost jakkoliv reagovat), což znamená, že ASP.NET musí používat nějaký trik pro sledování stavu typu: bylo stlačené tlačítko Button1, vyvolej odpovídající událost. Tady přichází na řadu klíčový element celé koncepce ASP.NET – Form PostBack. Tento honosný název znamená asi to, že při každé interakci s elementem stránky (např. kliknutí Hyperlinku, stlačení tlačítka apod.) se formulář odešle metodou POST zpátky na server pro zpracování tou samou stránkou. Tam se už engine ASP.NET postará o zjištění aktuálního stavu a vyvolání příslušných Event Handlerů, jak je známe z programování pro GUI.

Každá cesta na server a zpátky ke klientovi obsahuje v HTML zakódovaný aktuální stav aplikace – můžete se o tom přesvědčit zobrazením výsledného HTML kódu. Ten skrývá input s názvem __VIEWSTATE – což je místo, kam ASP.NET ukládá všechny klíčové informace o stavu stránky, např. aktuální hodnoty objektu Label1. Pochopitelně že veškeré informace jsou co nejvíce zhuštěné a kódované, aby zabíraly co nejmenší část přenosového pásma. O tom, jak se dá kontrolovat PostBack a ViewState, bychom mohli napsat samostatný díl, takže prozatím berte tyto informace jako hodně zjednodušené.

Pojďme teď na chvíli zpátky mezi klasické aplikace běžící pod Windows. Co tedy potřebuje .NET aplikace pro svůj běh? Z koncepce jasně plyne, že na počítači musí být nainstalován nějaký runtime, aby aplikace mohla být spuštěna. A také je jasné, že instalovat celé SDK je pro koncového uživatele neúnosné. Proto je možné stáhnout Redistributable .NET. Download 20 MB ale také není výhra a osobně si myslím, že bude hrát významnou roli v procesu rozšiřování mezi koncové uživatele. I když na druhou stranu dnes už skutečně není problém „připálit“ ke každému programu runtime .NET. Na závěr dodávám, že Redistributable .NET je možné nainstalovat na Windows 98 a novější.

A co bude příště?

Popovídáme si hlouběji o Common Language Runtime (CLR) – společné základně pro celý babylón jazyků, který .NET nabízí a plánuje nabízet do budoucna. Krátce se podíváme na podporu dalších funkcionalit, jako jsou např. vlákna (Threading), rozhraní (Interface), Obsluha výjimek (Exception handling), Události (Events), Delegate a Garbage Collector. Probereme nové aspekty Visual Basicu .NET a vytvoříme nové třídy, které použijeme dále v seriálu.
Diskuze (105) Další článek: Nová Pentia 4

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,