datový typ třída – class (1)
DESCRIPTION
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) - PowerPoint PPT PresentationTRANSCRIPT
23-04-20 1
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)– datové položky (fields)
23-04-20 2
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)
23-04-20 3
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
23-04-20 4
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)
23-04-20 5
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
23-04-20 6
Datový typ třída – class (6)• Příklad třídy:class Square{
private int side;
public Square(int initialSide){
side = initialSide;}public int GetArea(){ return side*side;}
}
23-04-20 7
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 = new Square(5);neboSquare sq = new Square(5);
23-04-20 8
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
23-04-20 9
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
23-04-20 10
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
23-04-20 11
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
23-04-20 12
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)
23-04-20 13
Jmenný prostor (3)• Příklad:
public class ClassA{}
namespace NamespaceY{ public class ClassB { }}
public class ClassC{}
namespace NamespaceY{ public class ClassA { }}
namespace NamespaceZ{ public class ClassB { }}
Soubor1.cs Soubor2.cs
23-04-20 14
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ího jmenné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
23-04-20 15
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(…);
23-04-20 16
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
23-04-20 17
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
23-04-20 18
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
23-04-20 19
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
23-04-20 20
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
23-04-20 21
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
23-04-20 22
Konstanty (2)• Příklad:class Physics{
public const double h = 6.62606957E–34;
public const double hbar = h/(2*Math.PI);
public const double F = 9.6485E4;
}
23-04-20 23
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í
23-04-20 24
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)
23-04-20 25
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é vlastnosti s počátečním písmenem velkým
23-04-20 26
Vlastnosti (4)• Příklad:class Square{
private int side;public int Side{
get { return side;
} set {
side = value;}
}
}
23-04-20 27
Vlastnosti (5)• Nechť je dána deklarace:int s;Square sq = new Square(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
23-04-20 28
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
23-04-20 29
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:class Square{
public int Side { get; set; }
}
23-04-20 30
Vlastnosti (8)• Překladač automaticky vygeneruje odpovída-
jící programový kód:class Square{
private int _side;public int Side{
get { return _side; } set { _side = value;}
}
}