Dědičnost v C#

Dědičnost v C# slouží k tomu, abychom nemuseli psát některé funkce či vlastnosti pořád dokola. Dědičnost je základ objektově orientovaného programování.

Realizace dědičnosti

class Potomek: public Rodic {..}

Konstruktor potomka


public Potomek(iNovaVlastnost)
{
NovaVlastnost = iNovaVlastnost;
}
};

Base

Base slouží k tomu, abychom měli konstruktor na rodičovskou třídu. Base funguje obdobně jako v javě super(), ale má jiný zápis:
public Potomek(string iNovaVlastnost, iStaraVlastnost)
: base(iStaraVlastnost)
{
NovaVlastnost= iNovaVlastnost;
}

Abstraktní třídy a výjimky v C#

Abstraktvní třídy narozdíl od normálních tříd nevytváří žádné instance. Obsahují abstraktní metody, ale také normální metody. V abstraktní třídě se nedefinuje obsah. Slouží tedy hlavně pro to, aby se od nich dalo dědit.

Definice Abstraktní třídy

public abstract class AbstaktniTrida{...}

Dědit od abstraktní třídy můžeme pak takto:
public class OdvozenaTrida : AbstraktniTrida {...}
Pomocí příkazu override můžeme metodu, kterou jsme definovali v abstraktní třídě přepsat.

Vyjímky

Vyjímka odchytává chyby, které se stali v našem kódu. Můžeme chytat vyjímky pomocí bloku try and catch. Do try {} se dá část kódu, v které může být problém, když se nesplní spustí se blok s catch{}. Existuje také blok finally{}, který se stane vždy ať už se spustil blok catch či ne. Blok finally slouží hlavně k tomu, aby jsme po sobě uklidili (např. uvolnění paměti).

Třídy a objekty v C#

Proč je tam zas obrázek lega? – Když jsem se učil objektové programování, tak to ve škole někdo vysvětloval jako lego. Třídy a objekty jsou základ objektového programování.

Třída a její vlastnosti se daklarují takto. V třídě jsou také dva konstruktory, jeden se vstupnímy a druhý bez vstupních parametrů.

