Navrhování a používání tříd

Dokončeno

V objektově orientovaném programování (OOP) jsou třídy stavebními bloky aplikace. Pochopení vztahu mezi třídami a objekty je nezbytné.

  • Třídy jsou podrobné plány, které vývojáři používají k definování vlastností (dat) a metod (chování) objektů. Třídy poskytují způsob zapouzdření dat a chování, což usnadňuje uspořádání a správu kódu.
  • Objekty jsou instancemi tříd. Při vytvoření instance třídy je objekt vytvořen v paměti. Každý objekt má vlastní sadu vlastností a metod, ale sdílí stejnou strukturu definovanou třídou.

Zkoumání skutečných objektů kolem vás vám pomůže pochopit, jak třídy a objekty fungují v programování. Objekty v reálném světě mají atributy (vlastnosti) a chování (metody), které definují jejich účel a funkčnost. Například auto je objekt s atributy, jako je make, model a barva a chování, jako je řízení a zastavení.

Objekty reálného světa

Lidé pracují s objekty neustále ve svém každodenním životě. Ve skutečnosti lze téměř vše, s čím komunikujeme, považovat za objekt.

K definování objektů v reálném světě můžete použít následující kritéria:

  • Objekty jsou věci, které vidíme a dotkneme.
  • Objekty mají účel.
  • Objekty mají části, které podporují jejich účel.

Tužka je příkladem fyzického objektu. Účelem tužky je vytvořit poznámku nebo kresbu. Části tužky zahrnují tělo, špičku a možná gumu na mazání. Části spolupracují, aby dosáhly zamýšleného účelu tužky.

Existují také fyzické objekty, které existují jako sestavení jiných objektů. Následující seznam obsahuje příklady objektů, které se skládají z jiných objektů:

  • Auto: Účelem auta je poskytovat pozemní dopravu jednotlivcům a rodinám. Součástí auta je motor, kola, volant a mnoho dalších. Části auta spolupracují, aby umožňovaly pozemní dopravu.
  • Dům: Účelem domu je poskytnout přístřeší. Součástí domu je základ, vnější stěny, střecha a místnosti. Tyto části spolupracují na vytvoření živého prostoru.
  • Chytrý telefon: Účelem inteligentního telefonu je pomáhat uživateli s každodenními úkoly a aktivitami. Součástí inteligentního telefonu je obrazovka, mikroprocesor, paměť a úložiště, baterie, fotoaparáty a tlačítka. Tyto části spolupracují na tom, aby umožňovaly komunikaci, zábavu a funkce produktivity.

Každá část auta, domu nebo chytrého telefonu je objekt s vlastním účelem a může být také sestavením objektů.

Atributy a funkce fyzického objektu

Udělejte si chvilku na zamyšlení nad příkladem s tužkou. Tužka obsahuje části (tělo, špičku, gumu) a účel (vytvoření poznámky nebo výkresu). Tužky sdílejí tyto základní charakteristiky. Ale ne všechny tužky jsou stejné.

Některé tužky jsou krátké, některé jsou dlouhé. Některé tužky jsou žluté, některé jsou černé. Některé tužky mají nudný tip, některé mají oostřený tip. Některé tužky mají gumu, některé nemají gumu.

Atributy objektu jsou často rozděleny do následujících fyzických a behaviorálních kategorií:

  • Fyzické: Fyzické atributy jsou aspekty objektu, který lze zobrazit nebo změřit.
  • Chování: Behaviorální atributy jsou aspekty objektu, které popisují jeho schopnosti nebo interakce s jinými objekty.

V příkladu tužky zahrnují fyzické atributy délku těla, barvu těla, ostrost špičky a to, zda má tužka gumu. Mezi atributy chování patří schopnost psát, schopnost mazat a schopnost ořezat. Tužka komunikuje s papírem nebo jinými pevnými objekty, na které lze psát nebo kreslit.

