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

Začátek psát program, moderní vývojář by měl nejprve zvážit architekturu budoucího projektu. Z hlediska objektově orientovaného přístupu k vývoji softwaru to znamená, ž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ý doplnit nebo rozšířit bez změny jeho hlavních komponent.

V objektově orientované vývojové paradigmatu existují tři hlavní nástroje, které vývojáři používají k psaní dobrého kódu:
  • Zapouzdření.
  • Dědičnost.
  • Polymorfismus.
  • dědictví.
  • Dědičnost

    Jedná se o proces vytváření nové třídy založené na existující třídě. Objektově orientovaný přístup se primárně používá k popisu pojmů a jevů reálného světa v programovacím jazyce. Proto, abyste pochopili OOP, musíte se naučit popisovat úkol, kterým čelí programátor, jazyk tříd a objektů.


    Abychom pochopili podstatu procesu dědictví, můžeme dát příklad života. Existuje abstraktní pojem "člověk". Každá osoba má obecné charakteristiky, které lze popsat. Je to výška, váha, barva vlasů, stopa hlasu a tak dále. Ivanov Ivan, student třídy 1, "A" je konkrétním představitelem pojmu "člověk", tj. Mluvit v jazyce objektově orientovaného přístupu, pojetí Ivana Ivana -dědicem koncepce člověka. Nebo například sousední kočka Barsik - dědic pojmu "kočka". Člověk může dělat složitější dědictví: koncept Barsíka zděděný od konceptu maine-kun, který zase dědí z pojmu "kočka".


    Jak je popsáno v programovacím jazyce?

    Při vývoji softwaru umožňuje proces dědění vytvořit třídu založenou na jiných. Rodičovská třída se nazývá základna a ostatní dědicové jsou deriváty. Půjčování je, že potomci projdou metodami, vlastnostmi a oblastmi rodičů. Syntaxe dědičnosti třídy v programovacím jazyce C # může vypadat takto. Například:

    třída Ivan: Osoba
    {
    //tělo třídy
    {

    třída Osoba
    {
    public int Age {get;
    třída Ivan: Osoba
    {
    public void Talk ()
    {
    //Ivan rozhovory
    }

    {
    {
    {{39} {39} {{41} [] args)
    {
    Ivan ivan = nový Ivan ();
    ivan.Age = 29; //označit věk
    Peter peter = nový Peter ();
    peter.Age = 35
    ivan.Talk ();
    peter.Walk () ();
    }
    }

    Na základě základní třídy Osoba se vytvářejí dědicové a pro obě třídy je k dispozici vlastnost Age.

    Vytvoření třídy s deklarovaným konstruktérem a třídním dědicem existuje logická otázka: Které konstruktéři budou zodpovědní za vytváření objektů těchto tříd?

    Je-li zadán pouze v zděděné třídě, je konstruktér při vytváření objektu dědice ve výchozím nastavení volán.(rodiče) a potom jeho přijímačem.

    Pokud jsou konstruktéři uvedeni jak v mateřské, tak ve vedlejších třídách, základní klíčové slovo se používá k volání základní. S oznámením této konstrukce dědictví problém designer používá následující syntaxi:


    & lt; script type = "text /javascript" & gt;
    var blockSettings2 = {blockId: "R-A-271049-5", renderTo "yandex_rtb_R-A-70350 - 39", async :! 0};
    pokud (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
    ! Funkce (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkce () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("scénář") , d = b.createElement ("scénář"), d.type = "text /javascript", d.src = „//an.yandex .ru /systém /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to, this.document,!" yandexContextAsyncCallbacks „);
    veřejné Ivan (int věk): základnu (věk)
    {
    //konstruktor těleso
    }

    dědičnost metod třídy - důležitým znakem OOP Při vytváření objekt třídy nástupnických argumenty základní třídy konstruktoru předány k němu, pak to je voláno konstruktér, a pak dělat jiné konstrukční výzvy dědice.

    přístup k oblasti dětské třídě

    Inheritance přístupu k vlastnosti a metody základní třídy třídního-nástupce stává možným, když oznámili následující klíčová slova:

    1. Veřejné

    Poskytuje neomezený přístup členům třídy: Main, z po sobě jdoucích tříd, od ostatních protějšků.

    2. Chráněno.

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

    3. Interní.

    Omezení na člena je lokalizováno pouze v tomto projektu.

    4. Chráněné vnitřní.

    Omezení na člena je omezeno pouze tímto doplněnímprojekt nebo odvozené třídy.

    Dědění přístupu k členům třídy závisí na klíčových slovech. Pokud člen není jako takový určen, je dostupnost nastavena na soukromou (soukromou).

    Vícenásobná dědičnost

    rozhraní - smlouva, která poskytuje záruku, že soubor metod bude proveden ve třídě nástupce rozhraní. Ty neobsahují statické členy, pole, konstanty nebo konstruktory. Je nelogické a nemůžete vytvářet objekty rozhraní.


    & lt; script type = "text /javascript" & gt;
    var blockSettings3 = {blockId: "R-A-271049-6", renderTo "yandex_rtb_R-A-70350 - 44", async :! 0};
    , pokud (document.cookie.indexOf ("abmatch =") větší nebo rovno 0) blockSettings3.statId = 70350;
    ! Funkce (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkce () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("scénář") , d = b.createElement ("scénář"), d.type = "text /javascript", d.src = „//an.yandex .ru /systém /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to, this.document,!" yandexContextAsyncCallbacks „);

    Tyto struktury jsou vytvořeny mimo tříd jsou deklarovány pomocí rozhraní klíčové slovo:

    rozhraní IMyInterfave
    {
    void MyMethod (int someVar);
    }

    , dobré chování při tvorbě rozhraní - start název konstrukce s velkým I, aby i nadále byly snáze rozlišit. V těle rozhraní jsou oznámeny podpisy svých členů.

    Chcete-li určit, že třída bude implementovat rozhraní, stejně jako obvykle za sebou, zadejte název návrhu po deklaraci třídy:

    Třída MyClass: IMyInterface (108 ) {
    void MyMethod (int someVar)
    }

    rozhraní požadované pro provádění více rozhraní. V programovacím jazyce C ++klasická dědičnost tříd je možná; V rozhraní C # se pro tyto účely používají rozhraní. Třída může realizovat velký počet rozhraní, v takovém případě jsou přeloženy čárku po deklaraci třídy:

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


    Ve ​​výchozím nastavení jsou všechny vlastnosti a metody rozhraní rozhraní veřejné, protože musí definovat funkci, která bude implementována ve třídě. Dědictví v C # téměř vždy zahrnuje použití tohoto šikovného nástroje.

    Trochu dědičnosti tříd

    Java, C #, C ++ - všechny objektově orientované jazyky, aby provedla svůj vlastní mechanismus dědičnosti. Podstata je však všude: přenášet vlastnosti nadřazeného objektu-potomka. Rozhraní, abstraktní třídy jsou pro tento úkol užitečným nástrojem.

    Související publikace