class Banana
{
protected string NazevBananu;
protected int Sirka;
protected int Delka;
public Banana()
{
NazevBananu = String.Empty;
Sirka = 0;
Delka = 0;
}
public Banana(string iNazevBananu, int iSirka, int iDelka)
{
NazevBananu = iNazevBananu;
Sirka = iSirka;
Delka = iDelka;
}

Zapouzdření vlastnosti třídy v C#

Nastavte vlastnosti na protected a set() a get() funkce. 

Vytvoření objektu

Třída výše se jmenuje “Banana”. Tak si vytvoříme objekt, který se bude jmenovat MujBanana. Ten objekt se musí vytvořit v metodě mail. Třída se deklaruje mimo main, nejlépe předtím.

Banana MujBanana = new Banana("Muj prvni banan", 3, 13);

Co je to .this?

this odkazuje na současnou instanci třídy.Příklad v konstruktoru nějaké třídy:
public Okurka(int Sirka, int Delka)
{
this.Sirka = Sirka;
this.Delka = Delka;
}

Instanční metody

K instančnímu členu třídy (proměnná, vlastnost, metoda, událost) lze přistupovat pouze přes platnou instanci třídy, tj. třídu vytvořenou pomocí klíčového slova New.


Ke statickému členu třídy lze přistupovat bez nutnosti vytvoření instance třídy (nelze k němu přistupovat přes instanci třídy).

Takže příklad instanční metody: Mám metodu OloupatBanana(), která je napsané někde v té třídě Banana, abych jí zavolal musím pak napsat jméno objektu a pak té metody: MujBanana.OloupatBanana();

Úvod do programovacího jazyka C++

C++ je jazyk vycházející z jazyka c a c+, je to jeho objektová nadstavba. C++ je jazyk, který se používá kvůli tomu, že je rychlý a především, protože má přímý přístup do paměti.

Forma hlavního programu: soubor má koncovku .cpp, musí mít funkci main. int main()-{}, return se v mainu psát nemusí, ale je lepší ho mít a je možné ho upravit – důvod je, aby byla kontrola, zda proběhla cela funkce.

Vypsaní na obrazovku: datové proudy souží k tomu, aby se do nich např. přidal text. K použití proudu je potřeba knihovna geostream (přidáni do programu #include <iostream>)

Direktiva preprocesoru: provádí se předtím než se zaceň kód kompilovat. jmenný prostor std::cout << “ahoj”;  (standart :: znamená, že je to jmenný prostor, který má cout)

Pozn.: Pokud používáme visio studio, je potřeba otevřít systém (“pause”); aby zůstalo okno a čekalo na příkaz zavření.

Odřádkovaní výpisu: iniciace standart std::cout<< std::endl;

Pozn.: Pro to aby se nemuselo psát pořád std, se použije using namespace std; – potr píšeme bez cout::  btw. je objekt.

Příklad použití datového produ:  << pr.: cout<<“ahoj”<<endl

 

Načítaní z klávesnice: slouží “cin” příklad: int a = 8; cin >> a;

Hello world ve vyskakovacím okně

1) Budem potřebovat šablonu pro aplikace v oknech (“Windows Forms Application”) – File -> New -> Project, otevře se okno se seznamem šablon, vybereme “C#” a šablonu “Windows Forms Application” Po kliknutí “OK” se otevře šablona (můžete vidět na obrázku níže). Nebo spíše desing šablony, k vidějí je pouze náhled prázného okna s klasickými tlačítky v pravém horním roku (skrýt, zvětšit a zavří

2) Chci přidat tlačítko do designu toho okna, takže si otevřu “Toolbox” česky panel nástrojů a to buď: Wiew -> Toolbox a nebo Ctrl + Alt + X

Po kliknutí nebo stlačení správné kombinace tlačítek se zobrazí seznam panelů, kde asi na druhém místě je položka “Button”. Dvojklikem se umístí tlačítko do středu okna a nebo se dá na tlačítko kliknout a přetáhnout ho na nějaké příslušné místo.

Na obrázku můžete vidět panel nástrojů (Toolbox) a v červeném oválu je označený prvek tlačítka (button).

3) Dvojklikem na tlačítko, které jsem vložili do okna v design části se dostanu do kódu.Okamžitě se vytvoří tento kód:

Poté mezi složené závorky vložím následující kód:

MessageBox.Show(“ahoj světe”);