Fyzické atributy se často označují jako vlastnosti, zatímco atributy chování se často označují jako funkce (metody v programování v jazyce C#).

Třídy kódu a objekty v programování v jazyce C#

Ve světě programování jazyka C# jsou vlastnosti a metody objektu definovány třídou. Třídy poskytují podrobný plán toho, co může objekt (instance třídy) dělat. Podrobný plán pro třídu se nazývá definice třídy.

Když je aplikace spuštěná, počítač používá definici třídy k přidělení paměti pro objekt (instanci třídy). Počítač pomocí podrobného plánu nakonfiguruje blok paměti, který je pro objekt správnou velikost. Objekt je v podstatě blok paměti.

Objekty kódu, stejně jako fyzické objekty, mohou mít různé hodnoty přiřazené k jeho vlastnostem.

Třídy zapouzdřují data a chování

Třídy poskytují způsob zapouzdření dat a chování. Zapouzdření je proces kombinování dat a chování do jedné jednotky. Třídy používají vlastnosti k povolení přístupu k datům a metodám pro povolení chování.

Vlastnosti třídy

Vlastnosti třídy slouží ke správě dat, která rozlišují jeden objekt (instance třídy) od jiného objektu stejného typu.

Vlastnosti třídy umožňují objektům číst, zapisovat nebo vypočítat hodnotu proměnných (datových polí) definovaných v rámci třídy. Vlastnosti se zobrazují jako veřejné datové členy, ale implementují se jako speciální metody označované jako přístupové objekty. Tato funkce umožňuje volajícím snadno přistupovat k datům a stále pomáhá zvýšit bezpečnost a flexibilitu dat.

Hodnoty vlastností je možné číst pomocí přístupového objektu get a přiřadit ho pomocí set přístupového objektu.

Metody tříd

Metody třídy definují akce (chování), které může třída provádět.

Metody mohou přijímat parametry, které poskytují vstupní data, a můžou vracet výstupní data prostřednictvím parametrů. Metody můžou také vrátit hodnotu přímo bez použití parametru.

Třída Console například zahrnuje WriteLine, ReadLinea metody Clear (mimo jiné). Tyto metody pomáhají povolit zamýšlené chování třídy Console. Metody lze použít k provádění akcí, jako jsou výpočty, manipulace s daty nebo interakce s jinými objekty.

Metody jsou často navrženy tak, aby přijímaly jeden nebo více argumentů metody. Argumenty metody jsou předány metodě jako parametry volajícího příkazu použitého k vyvolání metody. Například metoda WriteLine třídy Console může přijmout řetězcový argument, který poskytuje volající příkaz.

Definice tříd v kódu jazyka C#

Následující příklad ukazuje jednoduchou třídu v jazyce C#. Třída Phone má vlastnosti pro Brand, Modela Year. Třída také obsahuje metody pro Call a Text.


public class Phone
{
    public string? Brand { get; set; }
    public string? Model { get; set; }
    public int Year { get; set; }

    public void Call(string phoneNumber)
    {
        Console.WriteLine($"Calling {phoneNumber}...");
    }

    public void Text(string phoneNumber, string message)
    {
        Console.WriteLine($"Texting {phoneNumber}: {message}");
    }
}

Použití oborů názvů

V programování v jazyce C# se obory názvů používají dvěma způsoby:

  • Knihovna tříd .NET používá obory názvů k uspořádání mnoha tříd.
  • Vývojáři deklarují vlastní obory názvů, které pomáhají řídit obor názvů tříd a metod ve větších programovacích projektech.

Jmenné prostory v knihovně tříd .NET

Jmenné prostory používá knihovna tříd .NET k seskupení souvisejících typů dohromady, což usnadňuje jejich vyhledání a použití.

Vezměte v úvahu následující fragment kódu:


System.Console.WriteLine("Hello World!");

V tomto příkladu je System obor názvů a Console je třída v tomto oboru názvů.

Poskytnutí plně kvalifikovaného názvu třídy (System.Console) zajišťuje, že se použije správná třída. Použití plně kvalifikovaných názvů však může být nepohodlné, když pracujete s mnoha třídami z téže jmenné oblasti. Ke zlepšení čitelnosti kódu můžete použít direktivu using. Direktiva using umožňuje použít typy definované v oboru názvů bez zadání plně kvalifikovaného oboru názvů daného typu.

Následující fragment kódu implementuje direktivu using, aby se zlepšila čitelnost kódu:


using System;

Console.WriteLine("Hello World!");

Poznámka

Počínaje rozhraním .NET 6 se implicitníglobal using direktivy přidávají do nových projektů jazyka C#. To znamená, že můžete použít typy definované v těchto oborech názvů, aniž byste museli zadat jejich plně kvalifikovaný název nebo ručně přidat direktivu using. Implicitní aspekt odkazuje na skutečnost, že globální direktivy using jsou přidány do vygenerovaného souboru v adresáři obj projektu. Tato funkce umožňuje používat Console.WriteLine bez explicitního deklarování using System při vývoji aplikací ve verzích 6.0 nebo novějších .NET.

Uspořádání tříd pomocí jmenných prostorů

Deklarování vlastních oborů názvů vám může pomoct řídit rozsah názvů tříd a metod ve větších programovacích projektech. K deklaraci oboru názvů použijte klíčové slovo namespace.

Vezměte v úvahu následující fragment kódu:


namespace SampleNamespace
{
    class SampleClass
    {
        public void SampleMethod()
        {
            System.Console.WriteLine("SampleMethod inside SampleNamespace");
        }
    }
}

Název oboru názvů musí být platný název identifikátoru jazyka C#.

Obor názvů můžete deklarovat pro všechny typy definované v tomto souboru, jak je znázorněno v následujícím fragmentu kódu:


namespace SampleNamespace;

class SampleClass
{
    public void SampleMethod()
    {
        System.Console.WriteLine("SampleMethod inside SampleNamespace");
    }
}

class AnotherSampleClass
{
    public void AnotherSampleMethod()
    {
        System.Console.WriteLine("AnotherSampleMethod inside SampleNamespace");
    }
}

Výhodou této nové syntaxe je jednodušší úspora vodorovného místa a složených závorek. To usnadňuje čtení kódu.

Přehled jmenných prostorů

Jmenné prostory mají následující vlastnosti:

  • Organizují velké kódové projekty.
  • Jsou ohraničené pomocí operátoru ..
  • Direktiva using odstraňuje potřebu specifikovat název oboru názvů pro každou třídu.
  • Globální obor názvů je "kořenový" obor názvů: global::System vždy odkazuje na obor názvů systému .NET.

Použití oborů názvů k seskupení souvisejících typů dohromady usnadňuje jejich vyhledání a použití.