Oop, objekty, třídy. Dědičnost a rozhraní

Při psaní programu musí moderní vývojář nejprve přemýšlet o architektuře budoucího projektu. Pokud jde o objektově orientovaný přístup k vývoji softwaru, znamená to, že programátor musí vytvořit kód, který bude sestávat z logických bloků (tříd a objektů), a přemýšlet o jejich interakci. Kód musí být podporován. To znamená, že v budoucnu může být tento program bezbolestně doplněn nebo rozšířen bez změny jeho hlavních složek.

Objektový přístup

V objektově orientovaném vývojovém paradigmatu existují tři hlavní nástroje, které vývojáři používají k psaní dobrého kódu:

  • Zapouzdření.
  • Dědění.
  • Polymorfismus.
  • Dědění.

Dědění

Jedná se o proces vytváření nové třídy založené na již existující třídě. Objektově orientovaný přístup se primárně používá k popisu konceptů a jevů skutečného světa programovacím jazykem. Abychom porozuměli OOP, je nutné se naučit popsat úkol, kterému čelí programátor, jazyk tříd a objektů.

Pojem dědičnosti

Abychom pochopili podstatu procesu dědičnosti, můžeme uvést příklad ze života. Existuje abstraktní pojem"člověk". Každá osoba má společné vlastnosti, kterými ji lze popsat. Je to výška, hmotnost, barva vlasů, zabarvení hlasu, atd. Ivanov Ivan, student třídy 1" a", je konkrétním představitelem pojmu "člověk", to znamená, že v jazyce objektově orientovaného přístupu je koncept Ivanov Ivan dědicem pojmu člověk. Nebo například Sousedská kočka jezevec-dědic pojmu"kočka". Je možné vytvořit složitější dědičnost: koncept jezevce je zděděn z pojmu Maine Coon, který je zase zděděn z pojmu"kočka".

Jak to popisuje programovací jazyk?

Ve vývoji programové vybavení proces dědičnosti umožňuje vytvářet třídu na základě ostatních. Nadřazená třída se nazývá základní a zbytek jsou dědici jsou deriváty. Půjčování je, že potomkům přecházejí metody, vlastnosti a pole rodičů. Syntaxe dědičnosti třídy v jazyce programování C# může vypadat takto. Například:

Třída Ivan: osoba {//tělo třídy{

Příklad mechanismu dědičnosti tříd:

Class Person{public int Age { get; set;}} Class Ivan: Person{public void Talk () {//Ivan mluví}} Class Peter : Person{public void Walk(){// Peter goes}} Class Program{static void Main(string[] args){Ivan ivan = new Ivan (); ivan.Věku003d 29; / / označte věkypeter peteru003d nový Peter (); peter.Age = 35ivan.Talk();peter.Walk()();}}

Na základě základní třídy Person jsou vytvořeny třídy dědiců a vlastnost Age je k dispozici pro obě třídy.

Konstruktor základní třídy

Vytvořením třídy s deklarovaným konstruktorem a dědickou třídou vyvstává logická otázka: za co budou konstruktéři zodpovědní při vytváření objektů těchto tříd?

Pokud je zadán pouze ve zděděné třídě, je při vytváření objektu dědice vyvolán výchozí konstruktor (nadřazený) a poté jeho přijímač.

Pokud jsou konstruktory nastaveny v nadřazené i podřízené třídě, použije se Klíčové slovo base k vyvolání základní. Při deklaraci takové struktury dědičnosti se pro zadání konstruktoru použije následující syntaxe:

Public Ivan (int age): base (age) {//tělo konstruktoru}

Dědičnost třídních metod je nejdůležitější vlastností OOP. Při vytváření objektu třídy dědiců jsou do něj předány argumenty konstruktoru základní třídy, poté je vyvolán jeho konstruktor a poté jsou provedena zbývající volání konstruktoru dědice.

Přístup k polím z podřízené třídy

Dědičnost přístupu k vlastnostem a metodám základní třídy z dědické třídy je možná, pokud jsou všechny deklarovány následujícími klíčovými slovy:

1. Public.

Poskytuje neomezený přístup k členům třídy: z Main, z dědických tříd, z jiných vrstevníků.

2. Protected.

Přístup k členovi zůstává pouze z původní třídy nebo z odvozených analogů.

3. Internal.

Omezení člena je lokalizováno pouze touto sestavou projektu.

4. Protected internal.

Omezení člena je omezeno pouze na danou sestavu projektu nebo z odvozených tříd.

Modifikátory přístupu

Dědičnost přístupu k členům třídy závisí na klíčových slovech. Pokud deklarace člena jako takového není zadána, je dostupnost nastavena na výchozí (private).

Vícenásobné dědictví

Rozhraní jsou smlouvou, která poskytuje záruky, že sada metod bude implementována ve třídě dědice rozhraní. Ty neobsahují statické členy, pole, konstanty, nebo konstruktory. Je kontraintuitivní a nelze vytvářet objekty rozhraní.

Příklady rozhraní

Data struktury jsou vytvářeny mimo tříd, jsou deklarovány pomocí klíčového slova interface:

interface IMyInterfave{void MyMethod (int someVar);}

Pravidlem dobrého tónu při vytváření rozhraní je začít název konstrukce velkým písmenem I, aby bylo možné je později snadno rozlišit. V těle rozhraní jsou deklarovány podpisy jeho členů.

Chcete-li určit, že třída implementuje rozhraní, je nutné zadat název konstrukce po deklaraci třídy stejným způsobem jako obvykle dědičnost:

class MyClass : IMyInterface{public void MyMethod (int someVar)}

Rozhraní nezbytné k tomu, implementovat vícenásobnou dědičnost. Do programovací jazyk C++, nůžková dědičnost tříd je možná; v jazyce C# se pro tyto účely používají rozhraní. Třída může implementovat mnoho rozhraní, v takovém případě jsou uvedena čárkou po deklaraci třídy:

třída MyClass: IMyFirstInterface, IMySecondInterface {//tělo třídy}

Ve výchozím nastavení mají všechny vlastnosti a metody rozhraní přístup public, protože co by měli určit určitou funkčnost, která bude později implementována ve třídě. Dědičnost v C# téměř vždy zahrnuje použití tohoto užitečného nástroje.

Binární kód

Trochu víc o dědičnosti tříd

Java, C#, C++ - všechny objektově orientované jazyky implementují mechanismus dědičnosti svým vlastním způsobem. Ale podstata je všude jedna: předat vlastnosti rodiče objektu-potomkovi. Rozhraní, abstraktní třídy jsou všechny užitečné nástroje pro ztělesnění tohoto úkolu.

Články na téma