4)Pustím program (buď F5 nebo menu: Debug -> Start Debugging Zobrazí se okno s tlačítkem, na které se dá kliknout. Po kliknutí na tlačítko se zobrazí okno s pozdravem “Ahoj světe”. Výsledek můžete vidět na obrázku níže.

Zdrojový kód s poznámkami

 

Hello world v konsole C#

První program, naprostý základ, dejme tomu, že i tradice v jakéhokoli druhu programování, je vypsání “Hello world” – Ahoj světe. Já Vám ukážu, jak jsem si nechal vypsat text “Ahoj světe” do konsole (příkazového řádku) pomocí C#.

  1. Otevřeme si šablonu pro konzolovou aplikaci (“Console Application”) File -> New -> Project, otevře se okno se seznamem šablon  “C#” a šablonu “Console Application” Po kliknutí “OK” se zobrazí stránka, jejíž obrázek je níže.

2. Do metody “Main” (do složených závorek – na obrázku níže, je tento kód zvýrazněn) vložíme tento kód:

3. Vše je hotovo, program se nyní musí spustit. Jedna z cest jak toho dosáhnout je: zmáčknutím CTRL + F5 (nebo v horním panelu “Debug” a “Start Without Debugging“) Na obrázku se vidět, jak vypadá konzole s určením textem “Ahoj světe”.

Start Without Debugging znamená, že spustíme náš program, kontroly chyb.

Zdrojový kód s poznámkami

Zakončení

Podle mě, asi dvě základní a nejdůležitější věci jsou,

  • V programovacím jazyku C# záleží na velkých a malých písmenech.
  • Každý řádek kódu musí být ukončen středníkem. (;)

Hra piškvorky

Dostal jsem zadání, udělat jednoduché zpracování hry piškvorky pro dva hráče v konzolovém rozhraní.

Zachycení události stisku CTRL+C

Tato metoda funguje tak, že se nastaví ovladač na zachytávání stisku klávesy pomocí funkce Console.CancelKeyPress a následně se vyhodnotí pomocí ConsoleCancelEventArgs, která klávesa byla stisknuta.

Přepínání hráčů

V proměnných hrac1 a hrac2 jsou uloženy jména hráčů, která byla zadána na začátku hry. Zadané jména se navíc různě kontrolují. Defaultně, pokud není nic zadáno, jsou jména hráčů nastaveny na hodnoty hrac1 a hrac2, tím jsou zajištěna jedinečná jména hráčů. To je pak využito v další části kódu pro jejich porovnávání.

Je využívána proměnná aktivnihrac, která střídavě mění hodnotu z hrac1 na hrac2. Jako první vždy začíná hráč 1 (tedy kolečko), tedy první hodnota proměnné ativnihrac je nastavena na hodnotu proměnné hrac2. V cyklu podmíněném podmínkou, že hodnotaGameOver je rovná false (tedy hra pokračuje), se po porovnání aktuální hodnoty proměnnéaktivnihrac a obsahu proměnné hrac2 nastavuje hodnota proměnné aktivnihrac na hodnotu proměnné hrac1, v případě shody hodnot proměnných nebo na hodnotu proměnné hrac2, v případě rozdílu hodnot.

Proč je potřeba kontrolovat délku tahu hráče

Po celou hru jsou zachytávány stisky kláves, které hráči zmáčkli. Z toho důvodu jsem upřednostnil metodu Console.ReadKey, která čte každý jednotlivý stisk klávesy. Ten se vyhodnocuje ve vlastní metodě HandleInput(tah hráče), která vrací v případě v úspěšných kontrol v ní obsažených, řetězec s hodnotou stisknuté klávesy.

Z principu hry hráč nemůže zadat delší tah, než jsou dva znaky. Prvním znakem je X-ová souřadnice a druhým Y-ová souřadnice. Hráč může zadat také jeden znak, např. “?” a vyvolat tím vestavěnou nápovědu.

Při prvním průchodu cyklu se vstupní podmínkou, podle které tah hráče musí být menší než dva znaky, se tvoří řetězec input, který je na začátku deklarován jako prázdny (string.Empty). Proměnná input obsahuje vrácenou hodnotu z HandleInput(tah hráče), pokud délka hodnoty input není 0, přičte se k řetězcové proměnné hractah, který tak změní svou délku z nuly na jeden znak. Následující stisk klávesy, který je zase úspěšně vyhodnocen, změní délku proměnné hractah na dva znaky a vyhodnotí se hráčův tah metodou vyhodnoceni(). Posledním krokem v cyklu je nastavení proměnné hractahna string.Empty. Tím je zabezpečeno opakování cyklu.

Možnosti uložení dlouhých řetězců

Programovací jazyk C# má i jiné možnosti, jak ukládat dlouhé řetězce.

  • Externí txt soubor – můžete založit externí txt soubor a v něm třeba definovat nějaké proměnné, na které se budete z programu odkazovat. Špatné ale je, že program musí mít dobrý přístup k txt souboru a tak musíte dávat pozor, kam si svůj txt soubor uložíte.
  • .resources – je to externí soubor, do který můžete používat v programu, můžete v něm na rozdíl od txt souboru definovat: binární data a data objektu.
  • .dll – soubor .dll je knihovna, kterou si můžete sami vytvořit a dát do nic klidně celé funkce a pak je jen volat z programu, takto se tam dá vložit i dlouhý řetězec

Nejjednodušším způsob manipulace s řetězci, je jejich uložení do proměnné. Tento způsobem jsem zvolil i já, protože počet takových řetězců je minimální, nezohlednil jsem tedy velikost výsledného kódu.

Příklad dlouhého řetězce použitého ve hře piškvorky

Pole řetězců

S polem řetězců se dá zacházet jako s jedním řetězcem. Každý prvek je očíslován a dá se s ním dále pracovat.

Způsob deklarace

string[], hranaté závorky říkají, že definujeme pole, ne jednoduchou proměnnou. Za deklarací typu proměnných v poli se definuje jméno pole řetězců.

Proč jsem použil pole řetězců v mém programu?

Na začátku vývoje hry jsem řešil, jakým způsobem označit jednotlivá políčka hry, jak vyhodnotit výhru hráče, atp. Chtěl jsem také umožnit variabilní velikost pole, s dodržením všech předešlých podmínek.

Souřadnice X a Y hracího pole jsem uložil jako jednotlivé hodnoty pole, dalším možným řešením mohl být např. dlouhý řetězec. Ve hře piškvorky se pole řetězců používá jako legenda, která se zobrazuje na okraji pole. Nejen pro lepší orientaci, ale také pro určení pozic symbolů vložených do pole.

Generování hracího pole z textové grafiky

Nastavil jsem řetězcové konstanty, pomocí kterých definuji ASCII grafiku. Celá tabulka je tvořena jako řetězec formattedString obsahující ASCII grafiku a znaky pro ukončení řádku. Po zadání velikosti hracího pole na začátku hry a podle velikosti okna konzoly je řetězec formattedString tvořen tak, aby byl vypsán horizontálně na střed okna konzoly.

Konvertovací funkce

 

  • Convert.ToInt32(str) – konvertuje řetězec (string) do numerické proměnné (int)
  • ToString() – přemění znak na řetězec
  • ToUpper() – přemění v řetězci malá písmena na velké

Funkce pole IndexOf()

Index of() vyhledá objekt v poli a vrátí první hodnotu výskytu objektu. Vstupní parametry jsou jméno pole a hodnota, kterou chceme hledat. V případě neúspěchu vrátí hodnotu -1.

Tato metoda se používá pro určení souřadnic vkládaného symbolu.

Kontrola tahu hráče (jedna z nich)

Metoda IsValidLetter(string key, string hractah), kdy key je řetězec hráčova aktuálního stisku klávesy a hractah je řetězec, obsahující aktuální hráčův tah. Nejdříve se kontroluje výskyt hráčova stisku klávesy v poli souřadnic hracího pole legenda (jen platné znaky). Zároveň se vyhodnocuje pozice stisknuté klávesy v poli a protože rozměry hracího pole můžou být různé, kontroluje se zároveň, jestli se zadaná hodnota nachází v poli.

Metoda vrací hodnoty true nebo false, podle výsledku kontroly.

Vlákna

Vlákno vytvoří představu toho, že program dělá více věcí v jednom času. V programu piškvorky se takto při výhře spouští melodie a přitom běží program dále. Další příklad použití vlákna by mohl být třeba odpočet času v rohu obrazovky.

Beep

Je funkce, která “pípá”, zahraje zvuk, který můžete slyšet ve hře piškvorky třeba, když hráč vloží správné souřadnice a ukončí tak svůj tah. Defaultně je nastaveno 800 herc a trvání pípnutí 200 milisekund. Toto nastavení ale můžete změnit Console.Beep(herc, trvání pípnutí)

Rozměry pole

Hrací pole ve hře piškvorky má dva rozměry zadané při začátku hry. Stejné rozměry má i dvourozměrné pole, využité jako zrcadlo hracího pole. Rozměry tohoto pole se zpětně získají pomocí mirrortable.GetLength(0), kde je obsažena velikost prvního rozměru pole, tedy šířka a mirrortable.GetLength(1), které obsahuje velikost druhého rozměru pole, tedy výšku.

Čtení a nastavení hodnot pole

Hodnoty v mirrortable jsou nastaveny na “0”. Podle principu: 0 = prázdné pole, 1 = kolečko, 2 = křížek, se do mirrortable zadávají hodnoty 1 nebo 2 na pozice stanovené souřadnicemi X a Y.

Hodnoty pole se čtou podle zadaných indexů. Prvním indexem je 0.

Operátor %

Modulo (%) je typ operátoru, kterým zjišťuje zbytek po celočíselném dělení.

Microsoft Visual Studio 2010 – otevření nového projektu

Microsoft Visual Studio podporuje proces vývoje softwarových aplikací od návrhu jejich architektury, přes tvorbu, testování až po nasazení.

Na těchto stránkách si můžete zdarma stáhnout trial verzi toho programu, verze je však omezená časem užívání, a po nějaké době program přestane pracovat a nabídne Vám zakoupení produktu.

V tomto článku se seznámíme (zatím jen OBECNĚ) s tímto programem.

Úprava rozhraní v Microsoft Visual Studiu 2010

Celý program si můžete přizpůsobit tak, aby Vám co nejvíce vyhovoval. Všem podoknům se dá různě mastavit velikost a poloha, můžete si dokonce nechat zobrazit jen ty okna, které potřebujete. To samé můžete udělat s horní lištou.

Na obrázku můžete vidět, jak vypadá spuštěný program s základním nastavením. Pro nás zatím nejdůležitější položka je “New Project…” (na obrázku v

červeném oválu) po kliknutí se otevře okno kde se dá vybrat jedna z nejrůznějších šablon. Na obrázku níže je obrázek jak takového okno vypadá.

V levé straně okna, je menu s podporovanými programovacími jazyky, teda hlavně C#.

Po kliknutí na C# se zobrazí seznam, z kterého nás nejvíce zajímá “Windows Forms Application” – normální programy v okně, a druhá nejdůležitější položka je “Console Application” – konzolová aplikace.

Po kliknutí na jednu z šablon se pod seznamem zobrazí 3 pole (na obrázku označeny zeleným obdélníkem). V poli “Name” si můžete napsat jméno programu, v “Location” si můžete zvolit, jiné, než výchozí uložiště Vašeho programu a nakonec do “Solutin Name” můžete napsat jméno, které chcete aby měl Váš program.

Po zmáčknutí tlačítka “OK” je Visual Studio připraveno k programování.

 

Literatura k programování v C#

 

Zde můžete nalézt seznam literatury, kterou jsem si koupil k tomu, abych se naučil programovat v C#.

Obr.Jan Ružička

-V této knížce naleznete hotová řešení, ale hlavně příklady, které jsou tam moc dobře vysvětlené.

Amedeo Mareš: 1001 tipů a triků pro C# 2010

Obr.Jan Ružička

Tato kniha se mě asi nejvíce líbí. Je napsaná ve stylu kraťoučkých textů, které řeší téměř cokoli v C#. Každý tento text má maximálně půl stránky a zabývá se jen jednou věcí. Je to rozdělené na úrovně, takže si můžete dát pozor, aby jste se hned ze začátku nevrhli do něčeho extrémně těžkého.

Úvod do programování v C#

Obr.Jan Ružička

C# je výkonný objektově orientovaný programovací jazyk určený k vývoji aplikací pro platformu .NET. Je velmi podobný jazyku JAVA a je to následník jazyka C++. Díky své uživatelské přívětivosti ve Visual Studiu se tento programovací jazyk těší, čím dál větší oblibě. Na Této stránce naleznete seznam “Lekcí” nebo spíše seznam, jak jsem se já učil C#. Jelikož se C# teprve učím myslím, že tato stránka bude dobrá, pro každého kdo má o programování v C# zájem, ale dosud ještě nevěděl jak začít.