300 likes | 397 Views
Datový typ třída – class (1). Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje vlastnosti a chování objektů Je možné ji definovat pomocí klíčového slova class Může obsahovat následující členy : konstanty (constants)
E N D
Datový typ třída – class (1) • Datový typ definovaný uživatelem • Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace • Charakterizuje vlastnosti a chování objektů • Je možné ji definovat pomocí klíčového slova class • Může obsahovatnásledující členy: • konstanty (constants) • datové položky (fields)
Datový typ třída – class (2) • metody (methods) • vlastnosti (properties) • události (events) • operátory (operators) • indexery (indexers) • konstruktory instance (instance constructors) • destruktory (destructors) • statické konstruktory (static constructors) • vnořené deklarace typů (nested type declarations)
Datový typ třída – class (3) • Každý člen uvnitř třídy má svoji tzv. přístup-nost (accessibility) určující, jakým způsobem je nebo není přístupný (viditelný) zvenčí • Nejčastěji se používá přístupnost: • public(veřejná): • přístup k danému členu není nijak omezován • člen je přístupný uvnitř i vně dané třídy • private (privátní, soukromá): • daný člen je přístupný pouze uvnitř třídy, v níž je defi-nován • jedná se o implicitní přístupnost k členu
Datový typ třída – class (4) • Datové položky (fields): • reprezentují proměnné spojené s objektem nebos třídou • slouží k uchování informací • Metody (methods): • funkce definované uvnitř třídy • implementují výpočet (akci), který může být pro-veden objektem nebo třídou • obsahují: • seznam formálních parametrů (může být i prázdný) • návratovou hodnotu (je-li návratovým typem metody typ void, pak metoda nevrací žádnou hodnotu)
Datový typ třída – class (5) • Konstruktory instancí (instance constructors): • speciální typy metod • slouží k vytvoření instance třídy (objektu) • mají stejný název jako třída • mohou obsahovat formální parametry • nemohou vracet žádnou hodnotu (ani void) v jejich hlavičce není uvedený žádný návratový typ • jedna třída může obsahovat více konstruktorů (pře-těžování – overloading) • není-li definován žádný konstruktor, pak překladač automaticky vygeneruje konstruktor implicitní, kte-rý neobsahuje žádné parametry
Datový typ třída – class (6) • Příklad třídy:class Square{privateintside; public Square(int initialSide) { side = initialSide; } publicint GetArea(){ returnside*side;}}
Datový typ třída – class (7) • Na základě datového typu třída lze vytvořit její instanci • Instanci typu třída označujeme jako objekt • Objekt je vytvářen pomocí klíčového slova new(způsobí vyvolání konstruktoru) • Příklad:Square sq;sq = newSquare(5);neboSquare sq = new Square(5);
Datový typ třída – class (8) • Proměnná sq bude obsahovat odkaz, kde je v paměti uložený objekt (třída je referenční datový typ) • Poznámka: • každá instance třídy je objektem, který zabírá svůj vlastní prostor v paměti a běží nezávisle na všech ostatních instancích • Pro zpřístupnění členů třídy se používá tečko-vá notace: • identifikátor proměnné typu třída nebo typu třída • symbol tečka • identifikátor označující člen třídy
Datový typ třída – class (9) • Příklad:int s;Square sq = new Square(5);s = sq.GetArea(); • Metody i datové položky mohou být deklaro-vány jako statické (static): • zpřístupňovány prostřednictvím třídy • před jejich zpřístupněním není nutné vytvářet in-stanci třídy (objekt) • nezávislé na konkrétní instanci třídy
Datový typ třída – class (10) • Poznámka: • metoda Main musí být statická, protože před je-jím voláním se nevytváří instance třídy, v níž je definována • Statické třídy: • deklarovány s použitím klíčového slova static • může obsahovat pouze statické členy • nemůže obsahovat žádná data ani metody instancí • příklad: třídy Math,Convert, Console
Jmenný prostor (1) • Jmenný prostor (namespace) představuje po-jmenovaný kontejner pro další identifikátory (např. třídy) • Používán k seskupení a k rozlišení identifiká-torů • Různé jmenné prostory mohou obsahovat stejné identifikátory • Dva identifikátory se stejným názvem nelze zaměnit, pokud se nacházejí v různých jmen-ných prostorech
Jmenný prostor (2) • V rámci jednoho souboru může být defino-váno více jmenných prostorů • Více souborů může zahrnovat jeden jmenný prostor • Jmenné prostory mohou být do sebe vzájemně vnořovány • Jmenný prostor je možné definovat pomocí klíčového slova namespace • Každý jmenný prostor má přístup typu public(nelze změnit)
Jmenný prostor (3) Soubor1.cs Soubor2.cs public class ClassA{} namespace NamespaceY { publicclass ClassB { } } public class ClassC{} namespace NamespaceY { publicclass ClassA { } } namespace NamespaceZ { publicclass ClassB { } } • Příklad:
Jmenný prostor (4) • Je-li identifikátor deklarovaný (definovaný) bez specifikovaného jmenného prostoru, pak jej automaticky překladač zařadí do globál-níhojmenného prostoru (global namespace) • Identifikátor lze zpřístupnit pomocí označení jmenného prostoru (jmenných prostorů), např.:System.Console.WriteLine(…);kde: • System – jmenný prostor • Console – třída • WriteLine– metoda
Jmenný prostor (5) • Pomocí klíčového slova using je možné da-ný jmenný prostor zařadit do aktuálního obo-ru platnosti • Pro zpřístupnění identifikátoru pak není nutné uvádět označení jmenného prostoru • Příklad:using System;Console.WriteLine(…);
Předávání parametrů metodám (1) • Parametry předávané hodnotou: • deklarovány bez použití modifikátoru ref nebo out • u hodnotových typů: • dochází k předání kopie dat ze skutečného parametru do parametru formálního • změny provedené uvnitř metody nad formálním para-metrem nijak neovlivňují hodnotu parametru skuteč-ného • u referenčních typů: • dochází pouze k předání odkazu • jestliže metoda hodnotu přijatého objektu změní, pak se změna projeví i v původním objektu • skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu
Předávání parametrů metodám (2) • Parametry předávané odkazem: • před formálním i skutečným parametrem musí být uveden modifikátor ref • nedochází k vytvoření nového paměťového místa pro formální parametr • formální parametr reprezentuje stejné paměťové místo, které náleží parametru skutečnému • všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného • skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu
Předávání parametrů metodám (3) • Parametry výstupní: • před formálním i skutečným parametrem musí být uveden modifikátor out • podobné chování jako u parametrů předávaných odkazem • všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného • skutečný parametr nemusí být v době volání ini-cializovaný, tj. nemusí mít přiřazenou hodnotu • v průběhu metody mu musí být přiřazena hodnota
Přetěžování metod (1) • Přetěžování metod – overloading: • dovoluje deklarovat více než jedenu metodu se stejným oborem platnosti a se stejným jménem • jedna metoda se tak může vyskytovat ve více variantách • přetěžované metody musí mít rozdílný seznam formálních parametrů, tj. musí se lišit počtem formálních parametrů nebo jejich typy • na základě použitých skutečných parametrů (v době volání) je rozhodnuto, která varianta bude použita
Přetěžování metod (2) • Užitečné zejména v situaci, kdy je nutné pro-vádět stejnou operaci na různých datových typech • Příklad: • metoda WriteLine třídy Console může být použita 19 různými způsoby (je definována v 19 různých variantách) • každá z nich má odlišnou sadu parametrů • např.: • nemá žádný parametr vypíše pouze prázdný řádek • jako parametr má řetězec, který vypíše na standardní výstup • jako parametr přebírá desetinné (celé) číslo a vypíše jej na stan-dardní výstup
Konstanty (1) • Členy třídy reprezentující konstantní hodno-ty, které se v průběhu programu nemohou měnit • Jedná se o hodnoty, které musí být určitelné v době překladu programu • Konstanty jsou statickými členy třídy, avšak při jejich definici se nepoužívá klíčové slovo static • Lze je definovat pomocí klíčového slova const
Konstanty (2) • Příklad:classPhysics{public const double h=6.62606957E–34;public const doublehbar=h/(2*Math.PI);public const double F=9.6485E4; }
Vlastnosti (1) • Členy třídy umožňující přístup k charakteris-tickým atributům objektu nebo třídy, např.: • délka řetězce • velikost fontu • titulek okna • jméno zákazníka • apod. • Představují rozšíření datových položek: • pojmenované členy s daným datovým typem • používají stejnou syntaxi pro své zpřístupnění
Vlastnosti (2) • Na rozdíl od datových položek nereprezentují paměťové místo pro uložení hodnoty • Překladač automaticky převádí zpřístupnění vlastností na volání přístupových metod • Přístupové metody specifikují příkazy, jež mají být provedeny při: • čtení hodnoty vlastnosti • změně hodnoty vlastnosti (zápisu)
Vlastnosti (3) • Přístupové metody jsou zapisovány pomocí klíčových slov: • get: uvozuje přístupovou metodu pro čtení • set: uvozuje přístupovou metodu pro zápis • Zapisovaná data jsou přístupovým metodám (set) předávána pomocí vestavěného (skry-tého) parametru value • Konvence: • soukromé datovépoložky jsou psány s malým po-čátečním písmenem, zatímco veřejné vlastnostis počátečním písmenem velkým
Vlastnosti (4) • Příklad:classSquare{privateintside;publicintSide{get{returnside; }set{ side = value; }}}
Vlastnosti (5) • Nechť je dána deklarace:int s;Squaresq = newSquare(5); • Vlastnost Side lze zpřístupnit: • pro čtení – např.:s = sq.Side; (volá sq.Side.get) • pro zápis – např.:sq.Side = 2*s; (volá sq.Side.set) • Vlastnost může obsahovat pouze metodu: • get: vlastnost určena jen pro čtení • set: vlastnost určena jen pro zápis
Vlastnosti (6) • Omezení vlastnosti: • vlastnost nelze použít jako parametr s modifiká-torem ref nebo out (za vlastností se skrývá pří-stupová metoda nikoliv paměťové místo) • vlastnost může obsahovat jednu přístupovou me-todu get a jednu přístupovou metodu set (ne-smí obsahovat žádné jiné metody, datové polož-ky nebo vlastnosti) • přístupové metody nesmí přijímat žádné paramet-ry (zapisovaná data jsou u metody set předává-na prostřednictvím value) • u vlastností nelze používat modifikátor const
Vlastnosti (7) • Jestliže metody get, resp. set provádějí pouze operace, které slouží k přečtení, resp. přiřazení do datové položky, pak je možné jejich příkazovou část vynechat • Příklad:classSquare{publicintSide {get;set;} }
Vlastnosti (8) • Překladač automaticky vygeneruje odpovída-jící programový kód:classSquare{privateint _side;publicintSide{get{return _side;}set{_side = value;} } }