Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

1. diel - Úvod do C # a .NET frameworku

Vitajte u prvého dielu seriálu o C #, ktorý vám odhalí jazyk C # i framework .NET. Budeme sa učiť postupne, od úplných začiatkov až po zložité konštrukcie, objektové modely a napr. Prácu s databázou alebo webové aplikácie. S trochou trpezlivosti a vytrvalosti sa z teba tak stane dobrý programátor.

Aby sme plne porouzuměli jazyku C #, obzrie sa do minulosti na to, ako sa programovacie jazyky vyvíjali. Bude pre nás totiž dôležité pochopiť, ako C # pracuje a prečo je dobré programovať práve v ňom.

Vývoj programovacích jazykov

1. generácie jazykov - Strojový kód

Procesor počítača vie vykonávať len obmedzené množstvo jednoduchých inštrukcií, ktoré sú uložené ako sekvencie bitov, sú to teda čísla. Tá sa mu zvyčajne zadávajú v hexadecimálne (šestnástkovej) sústave. Inštrukcie sú tak elementárne, že umožňujú iba napr. Sčítanie adries alebo skoky medzi inštrukciami. Nemožno napr. Jednoducho sčítať dve čísla, musíme sa na čísla pozerať ako na adresy v pamäti a také sčítaní čísel zaberie niekoľko inštrukcií. Program sčítající dve čísla by vyzeral napr. Takto:

2104
1105
3106
7001
0053
FFFE
0000

Inštrukcie sa procesora predloží v binárnej podobe. Takýto kód je samozrejme extrémne nečitateľný a závisí na inštrukčnú sade daného CPU. Určite v tomto jazyku nebude jednoduché tvoriť nejaké programy, bohužiaľ každý program musí byť nakoniec do tohto jazyka preložený, aby mohol byť na procesore počítača spustený.

strojový kód - Základné konštrukcie jazyka C # .NET

2. generácia jazykov - Assembler

Assembler (skrátene ASM) nie je o nič jednoduchšie, než strojový kód, ale je ľudsky čitateľný. Jedná sa o strojový kód, v ktorom majú inštrukcie slovné označenie (kód), čiže si človek nemusí pamätať čísla. Kódy inštrukcií sa potom preloží na vyššie uvedený strojový kód. Rovnaký program by v ASM vyzeral takto:

ORG 100
LDA A
ADD B
STA C
HLT
DEC 83
DEC –2
DEC 0
END

Vidíme, že je to trochu ľudskejší, ale stále nezainteresovaní ľudia vôbec netušia, ako program funguje (vrátane mňa).

3. generácie jazykov

Jazyky v tretej generácii konečne ponúka užívateľovi určitú abstrakciu nad tým, ako program vidí počítač, zameriavajú sa na to, ako program vidí človek. Naše čísla sú vnímaná už ako premenné, zdrojový kód pripomína matematický zápis.

Sčítaní dvoch čísel by v jazyku C vyzeralo takto:

int main(void)
{
    int a, b, c;
    a = 83;
    b = -2;
    c = a + b;
    return 0;
}

Všetci asi tušíme, čo program robí, spočíta čísla 83 a -2 a výsledok uloží do premennej c . U všetkých jazykov tretej generácie je samozrejme výhodou vysoká čitateľnosť. S ďalším vývojom išli jazykmi ešte ďalej a priniesli objektovo orientované programovanie , ale o tom až neskôr. Jazyky v tretej generácii patria najmä do troch kategórií:

1. Kompilované jazyky

Kompilované (neriadené) jazyky majú teda svoj zdrojový kód v jazyku, ktorému ľudia dobre rozumie. Tento zdrojový kód sa samozrejme musí preložiť do strojového kódu, aby ho bolo možné na procesore spustiť. Tento preklad zaisťuje prekladač (kompiler), ktorý preloží naraz celý program do stroj. kódu.

Kompiler - Základné konštrukcie jazyka C # .NET

