oops concepts c object oriented programming concept tutorial
Tento výukový program vysvetľuje koncepty OOPS v C #. Môžete sa dozvedieť viac o princípoch programovania orientovaných na objekt, ako je polymorfizmus, zapuzdrenie, dedičnosť a abstrakcia:
Objektovo orientované programovanie je programovací model, ktorý pracuje na princípe, ktorý sa točí skôr okolo objektov než od akcie alebo logiky. Umožňuje používateľom vytvárať objekty na základe požiadaviek a potom vytvárať metódy na prácu s týmito objektmi.
Práca na týchto objektoch s cieľom získať požadovaný výsledok je cieľom objektovo orientovaného programovania.
=> Preskúmajte celú sériu výcvikových kurzov C # tu
Zrevidujme niektoré koncepty, ktoré sme sa naučili v našich predchádzajúcich tutoriáloch !!
Menný priestor
Obor názvov v C # je kolekcia tried. Poskytuje štruktúru na udržanie jedného názvu triedy oddeleného od iného názvu triedy tým, že ho deklaruje v inom mennom priestore. Aby triedy s rovnakým názvom neboli v konflikte.
Trieda
Trieda je návrh dátového typu. Je to vlastne zbierka predmetov. Obsahuje objekty a definíciu operácie, ktorú je potrebné s daným objektom vykonať.
Predmety
Objekty sú inštanciami triedy.
V našich predchádzajúcich tutoriáloch sme sa už o Triede a Predmetoch dozvedeli podrobne.
Čo sa dozviete:
Koncepty OOPS v C #
Objektovo orientované programovanie ponúka oproti iným programovacím modelom niekoľko výhod, ako napríklad:
- Presný a jasný modulárny prístup k programom ponúka ľahké pochopenie a údržbu.
- Triedy a objekty vytvorené v projekte je možné použiť v celom projekte.
- Modulárny prístup umožňuje existenciu rôznych modulov nezávisle, čo umožňuje niekoľkým rôznym vývojárom spolupracovať na rôznych moduloch.
V tomto tutoriáli sa zameriame viac na ďalšie hlavné kľúčové koncepty OOPS:
- Zapuzdrenie
- Polymorfizmus
- Dedenie
- Abstrakcia
Zapuzdrenie
Zapuzdrenie je objektovo orientovaný koncept programovania, ktorý umožňuje programátorom zabaliť údaje a útržky kódu do krytu. Pomocou programu zapuzdrenia môžete skryť členov jednej triedy pred inou triedou. Je to ako obkľúčenie logickej položky v balíku. Umožňuje iba dostupné a viditeľné vonkajšie informácie, a to iba konkrétnym členom.
Zapuzdrenie sa implementuje pomocou špecifikátorov prístupu. Špecifikátor prístupu sa používa na definovanie viditeľnosti a prístupnosti člena triedy v C #.
C # obsahuje nasledujúce špecifikátory prístupu.
ako získať rýchle knihy zadarmo
- Verejné
- Súkromné
- Chránené
- Interné
Špecifikátory prístupu definujú viditeľnosť triedy a jej hodnôt. Umožňuje vám zviditeľniť údaje pre konkrétnu časť kódu a skryť ich pred inou časťou. Najčastejšie používaná viditeľnosť je verejná a súkromná.
Poďme sa na ne pozrieť.
Verejné: Verejné kľúčové slovo umožňuje, aby boli jeho členovia viditeľní z ľubovoľného miesta v rámci projektu. Tento špecifikátor prístupu má najmenšie obmedzenie viditeľnosti.
Súkromné: K súkromným členom má prístup iba člen v rámci tej istej triedy. Toto má jednu z najviac obmedzených viditeľností.
Chránené: Chránená prístupnosť umožňuje členom prístup z triedy a z inej triedy, ktorá túto triedu dedí.
Interné: Interné poskytuje prístup zvnútra projektu. Ďalšia podobná interná prístupnosť je chránená interne. To umožňuje to isté ako interné a jediný rozdiel je v tom, že podradená trieda môže túto triedu zdediť a osloviť svojich členov aj z iného projektu.
Polymorfizmus
Polymorfizmus je odvodený z gréckeho slovníka, znamená to jeden s mnohými formami. Poly znamená veľa a Morph znamená formy. Umožňuje triede v C # mať viac implementácií s rovnakým názvom.
Polymorfizmus je v zásade rozdelený do dvoch častí:
- Polymorfizmus v čase kompilácie
- Polymorfizmus za behu
# 1) Statický alebo kompilačný časový polymorfizmus
Polymorfizmus v čase kompilácie je tiež známy ako statický polymorfizmus. Preťaženie metód je jedným zo spôsobov, ako sa dá dosiahnuť polymorfizmus v čase kompilácie. Je známy ako polymorfizmus v čase kompilácie, pretože rozhodnutie o volaní metódy sa robí v čase kompilácie.
Dosahuje sa to udržiavaním rovnakého názvu metódy, ale odovzdávaním rôznych súborov parametrov. Pri preťažení metódy systém najskôr skontroluje použitý parameter a na základe množiny parametrov sa rozhodne zavolať príslušnú metódu.
Príklad:
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i+j) ); } void print(string a, string b) { Console.WriteLine('Printing String: ' , (a+b)); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello','World'); Console.ReadKey(); } }
Vo vyššie uvedenom príklade sme rovnakú metódu nazvali „tlač“ dvakrát pomocou rôznych parametrov. Najskôr odovzdáme ako parametre dve celé čísla, potom sme ako parametre odovzdali dva reťazce. Existujú dva spôsoby „tlače“ s rovnakým názvom.
Keď prejdeme parametrom so systémom celých čísel, bude hľadať metódu s názvom „print“, ktorá akceptuje dva celočíselné parametre, a vykoná ignorovanie ďalších metód s rovnakým názvom.
V druhej časti sme odovzdali parameter string. Systém opäť vyhľadá metódu, ktorá akceptuje dva parametre reťazca. Preto na základe odovzdaných parametrov prvá metóda pridá dve celé čísla a ďalšia spojí dva reťazce.
# 2) Dynamický polymorfizmus alebo runtime polymorfizmus
Polymorfizmus za behu alebo dynamický polymorfizmus sa vyskytuje, keď majú názov metódy aj podpis metódy rovnaký názov a parametre. Prepísanie metódy je príkladom dynamického polymorfizmu. Umožňuje používateľovi vytvoriť abstraktnú triedu s čiastočnou implementáciou rozhrania.
Prepísanie metódy sa dosiahne použitím dedičnosti. Aby sa dosiahlo prepísanie metódy, základná aj odvodená trieda by mali mať rovnaký názov a parameter. Počas kompilácie kompilátor nedokáže rozpoznať metódu prepísania, preto nevyvoláva žiadnu chybu. Rozhodnutie o spustení metódy sa prijme počas behu programu.
Príklad:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public void print() { Console.WriteLine('Printing from class Execute'); } public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Ak spustíme vyššie uvedený program, dostaneme nasledujúci výstup:
Printing from class Execute
Aj keď trieda Execute zdedila všetky metódy triedy Program, ale keď sme zavolali metódu print, ktorá je prítomná v obidvoch triedach, metóda prítomná v podradenej triede prepíše metódu z nadradenej triedy.
Na implementáciu abstrakcie sa používa dynamický polymorfizmus. Umožňuje používateľovi vytvoriť abstraktnú triedu, ktorá sa používa na zabezpečenie implementácie rozhrania, keď je zdedené odvodenou triedou. Abstraktná trieda môže obsahovať názvy / podpis metód a odvodená trieda môže mať špecializovanejšiu definíciu metódy.
Dedenie
Dedenie je dôležitou súčasťou konceptu OOPS. Pri dedení definujeme triedy rodičov a detí. Podradená trieda môže zdediť všetky metódy, objekty a vlastnosti nadradenej triedy. Podradená trieda môže mať aj svoje vlastné metódy a konkrétnu implementáciu.
Rodičovská trieda je tiež známa ako základná trieda a podradená trieda, ktorá dedí základnú triedu, je tiež známa ako odvodená trieda.
Príklad:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Tu máme triedu pomenovanú ako program, ktorý má jednu metódu. Máme ďalšiu triedu Execute, ktorá dedí triedu Program. Trieda Execute je odvodená trieda a program triedy je známy ako základná trieda.
Teraz sme namiesto vytvorenia inštancie objektu pre program triedy vytvorili inštanciu objektu pre triedu Execute. Pomocou tejto inštancie môžeme získať prístup k tlačovej metóde zo základnej triedy.
Výstup vyššie uvedeného kódu bude teda:
Printing from class Program
Odvodená trieda dedí nielen metódy, ale tiež dedí takmer všetkých členov triedy, ako sú polia, vlastnosti atď., V závislosti od viditeľnosti. Dedenie v C # neumožňuje použitie viacerých dedičstiev, t. J. Jedna trieda nemôže dediť z niekoľkých rôznych tried, jedna trieda však môže dediť z inej triedy, ktorá môže dediť z inej triedy.
Abstrakcia
Abstrakcia je jedným z hlavných princípov objektovo orientovaného programovania. Abstrakcia umožňuje programátorovi zobraziť svetu iba potrebné podrobnosti, zatiaľ čo ostatné skryje. Abstrakcie sa dosahuje v C # pomocou triedy a rozhrania Abstract.
Triedu možno vyhlásiť za abstraktnú triedu pomocou kľúčového slova „Abstrakt“. Trieda Abstract v C # je vždy základnou triedou v hierarchii. Odlišujú sa od druhej triedy v tom, že ich nemožno instantizovať. C # abstraktnú triedu je potrebné zdediť.
Príklad:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public void Describe() { return 'Description of the car'; } } class Hyundai : Car { }
Výsledkom je:
Description of the car
Ak to porovnáte s našimi predchádzajúcimi príkladmi počas dedenia alebo dynamického polymorfizmu, potom tu nájdete podobnosti. Najviditeľnejším rozdielom je použitie abstraktného kľúčového slova pred triedou Auto. V prípade, že to chcete prepísať alebo poskytnúť vlastnú implementáciu podobnú tomu, čo sme urobili v dynamickom polymorfizme. Potom to môžete dosiahnuť nasledujúcim spôsobom.
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
Takže ak tento kód spustíte teraz, bude mať nasledujúci výstup:
Description of the car is now Hyundai
Metóda odvodenej triedy má prednosť pred metódou základnej triedy. Týmto spôsobom môžete vytvoriť inú odvodenú triedu, ako je Ferrari, Porsche, BMW atď., S vlastnými spôsobmi implementácie.
Ak sa pozriete pozorne, uvidíte, že naša metóda popisu v abstraktnej triede neobsahuje žiadnu implementáciu.
Prečo potom definujeme prázdne metódy?
Je to tak preto, lebo trieda Abstract poskytuje podpis metód a dáva podtriedam povinnosť vytvoriť implementáciu pre všetky tieto metódy. To umožňuje zdieľanie základnej triedy, ale zároveň tiež kontroluje implementáciu metódy odvodenej triedy.
Rozhranie
V C # je rozhranie návrhom triedy. Rozhranie je podobné abstraktnej triede a slúži na dosiahnutie stopercentnej abstrakcie. Všetky metódy opísané vo vnútri rozhrania sú predvolene abstraktné. Nemá žiadne telo metódy a nemožno ho vytvoriť inštanciou.
Rozhranie sa používa hlavne na dosiahnutie viacnásobného dedičstva a úplnej abstrakcie. Celý podpis metódy deklarovaný vo vnútri rozhrania by mal byť poskytnutý s implementáciou od triedy alebo štruktúry, ktorá ich implementuje.
Príklad:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } interface Car { string Describe(); } class Hyundai : Car { public string Describe() { return 'Description of the car is now Hyundai'; } }
Výstup z vyššie uvedeného kódu bude:
Description of the car is now Hyundai
Tu sme vytvorili rozhranie Car. Pretože rozhranie nemôže mať žiadnu definíciu metódy, v rozhraní sme práve zadali názov metódy a typ návratu. Potom sme implementovali rozhranie Car do inej triedy Hyundai. V implementovanej triede sme poskytli definíciu metód definovaných vo vnútri rozhrania.
Záver
V koncepcii objektovo orientovaného programovania sa s každou časťou programu zaobchádza ako s objektom. Trieda je kolekcia podobných typov prvkov a objekt je inštanciou triedy.
Zapuzdrenie v C # umožňuje používateľovi zaistiť viditeľnosť triedy a jej členov. Polymorfizmus umožňuje, aby mali metódy rovnaký názov, ale s rôznymi parametrami v tej istej triede alebo s rovnakým parametrom v inej triede.
Dedenie je, keď podradená trieda, ktorá je tiež známa ako odvodená trieda, zdedí všetky vlastnosti nadradenej triedy vrátane metód, objektov, polí atď., Ktorá je známa aj ako základná trieda. Abstrakcia umožňuje programu zobraziť iba podpis a skryť podrobnosti implementácie.
Konsolidovaný program
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i + j)); } void print(string a, string b) { Console.WriteLine('Printing String '+ a + b); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello', 'World'); Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
=> Preskúmajte celú sériu výcvikových kurzov C # tu
Odporúčané čítanie
- OOP Java: Úvod do objektovo orientovaného programovania v Jave
- Objektovo orientované programovanie v C ++
- Výukový program pre Unix Pipes: Rúry v programovaní v Unixe
- Výukový program pre Python DateTime s príkladmi
- Objektové úložisko v QTP - príručka č. 22
- Koncepty OOP Pythonu (triedy, objekty a dedičnosť Pythonu)
- Výukový program QTP # 7 - Paradigma identifikácie objektov QTP - Ako QTP jedinečne identifikuje objekty?
- Naučte sa pokročilé koncepty skriptovania pre SoapUI - výučba SoapUI č. 9