datový typ třída – class (1)

30
22-03-25 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)

Upload: andromeda-marinos

Post on 01-Jan-2016

29 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Datový typ třída –  class  (1)

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)

Page 2: Datový typ třída –  class  (1)

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)

Page 3: Datový typ třída –  class  (1)

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

Page 4: Datový typ třída –  class  (1)

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)

Page 5: Datový typ třída –  class  (1)

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

Page 6: Datový typ třída –  class  (1)

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;}

}

Page 7: Datový typ třída –  class  (1)

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);

Page 8: Datový typ třída –  class  (1)

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

Page 9: Datový typ třída –  class  (1)

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

Page 10: Datový typ třída –  class  (1)

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

Page 11: Datový typ třída –  class  (1)

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

Page 12: Datový typ třída –  class  (1)

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)

Page 13: Datový typ třída –  class  (1)

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

Page 14: Datový typ třída –  class  (1)

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

Page 15: Datový typ třída –  class  (1)

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(…);

Page 16: Datový typ třída –  class  (1)

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

Page 17: Datový typ třída –  class  (1)

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

Page 18: Datový typ třída –  class  (1)

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

Page 19: Datový typ třída –  class  (1)

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

Page 20: Datový typ třída –  class  (1)

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

Page 21: Datový typ třída –  class  (1)

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

Page 22: Datový typ třída –  class  (1)

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;

}

Page 23: Datový typ třída –  class  (1)

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í

Page 24: Datový typ třída –  class  (1)

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)

Page 25: Datový typ třída –  class  (1)

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

Page 26: Datový typ třída –  class  (1)

23-04-20 26

Vlastnosti (4)• Příklad:class Square{

private int side;public int Side{

get { return side;

} set {

side = value;}

}

}

Page 27: Datový typ třída –  class  (1)

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

Page 28: Datový typ třída –  class  (1)

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

Page 29: Datový typ třída –  class  (1)

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; }

}

Page 30: Datový typ třída –  class  (1)

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;}

}

}