Kompilácia má tieto výhody:

  • Rýchlosť - Jediné zbrzdenie spočíva v jednorazovej kompilácii, preložený program potom beží porovnateľne rýchlo, ako keby bol napísaný napr. V ASM.
  • Neprístupnosť zdroj. kódu - Program sa šíri už skompilovaný, nie je ho možné jednoducho modifikovať ak zároveň nevlastníte jeho zdroj. kód.
  • Jednoduché odhalenie chýb vo zdroj. kódu - Ak zdrojový kód obsahuje chybu, celý proces kompilácie spadne a programátor je s chybou oboznámený. To značne zjednodušuje vývoj.

    Ďalej sú tu samozrejme nevýhody:

  • Závislosť na platforme - Program je stále závislý na platforme, teda od typu procesora a operačného systému. Skompilovaný program nemôžeme vziať a preniesť na inú platformu bez toho, aby bol na tejto platforme skompilovaný.
  • Nemožnosť editácia - Keď sa program raz skompiluje do strojového kódu, nemožno ho editovať inak, než opätovnú kompilácií. To pochopiteľne platí i pre vyššie spomínané jazyky.
  • Memory management - Vzhľadom na to, že počítač danému programu nerozumie a len mechanicky vykonáva inštrukcie, môžeme sa niekedy stretnúť s veľmi nepríjemnými chybami s pretečením pamäte. Kompilované jazyky zvyčajne nemajú automatickú správu pamäte a sú to jazyky nižšie (s nižším komfortom pre programátora). Behové chyby spôsobené najmä zlou správou pamäti sa kompilácií neodhalí.

    Príkladom kompilovaných jazykov sú napr. Jazyk C, jeho objektový následník C ++ alebo Pascal / Delphi .

2. Interpretované jazyky

Interpretácia sa snažia riešiť problém prenosnosti programov medzi rôznymi platformami a tiež prichádza s vyšším komfortom pre programátora. Interpret funguje podobne, ako kompiler, len neprekladá program celý naraz, ale prekladá len to, čo je v danej chvíli potrebné. (Interpreter znamená v angličtine tlmočník, teda najprv vypočuje jednu vetu hovorcu a tú potom preloží a vysloví. Preklad prebieha počas príhovoru, teda behu programu, po vetách / inštrukciách. Kompiler / prekladač preloží rozhovor celý naraz a potom ho celý prečíta.). Môžeme si predstaviť, že vyššie uvedený zdrojový kód by interpret čítal po jednotlivých riadkoch, tú časť by vždy skompiloval do strojového kódu a vykonal. Výsledok kompilácie by zahodil a presunul by sa na ďalší riadok. Možno vám to pripadá ako plytvanie výkonom procesora a je pravda, že tento spôsob behu programu tiež nie je zrovna najrýchlejší.

interpret - Základné konštrukcie jazyka C # .NET

Aké môže mať teda tento postup výhody? Je ich hneď niekoľko:

  • Prenositeľnosť: Program je plne prenositeľný, ak existuje interpret pre danú platformu, pôjde tam zdrojový kód programu spustiť (a vývoj interpretu je ľahšie, než vývoj kompilátora).
  • Jednoduchšie vývoj - Vo vyšších jazykoch sme odtienené od správy pamäte, ktorú za nás robí tzv. Garbage collector (povieme si o ňom v seriáli viac). Často tiež nemusíme ani zadávať dátové typy a máme k dispozícii vysoko komfortné kolekcie a ďalšie štruktúry.
  • Stabilita - Vďaka tomu, že interpret kódu rozumie, predíde chybám, ktoré by skompilovaný program inak pokojne vykonal. Beh interpretovaných programov je teda určite bezpečnejšie, ďalej umožňuje zaujímavú vlastnosť, tzv. Reflexiu, kedy program za behu skúma sám seba, ale o tom neskôr.
  • Jednoduchá editácia - Program môžeme vyvíjať po častiach a nahrávať na cieľové umiestnenie, vďaka tomu, že sa nemusí kompilovať, ho je možné jednoducho editovať "za behu".

    Interpret má tri zásadné nevýhody:

  • Rýchlosť - Interpretácia môže byť mnohokrát veľmi pomalá a program tak plne nevyužíva výkon počítača.
  • Často ťažké hľadanie chýb - Vďaka kompilácii za behu sa chyby v kóde objavia až v tú chvíľu, kedy je kód spustený. To môže byť niekedy veľmi nepríjemné.
  • Zraniteľnosť - Pretože sa program šíri v podobe zdrojového kódu, každý do neho môže zasahovať alebo kradnúť jeho časti.

    Príkladom interpretovaného jazyka je napr. PHP . Na väčšine webov ten pomerne pohodlný jazyk výkonovo stačí, ale napríklad Facebook používa špeciálny kompilovanú verziu PHP, záujemcovia nech sa pozrú na projekt HipHop for PHP.

