Ukrutně ostré C# 1. díl

Ve světě programování se v minulých měsících odehrály 2 důležité události: objevil se programovací jazyk C# a sv...


Ve světě programování se v minulých měsících odehrály 2 důležité události:
objevil se programovací jazyk C# a svůj příchod razantně ohlásilo Visual Studio
.NET.
Pokud se zajímáte o dění na poli programovacích jazyků, jistě jste již
zaregistrovali nový jazyk firmy Microsoft, C# (vyslovováno "síšarp"). Pokud vás
tento jazyk zajímá a chcete se o něm dozvědět více, jsou následující řádky
určeny právě vám. Spolu s úvodem do tohoto jazyka zde budou také postupně
představovány některé vlastnosti nového Visual Studia .NET taktéž od
společnosti Microsoft.

Základní vlastnosti
Dříve, než se pustíme do nějakého programování, bylo by dobré stručně osvětlit
některé základní rysy a vlastnosti C# i důvody jeho vzniku jako jazyka pro
distribuovanou vývojovou platformu, genericky označovanou .NET. Hlavní
architekt jazyka C#, Anders Hejlsberg z Microsoftu, říká, že vytvoření
komponentově orientovaného jazyka bylo primárním cílem návrhového týmu. Co si
ale představit pod pojmem "komponentově orientovaný" jazyk? V podstatě to
znamená, že charakteristické rysy komponent (tedy atributy, vlastnosti,
události, metody, rozhraní atd.) jsou nedílnou součástí jazyka. Na konferenci
PDC ve floridském Orlandu v červenci Hejlsberg spolu s Joe Nalewbauem (Product
Managerem pro C#) uvedl, že se jedná o "prvotně třídové koncepty". Znamená to
tedy, že tyto rysy jsou vestavěny přímo do jazyka a nejsou k němu pouze
dodávány později.

Co z toho vyplývá
Tím, že dané charakteristiky jazyka umožňují od začátku "prvotně třídový
koncept", se pro nás stává mnohem snazší psát komponentově orientovaný software
bez použití dalších programovacích jazyků či technologií. V dnešní době
považují vývojáři za nástroj pro tvorbu komponentového softwaru Windows COM.
Tato technologie však vyžaduje několik zvláštních kroků, než se dostaneme k
cíli: nejdříve musíme vytvořit IDL soubor s popisem všech COM komponent a
jejich rozhraní. Potom musíme v našem vlastním kódu vykonat mnoho COM
specifických úkonů, jako např. implementaci některých rozhraní nebo
inicializaci knihoven COM, rozhodovat o věcech, jako je marshallování a
apartmenty, počítání referencí atd. Když máme všechny tyto úkoly splněny,
můžeme se konečně věnovat implementaci naší vlastní funkčnosti, která byla
původně požadována.
S pomocí C# tyto starosti odpadávají, protože koncept komponentového
programování je zabudován do jazyka samotného. To znamená, že jako vývojáři
máme všechny charakteristické rysy komponentového vývoje plně k dispozici bez
jakéhokoliv úsilí navíc a přitom neztrácíme kontext jazyka. To všechno
dohromady nám umožňuje se více věnovat implementaci požadované funkčnosti či
business logiky, spíš nežli složitému obcházení různých omezení daných
vývojovým nástrojem.

Zapouzdřené programování
Jedním z aspektů C#, který možná bude chvíli trápit některé vývojáře v C++, je
právě přístup označovaný jako zapouzdřené programování. Znamená to, že když
píšete komponenty v C#, všechen kód jde do jednoho souboru. Z toho plyne, že
neexistují hlavičkové soubory, IDL soubory, DEF soubory atd. Celá komponenta
žije v jednom jediném souboru. Znovu tedy vyvstává otázka: K čemu je tohle pro
vývojáře dobré? Je to výhodné především k zapouzdření komponent napsaných v C#
do dalších prostředí. Například, je velice snadné zapouzdřit vlastní komponenty
do ASP.NET stránky, neboť všechen kód komponenty je na jednom místě.
Samozřejmě, to je něco, co se vzdálilo možnostem C++, a otevírá to tak
nekonečné možnosti pro další prostředí, která mohou být přizpůsobena k
zapouzdřování C# komponent.

Všechno je objekt
Dalším klíčovým úkolem návrhového týmu pro C# bylo zajistit, že všechno v
jazyce musí být objektem. Ti z vás, kteří mají alespoň povrchní znalost Javy,
si jistě vybavují, že přístup "všechno je objekt" byl prosazován také zde. To
však není tak úplně pravda, ani pro Javu ani pro C++. Oba tyto jazyky mají dvě
kategorie typů: primitivní typy jako třeba int, long, float atd. a objektové
typy, které vytvářejí uživatelé. Rozdíl je v tom, že primitivní typ nemůžete
použít stejně, jako byste použili plnohodnotný objekt. Jinými slovy, nemáte u
nich k dispozici žádné vestavěné charakteristiky objektu jako např. metody a
vlastnosti.
Jiné jazyky, jako třeba SmallTalk a Lisp, jsou opravdu postaveny na
předpokladu, že všechno je objekt. Jenže tím, jak jsou tyto jazyky navrženy,
vyžadují na druhou stranu vysokou daň z hlediska výkonu.
Můžeme zde uvést jednoduchý příklad pro ilustraci: řekněme, že v prostředí
SmallTalk máme dvě čísla. Pokud jste v jazyce nový, budete si o nich myslet, že
jsou to dvě čísla primitivního typu. Ve skutečnosti však součtem těchto dvou
čísel vytváříme v paměti další objekt. To je trošku velká daň za sečtení dvou
primitivních číselných typů. Není ani potřeba moc velké představivosti, abychom
si uvědomili, že tento přístup se může stát v rozsahu celé velké aplikace
skutečně dosti drahým.

Když je to třeba
Bylo potřeba najít způsob, aby typ mohl být objektem, když je to potřeba.
Jinými slovy, nebylo by skvělé, kdyby se typ mohl chovat jako primitivní typ,
když nejsou třeba jeho objektové charakteristiky a pak jej magicky změnit na
objekt, když jej potřebujeme brát jako objekt? To je přesně to, co je v C#,
možné a označuje se tu pojmem boxing a unboxing (balení a rozbalování). Další
velkou výhodou konceptu, ve kterém je všechno objektem v C# je, že všechny typy
jsou na tom stejně, pokud jde o vaši schopnosti je vytvářet. Například v C++
jediné typy, které můžete vytvářet, jsou třídy. Nemůžete vytvářet primitivní
typy, leda byste byli součástí vývojového týmu překladače.
Pro C# jsou všechny typy vytvářeny stejně. Můžete tedy jazyk podle potřeby
rozšiřovat přidáváním vlastních typů. Perfektním příkladem této možnosti
vytváření typů, o kterých je možné uvažovat jako o primitivních, je knihovna
BCL. Existuje zde např. numerický typ Decimal, který má 28 číslic tím se
dosáhne požadované přesnosti pro ty aplikace, které to vyžadují.

Software pro nový svět
Počítačové aplikace se stále více a více týkají našeho každodenního života.
Vývojáři překladačů si začali uvědomovat, že některé aspekty jazyka byly
zpočátku ignorovány a některé z nich proto musely být po příslušných úvahách
zahrnuty do prvotních návrhových fází jazyka. Mám na mysli věci, které dělají
vývoj a údržbu aplikací mnohem snazší.
Od dnešních aplikací se očekává stále větší a větší funkčnost. A přitom místo
toho, aby bylo snazší aplikace vyvíjet, stává se tento proces stále
složitějším, čímž vyhání celkovou cenu produktu do neuvěřitelných výšek.
Vývojový tým C# vzal celou věc na vědomí a začal přemýšlet, jak zamezit
některým problémům, jako například chybám za běhu (pomocí garbage collectoru),
jak lépe ošetřovat chyby (zabudovaným ošetřováním výjimek) a jak vytvořit lépe
rozšiřitelné systémy (zavedením verzování). Některé tyto funkce a schopnosti
jsou ošetřeny běhovými knihovnami .NET. Klíčovým faktorem však je, že C# byl
navrhován se všemi těmito schopnostmi na zřeteli, a proto se chová zodpovědně v
"udržovaném" prostředí platformy .NET.

Ochrana investic
Posledním z hlavních cílů návrhového týmu byla ochrana všech investic
vynaložených na vznik současného kódu i programovacích znalostí a zkušeností,
které jste získali během let. Hlavně proto vám kód psaný v C# bude připadat
srozumitelný již při prvním pohledu a nebudete mít pocit, že se snažíte
rozluštit nějakou šifrovanou zprávu. Syntax jazyka C# je velice podobná
několika běžně používaným jazykům, jako je C++ a Java. Navíc mnoho konceptů z
těchto dvou jazyků bylo přeneseno do jazyka C#. Můžeme např. uvést takové věci,
jako jsou namespace (které hrají ohromnou roli při programování v C#), třídy,
koncept chování balíků (podobný jako v Javě) atd.
Dalším způsobem, jak chránit investice, je myšlenka bezproblémové
interoperability. Je to jedna z oblastí, kde .NET opravdu vyniká více, než
kterékoliv prostředí předtím. Samozřejmě již známe prostředí, kde si komponenty
mohou navzájem povídat jedna s druhou (pomocí mechanismů, jako je třeba COM
nebo CORBA), ale s pomocí .NET jakákoli komponenta napsaná v .NET jazyce může
automaticky mluvit s komponentou v jakémkoli jiném .NET jazyce. Už prostě vůbec
nezáleží na tom, ve kterém jazyce je komponenta naprogramována, nyní může
všechno spolupracovat. A navíc, což je nejdůležitější, je to vše integrováno
přímo do prostředí jazyka bez nutnosti psát další kód. Díky pečlivě zajištěné
interoperabilitě také můžete vzít třídu napsanou v jednom .NET jazyce a odvodit
si z ní vlastní třídu v jiném .NET jazyce.

Shrnutí
Jak jste si jistě všimli, v případě C# se jedná o moderní jazyk, který je
objektově orientovaný. Umožňuje programátorům rychle vytvářet širokou škálu
aplikací pro novou platformu .NET, která sama o sobě vyčerpává dnešní výpočetní
i komunikační možnosti. Vzhledem ke svému elegantnímu návrhu se C# stává dobrou
volbou pro tvorbu komponent počínaje objekty na vysoké úrovni a konče
aplikacemi na systémové úrovni. Pomocí jednoduchých konstrukcí mohou být
komponenty v C# převedeny na webové služby, což umožňuje jejich spouštění přes
Internet z jakéhokoliv jazyka na jakémkoliv operačním systému.
Dalším vlastnostem jazyka C#, jakož i konkrétním příkladům práce s platformou
Visual Studio .NET, se budeme věnovat v příštím dílu tohoto seriálu.

Vlastnosti jazyka
Vlastnosti jazyka C#, na které byl při jeho návrhu kladen největší důraz:
Komponentová orientace
Zapouzdřené programování
Důsledné zajištění toho, že všechno je objekt
Ochrana dosavadních investic
0 3365 / pen









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.