290 likes | 463 Views
OOP. OOP ( O bject O riented P rogramming) je založeno na myšlence, že program provádí jisté akce nad jistými objekty, které reprezentují data dovoluje vytváření dále rozšiřitelných (otevře-ných) systémů
E N D
OOP • OOP (Object Oriented Programming) • je založeno na myšlence, že program provádí jisté akce nad jistými objekty, které reprezentují data • dovoluje vytváření dále rozšiřitelných (otevře-ných) systémů • Pro umožnění objektově orientovaného návr-hu poskytují dnešní programovací jazyky (vý-vojová prostředí) speciální datové typy: • objektový typ (object): Turbo Pascal 5.0 a vyšší • třída (class): ObjectPascal (Delphi), C++, C#, Java
Programovací jazyk C# • Vyvinutý v rámci platformy MS .NET • Jedná se o objektově orientovaný jazyk • Založen na jazycích C++ a Java • Syntaxe C# je podobná syntaxi jazyka C • Lze jej využít k tvorbě např.: • desktopových aplikací • webových aplikací, webových služeb a stránek • programů pro mobilní zařízení (PDA, mobilní telefony) • databázových programů
Program v jazyce C# (1) • Tvořen třídami a jejich členy (members) • Třídy a další datové typy jsou organizovány ve jmenných prostorech (namespace) a mo-hou být vnořovány do jiných tříd • Vstupním bodem každého programu v C# je metoda (funkce obsažená v typu třída) Main: • může být v programu pouze jedna • jedná se o statickou metodu • návratovým typem může být void nebo int • může přijímat parametry z příkazové řádky OS
Program v jazyce C# (2) • Metoda Main může mít jednu z následujících signatur: • static void Main() • static void Main(string[] args) • static int Main() • static int Main(string[] args) • Poznámka: • jazyk C# podobně jako jazyk C/C++ rozlišuje velká a malá písmena (jazyk case sensitive)
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í) • není-li definován žádný konstruktor, pak překladač automaticky vygeneruje konstruktor implicitní
Datový typ třída – class (6) • Příklad třídy:class Ctverec{privateintstrana; public Ctverec(int pocatecniStrana) { strana = pocatecniStrana; } publicint UrciObsah(){ returnstrana*strana;}}
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:Ctverec c;c = newCtverec(5);neboCtverec c = new Ctverec(5);
Datový typ třída – class (8) • Proměnná c 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 • symbol tečka • identifikátor označující člen třídy
Datový typ třída – class (9) • Příklad:int s;Ctverec c = new Ctverec(5);s = c.UrciObsah(); • 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řída Math, třída Convert
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ý soubor 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í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
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ř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
Předdefinované datové typy (1) • Jazyk C# poskytuje sadu předdefinovaných datových typů, které se nachází ve jmenném prostoru System • Jednotlivé datové typy (vyjma typu stringa object) jsou synonymy struktur, které obsahují metody tyto metody lze pomocí tečkové notace volat • Všechny tyto struktury poskytují např. meto-du ToString, která umožňuje převést číselnou hodnotu na její textové vyjádření
Předdefinované datové typy (2) Typ Popis Velikost Typový ekvivalent sbyte celočíselný typ se znaménkem 8 b System.SByte short celočíselný typ 16 b System.Int16 int celočíselný typ 32 b System.Int32 long celočíselný typ 64 b System.Int64 byte celočíselný typ bez znaménka 8 b System.Byte ushort celočíselný typ 16 b System.UInt16 uint celočíselný typ 32 b System.UInt32 ulong celočíselný typ 64 b System.UInt64 float reálný typ (s jednoduchou přesností) 32 b System.Single double reálný typ (s dvojitou přesností) 64 b System.Double
Předdefinované datové typy (3) Typ Popis Velikost Typový ekvivalent • Poznámka: • datové typy string a object jsou popsány jako třídy (nikoliv jako struktury) bool logický (booleovský) typ 8 b System.Boolean char znakový typ (Unicode) 16 b System.Char decimal peněžní hodnoty (28 platných číslic) 128 b System.Decimal object kořen objektové hierarchie System.Object string posloupnost znaků (řetězec) 16 b / znak System.String
Hodnotové a referenční typy (1) • Každý typ v jazyce C# je přímo nebo nepří-mo odvozen od třídy object • Hodnotové typy (value types): • jejich proměnné přímo nesou (obsahují) svá data • každá proměnná má svou vlastní kopii dat • změna hodnoty jedné proměnné neovlivňuje hodnotu proměnné jiné • jsou ukládány na zásobníku • patří mezi ně většina předdefinovaných typů (vyj-ma object a string) a výčtové typy • pro vytvoření vlastních hodnotových typů slouží struktury
Hodnotové a referenční typy (2) • Referenční (odkazové) typy (reference types): • jejich proměnné ukládají odkaz (referenci) na data (objekty) • pokud dojde k přiřazení proměnné, tak dojde ke zkopírování odkazu • je možné, aby dvě proměnné obsahovaly odkaz na stejný objekt • operace nad jednou proměnnou může ovlivnit objekt, na nějž se odkazuje proměnná jiná • v paměti jsou ukládány na spravované haldě (managed heap)
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