3. Jazyky s virtuálnym strojom

Napadlo vás, čo by sa stalo, keby sa obaja dva vyššie zmienené spôsoby spojili? Ak áno, gratulujem, vynašli ste virtuálny stroj. Jedná sa o najmodernejšie podobu jazyka, ktorá je v súčasnej dobe tiež najrozšírenejšie a najlepšou voľbou pre vývoj väčšiny aplikácií. Nebudem tajiť, že do tejto kategórie spadá samotný C # alebo Java .

Zdrojový kód je najprv preložený do tzv. Mezikódu, ktorému Microsoft hovorí CIL (Common Intermediate Language). Ide v podstate o strojový (binárny) kód, ktorý má ale o poznanie jednoduchšie inštrukčnú sadu a priamo podporuje objektové programovanie. Tento mezikód je potom vďaka jednoduchosti relatívne rýchlo interpretovateľný tzv. Virtuálnym strojom (teda interpretom, v prípade .NET je to tzv. CLR - Common Language Runtime). Výsledkom je strojový kód pre náš procesor.

virtuálny stroj - Základné konštrukcie jazyka C # .NET

Určite ste trochu vydesení, ale verte, že sme v podstate odstránili nevýhody interpreta aj kompileru a môžeme využívať mnohé z ich výhod:

  • Odhalenie chýb v zdrojovom kóde - Vďaka kompiláciu do CIL jednoducho odhalíme chyby v zdrojovom kóde.
  • Stabilita - Vďaka tomu, že interpret kódu rozumie, zastaví nás pred vykonaním nebezpečné operácie a na chybu upozorní. Môžeme tiež vykonávať reflexii (aj keď pre CIL, ale od toho sme väčšinou odtienenie).
  • Jednoduchý vývoj - Máme k dispozícii hitoch dátové štruktúry a knižnice, správu pamäte za nás vykonáva garbage collector.
  • Slušná rýchlosť - Rýchlosť sa u virtuálneho stroja pohybuje medzi interpretom a kompilerem. Virtuálny stroj už výsledky svojej práce po použití nezahadzuje, ale dokáže ich Čachovo, sám sa teda optimalizuje pri početnejších výpočtoch a môže dosahovať až rýchlosti kompileru (Just In time Compilator). Štart programu býva pomalší, pretože stroj prekladá spoločne využívané knižnice.
  • Málo zraniteľný kód - Aplikácia sa šíri ako zdrojový kód v CIL, nie je teda úplne jednoducho ľudsky čitateľná.
  • Prenositeľnosť - Asi je jasné, že hotový program pobeží na každom železe, na ktorom sa nachádza virtuálny stroj. To ale nie je všetko, my sme dokonca nezávislí aj na samotnom jazyku. Na jednom projekte môže robiť viac ľudí, jeden v C #, druhý vo Visual Basic a tretí v C ++. Zdrojové kódy sa potom vždy preloží do cieľov.

    Jazyky s virtuálnym strojom cťou objektovo orientované programovanie a jedná sa o súčasný vrchol vývoja v tejto oblasti. Existujú aj jazykmi 4. a 5. generácie, ale tie majú špecifické použitie a nebudeme sa s nimi tu zatiaľ zaoberať.

.NET framework

Ako funguje C # sme si teda vysvetlili, ešte si povedzme, čo je presne .NET framework. Rozumie sa ním v zásade štyri veci: jazyk, Visual Studio, Virtuálny stroj (CLR) a knižnice

