oops concepts c object oriented programming concept tutorial
Tento výukový program vysvětluje koncepty OOPS v C #. Můžete se dozvědět více o objektově orientovaných programovacích principech, jako je polymorfismus, zapouzdření, dědičnost a abstrakce:
Objektově orientované programování je programovací model, který funguje na principu, který se točí spíše kolem objektů než akce nebo logiky. Umožňuje uživatelům vytvářet objekty na základě požadavku a poté vytvářet metody pro práci s těmito objekty.
Práce na těchto objektech pro získání požadovaného výsledku je cílem objektově orientovaného programování.
=> Prozkoumejte celou řadu výcvikových kurzů C # zde
Pojďme revidovat některé koncepty, které jsme se naučili v našich dřívějších tutoriálech !!
Jmenný prostor
Obor názvů v C # je kolekce tříd. Poskytuje strukturu pro udržení jednoho názvu třídy odděleného od názvu jiné třídy tím, že je deklaruje v jiném oboru názvů. Aby se třídy se stejným názvem vzájemně nekolidovaly.
Třída
Třída je podrobný plán datového typu. Je to vlastně sbírka předmětů. Obsahuje objekty a definici operace, kterou je třeba s daným objektem provést.
Objekty
Objekty jsou instancemi třídy.
V našich předchozích výukových programech jsme se o Třídě a objektech již podrobně dozvěděli.
Co se naučíte:
Koncepty OOPS v C #
Objektově orientované programování nabízí oproti jiným programovacím modelům několik výhod, například:
- Přesný a jasný modulární přístup k programům nabízí snadné pochopení a údržbu.
- Třídy a objekty vytvořené v projektu lze použít napříč projektem.
- Modulární přístup umožňuje existenci různých modulů nezávisle, což umožňuje několika různým vývojářům pracovat na různých modulech společně.
V tomto tutoriálu se budeme více zaměřovat na další hlavní koncepty OOPS:
- Zapouzdření
- Polymorfismus
- Dědictví
- Abstrakce
Zapouzdření
Zapouzdření je objektově orientovaný programovací koncept, který umožňuje programátorům zabalit data a úryvky kódu dovnitř skříně. Pomocí programu zapouzdření můžete skrýt členy jedné třídy před jinou třídou. Je to jako obklíčení logické položky v balíčku. Umožňuje pouze dostupné a viditelné vnější informace, a to pouze konkrétním členům.
Zapouzdření je implementováno pomocí specifikátorů přístupu. Access Specifier se používá pro definování viditelnosti a přístupnosti člena třídy v C #.
C # obsahuje následující specifikátory přístupu.
jak přidat prvek do pole v javě
- Veřejnost
- Soukromé
- Chráněný
- Vnitřní
Specifikátory přístupu definují viditelnost třídy a jejích hodnot. Umožňuje vám zviditelnit data pro konkrétní část kódu a skrýt je před jinou částí. Nejčastěji používaná viditelnost je veřejná a soukromá.
Pojďme se na ně podívat.
Veřejnost: Veřejné klíčové slovo umožňuje jeho členům být viditelní odkudkoli uvnitř projektu. Tento specifikátor přístupu má omezení nejmenší viditelnosti.
Soukromé: K soukromým členům má přístup pouze člen v rámci stejné třídy. To má jednu z nejvíce omezených viditelností.
Chráněný: Chráněná přístupnost umožňuje členovi přístup zevnitř třídy a z jiné třídy, která tuto třídu dědí.
Vnitřní: Interní poskytuje přístupnost z projektu. Další podobná interní přístupnost je chráněna interně. To umožňuje to samé jako interní a jediný rozdíl je v tom, že podřízená třída může tuto třídu zdědit a dostat se ke svým členům i z jiného projektu.
Polymorfismus
Polymorfismus je odvozen z řeckého slovníku, to znamená jeden s mnoha formami. Poly znamená mnoho a Morph znamená formy. Umožňuje třídě v C # mít více implementací se stejným názvem.
Polymorfismus je v zásadě rozdělen do dvou částí:
- Polymorfismus v době kompilace
- Polymorfismus za běhu
# 1) Statický nebo kompilační časový polymorfismus
Polymorfismus v době kompilace je také známý jako statický polymorfismus. Přetížení metody je jedním ze způsobů, jak se dosahuje polymorfismu v době kompilace. Je známý jako polymorfismus v době kompilace, protože rozhodnutí o volání metody se provádí v době kompilace.
Je toho dosaženo zachováním stejného názvu metody, ale předáním různých sad parametrů. Při přetížení metody systém nejprve zkontroluje použitý parametr a na základě sady parametrů se rozhodne zavolat příslušnou metodu.
Pří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(); } }
Ve výše uvedeném příkladu jsme stejnou metodu nazvali „tisk“ dvakrát pomocí různých parametrů. Nejprve předáme dvě celá čísla jako parametry, poté jsme předali dva řetězce jako parametry. Existují dvě metody „tisku“ se stejným názvem.
Když předáme parametr se systémem celých čísel, bude hledat metodu s názvem „print“, která přijímá dva celočíselné parametry a provede to ignorováním dalších metod se stejným názvem.
Ve druhé části jsme předali parametr řetězce. Systém znovu vyhledá metodu, která přijímá dva parametry řetězce. Proto na základě předaných parametrů první metoda přidá dvě celá čísla a další zřetězí dva řetězce.
# 2) Dynamický polymorfismus nebo běhový polymorfismus
Runtime polymorfismus nebo dynamický polymorfismus nastává, když mají název metody i podpis metody stejný název a parametry. Přepsání metody je příkladem dynamického polymorfismu. Umožňuje uživateli vytvořit abstraktní třídu s částečnou implementací rozhraní.
Přepsání metody je dosaženo pomocí dědičnosti. Chcete-li dosáhnout přepsání metody, měla by mít základní třída i odvozená třída stejný název a parametr. Během doby kompilace kompilátor není schopen rozpoznat metodu přepsání, proto nevyvolá žádnou chybu. Rozhodnutí o spuštění metody je přijato za běhu.
Pří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(); } }
Pokud spustíme výše uvedený program, získáme následující výstup:
Printing from class Execute
Přestože třída Execute zdědila všechny metody třídy Program, ale když jsme zavolali metodu print, která je přítomna v obou třídách, metoda přítomná v podřízené třídě přepíše metodu z nadřazené třídy.
Dynamický polymorfismus se používá k implementaci abstrakce. Umožňuje uživateli vytvořit abstraktní třídu, která se používá k zajištění implementace rozhraní, když je zděděno odvozenou třídou. Abstraktní třída může obsahovat názvy / podpis metod a odvozená třída může mít specializovanější definici metody.
Dědictví
Dědičnost je důležitou součástí koncepce OOPS. V dědičnosti definujeme třídy rodičů a dětí. Podřízená třída může zdědit všechny metody, objekty a vlastnosti nadřazené třídy. Podřízená třída může mít také své vlastní metody a konkrétní implementaci.
Nadřazená třída je také známá jako základní třída a podřízená třída, která dědí základní třídu, je také známá jako odvozená třída.
Pří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(); } }
Tady máme třídu pojmenovanou jako program, který má jednu metodu. Máme další třídu Execute, která dědí třídu Program. Třída Execute je odvozená třída a program třídy je známý jako základní třída.
Nyní jsme místo vytvoření instance objektu pro program třídy vytvořili instanci objektu pro třídu Execute. Pomocí této instance můžeme získat přístup k metodě tisku ze základní třídy.
Výstup z výše uvedeného kódu bude tedy:
Printing from class Program
Odvozená třída nezdědí pouze metody, ale také zdědí téměř všechny členy třídy, jako jsou pole, vlastnosti atd., V závislosti na viditelnosti. Dědičnost v C # neumožňuje použití více dědičností, tj. Jedna třída nemůže dědit z několika různých tříd, ale jedna třída může dědit z jiné třídy, která může dědit z jiné třídy.
Abstrakce
Abstrakce je jedním z hlavních principů objektově orientovaného programování. Abstrakce umožňuje programátorovi zobrazit světu pouze nezbytné podrobnosti a skrýt ostatní. Abstrakce se dosahuje v C # pomocí třídy a rozhraní Abstract.
Třídu lze deklarovat jako abstraktní třídu pomocí klíčového slova „Abstrakt“. Třída Abstract v C # je vždy základní třídou v hierarchii. Tím, čím se liší od druhé třídy, je to, že je nelze vytvořit. C # abstraktní třída musí být zděděna.
Pří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ýsledkem je:
Description of the car
Pokud to porovnáte s našimi předchozími příklady během dědičnosti nebo dynamického polymorfismu, najdete podobnosti. Nejznámějším rozdílem je použití abstraktního klíčového slova před třídou Car. V případě, že to chcete přepsat nebo poskytnout vlastní implementaci podobnou tomu, co jsme udělali v dynamickém polymorfismu. Pak toho můžete dosáhnout následujícím způsobem.
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'; } }
Pokud tedy nyní spustíte tento kód, zobrazí se následující výstup:
Description of the car is now Hyundai
Metoda odvozené třídy přepíše metodu základní třídy. Tímto způsobem můžete vytvořit jinou odvozenou třídu, jako je Ferrari, Porsche, BMW atd., S vlastními implementačními metodami.
Pokud se podíváte pozorně, uvidíte, že naše metoda popisu v abstraktní třídě neobsahuje žádnou implementaci.
Proč tedy definujeme prázdné metody?
Důvodem je, že třída Abstract poskytuje podpis metod a stanoví povinnost podtříd vytvořit implementaci pro všechny tyto metody. To umožňuje sdílení základní třídy, ale zároveň udržuje kontrolu implementace metody odvozené třídy.
Rozhraní
V C # je rozhraní plánem třídy. Rozhraní je podobné abstraktní třídě a používá se k dosažení stoprocentní abstrakce. Všechny metody popsané uvnitř rozhraní jsou ve výchozím nastavení abstraktní. Nemá žádné tělo metody a nelze jej vytvořit instanci.
Rozhraní se používá hlavně k dosažení vícenásobné dědičnosti a úplné abstrakce. Veškerý podpis metody deklarovaný uvnitř rozhraní by měl být poskytnut s implementací od třídy nebo struktury, která ji implementuje.
Pří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ýstupem výše uvedeného kódu bude:
Description of the car is now Hyundai
Zde jsme vytvořili rozhraní Car. Protože rozhraní nemůže mít žádnou definici metody, právě jsme v rozhraní zadali název metody a návratový typ. Poté jsme implementovali rozhraní Car do jiné třídy Hyundai. V implementované třídě jsme poskytli definici metod definovaných uvnitř rozhraní.
Závěr
V koncepci objektově orientovaného programování je každá část programu považována za objekt. Třída je kolekce podobných typů prvků a objekt je instancí třídy.
Zapouzdření v C # umožňuje uživateli zjistit viditelnost třídy a jejích členů. Polymorfismus umožňuje metodám mít stejný název, ale s různými parametry uvnitř stejné třídy nebo se stejným parametrem v jiné třídě.
Dědičnost je, když podřízená třída, která je také známá jako odvozená třída, dědí všechny vlastnosti včetně metod, objektů, polí atd. Nadřazené třídy, která je také známá jako základní třída. Abstrakce umožňuje programu zobrazit pouze podpis a skrýt podrobnosti implementace.
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'; } }
=> Prozkoumejte celou řadu výcvikových kurzů C # zde
Doporučené čtení
- OOP Java: Úvod do objektově orientovaného programování v Javě
- Objektově orientované programování v C ++
- Výukový program pro Unix Pipes: Pipes v programování Unixu
- Výukový program Python DateTime s příklady
- Objektové úložiště v QTP - výuka # 22
- Koncepty OOP Pythonu (třídy, objekty a dědičnost Pythonu)
- Výukový program QTP # 7 - Paradigma identifikace objektů QTP - Jak QTP jednoznačně identifikuje objekty?
- Naučte se pokročilé koncepty skriptování SoapUI Groovy - výuka SoapUI č. 9