Jazyk

Ako už som sa zmienil, v .NET máme k dispozícii niekoľko jazykov, v ktorých môžeme vyvíjať. C # je z nich najmodernejší a bol prispôsobený práve pre .NET.

Visual Studio

Visual Studio je IDE (Integrated Development Environment), prostredie, v ktorom píšeme zdrojový kód a ktoré nám tiež pomáha s vývojom. VS je veľmi uznávané aj v radoch javistů, jedná sa o moderné IDE, ktoré je vo verzii Community poskytované zadarmo a to aj pre komerčné účely.

Virtuálny stroj

CLR je virtuálny stroj, ktorý interpretuje CIL do inštrukcií fyzického procesora.

Knižnice

Knižnice sú asi najväčšou výhodou .net. Microsoft nám v podstate dodáva kompletnú sadu knižníc, v ktorej máme predpripravené rad štruktúr a komponentov, napr. Pre prácu s konzolou, databázami, formulárovými prvky a podobne. Riešenia sú kvalitné a aktuálne, sú zdieľané medzi jednotlivými jazykmi. Keďže MS je autorom aj Windows, ich komponenty pekne pasujú a sú pre ich systém odladené. Pre beh aplikácií je potom nutné, aby na koncovej stanici bola tá istá verzia .NET, v ktorej bola aplikácia vyvinutá. Dobrá správa je, že Windows majú vždy nejaký .NET v sebe.

.NET framework má nasledujúcu štruktúru:

.NET framework štruktúra - Základné konštrukcie jazyka C # .NET

V .NET 2.0 vidíme samotný CLR (virtuálny stroj) a základné knižnicu Base Class Library. Verzia 3.0 prináša určité nové smery vo vývoji formulárových aplikácií a procesov. Zaujímavá pre nás bude najmä verzia 3.5, ktorá priniesla tzv. Dopytovací jazyk LINQ, o ňom si povieme viac neskôr. Ďalšie verzie umožňuje efektívne prevádzkovať LINQ na viacjadrových procesoroch. V roku 2012 potom ešte pribudla verzia 4.5, tá napr. Zjednodušuje písanie asynchrónnych funkcií (o tom neskôr).

.NET Standard, .NET Core a Mono

Okrem tradičného .NET frameworku existujú v súčasnosti ešte ďalšie jeho vydanie, pre nás bude neskôr dôležitý .NET Core. Poďme si ich tiež aspoň rýchlo predstaviť.

Mono

Mono vzniklo ako podpora .NET na Linuxe, v tomto smere bol však vykorenený novším .NET Core (pozri nižšie). Teraz mono vyvíja spoločnosť Xamarin (vo vlastníctve Microsoftu) a je prakticky jedinou mainstream možnosťou, ak chcete v .NET vyvíjať pre Android alebo iOS. Mono používa tiež herný engine Unity , pretože podporuje aj herné konzoly.

.NET Core

.NET Core je novšia open-source implementácia určená prevažne pre webové aplikácie. Na rozdiel od .NET frameworku nie je viazaná len na OS Windows a nemusí byť nainštalovaná na hosťujúcim servera. Na druhú stranu veľa balíčkov a knižníc tretích strán ešte .NET Core nepodporuje.

.NET code, štandard a Xamarin - Základné konštrukcie jazyka C # .NET

.NET Standard

Aby bola zaistená určitá miera prenosnosti kódu medzi rôznymi implementáciami .NET, vznikol .NET Standard. Ide v podstate o špecifikáciu, ktorá určuje spoločnú funkcionalitu, ktorú každá implementácia .net obsahuje.

Teraz vieme, s čím to vlastne budeme pracovať. V budúcej lekcii, Visual Studio a prvý konzolová aplikácie , si ukážeme prácu s Visual Studiom a vytvoríme si svoj prvý program.


 

Všetky články v sekcii
Základné konštrukcie jazyka C # .NET
Preskočiť článok
(neodporúčame)
Visual Studio a prvý konzolová aplikácie
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
24 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity