OOP, objekti, klase. Nasljeđivanje i sučelja

Počevši od pisanja programa, suvremeni programer treba najprije razmotriti arhitekturu budućeg projekta. Sa stajališta objektno orijentiranog pristupa razvoju softvera, to znači da programer mora stvoriti kod koji će se sastojati od logičkih blokova (klasa i objekata), te razmišljati o njihovoj interakciji. Kôd mora biti podržan. To znači da u budućnosti ovaj program može biti bezbolan za dopunu ili proširenje bez mijenjanja glavnih komponenti.

U objektno-orijentiranoj paradigmi razvoja postoje tri glavna alata koje programeri koriste za pisanje dobrog koda:
  • Encapsulation.
  • Nasljeđivanje.
  • Polimorfizam.
  • Nasljeđivanje.
  • Nasljeđivanje

    Ovo je proces stvaranja nove klase na temelju postojeće. Objektno orijentirani pristup primarno se koristi za opisivanje pojmova i pojava u stvarnom svijetu u programskom jeziku. Stoga, da biste razumjeli OOP, morate naučiti opisati zadatak s kojim se suočava programer, jezik klasa i objekata.


    Kako bismo razumjeli bit procesa nasljeđivanja, možemo dati primjer života. Postoji apstraktni pojam "čovjeka". Svaka osoba ima opće karakteristike koje se mogu opisati. To je visina, težina, boja kose, ton glasa i tako dalje. Ivanov Ivan, učenik 1. razreda, "A" je konkretan predstavnik pojma "čovjek", odnosno, govoreći jezikom objektno orijentiranog pristupa, pojam Ivana Ivana -nasljednik koncepta čovjeka. Ili, na primjer, susjedna mačka Barsik - nasljednik koncepta "mačka". Može se napraviti složenije nasljeđe: koncept Barsik naslijedio od koncepta maine-kun, koji je pak naslijedio od pojma "mačka".


    Kako je to opisano u programskom jeziku?

    U razvoju softvera, proces nasljeđivanja omogućuje stvaranje klase temeljene na drugima. Roditeljska klasa naziva se baza, a ostatak nasljednici su derivati. Zaduživanje je da potomci prolaze metodama, svojstvima i poljima roditelja. Sintaksa nasljeđivanja klasa u programskom jeziku C # može izgledati ovako. Na primjer:

    klasa Ivan: Osoba
    {
    //tijelo klase
    {

    Primjer mehanizma nasljeđivanja klasa:

    klasa Osoba
    {
    javno int Age {get; set;}
    }
    klasa Ivan: osoba
    {
    javna praznina Talk ()
    {
    //Ivan govori
    }
    }
    klasa Peter :(Osoba
    {
    public void Walk () {40} {{41} //Peter goes
    }
    }
    class Program
    {
    static void Main (string) [] args)
    {
    Ivan ivan = novi Ivan ();
    ivan.Age = 29; //označava dob
    Peter peter = novi Peter ();
    peter.Age = 35
    ivan.Talk ();
    peter.Walk () ();
    }
    }

    Na temelju osnovne klase Osoba stvoreni su nasljednici, a svojstvo Age je dostupno za oba razreda.

    Baselski konstruktor

    Stvarajući klasu s deklariranim konstruktorom i nasljednikom klase, postavlja se logično pitanje: za koje će dizajnere biti odgovorno prilikom stvaranja objekata tih klasa?

    Ako je zadana samo u naslijeđenoj klasi, onda se konstruktor po zadanom poziva kada stvara objekt nasljednika.(roditelj), a zatim njegov primatelj.

    Ako su konstruktori dani kako u nadređenoj tako iu podređenoj klasi, osnovna ključna riječ koristi se za pozivanje osnovnog. Prilikom deklariranja ove konstrukcijske strukture nasljeđivanja koristi se sljedeća sintaksa:


    & lt; script type = "text /javascript" & gt;
    može blockSettings2 = {blockId: "R-A-271049-5", renderTo: "yandex_rtb_R-A-70350-39", async: 0};
    if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings2.statId = 70350;
    Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings2)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");
    public Ivan (int age): baza (dob)
    {
    //tijelo konstruktora
    }

    Nasljedne metode klasa je najvažnija osobina PLO. Prilikom stvaranja objekta klasa-nasljednika, argumenti konstruktora osnovne klase se prosljeđuju njemu, a zatim se poziva njegov konstruktor, a zatim se izvršavaju drugi pozivi konstruktora nasljednika.

    Pristup sporednim poljima

    Nasljeđivanje pristupa svojstvima i metodama osnovne klase iz klase nasljednika postaje moguće ako su sve one deklarirane sljedećim ključnim riječima:

    1. Javno.

    Pruža neograničen pristup članovima razreda: Glavnom, iz uzastopnih razreda, od drugih kolega.

    2. Zaštićeno.

    Pristup članu ostaje samo iz početne klase ili izveden iz analoga.

    3. Interno.

    Ograničenje na član je lokalizirano samo s ovim skupom projekta.

    4. Zaštićena unutarnja.

    Ograničenje za člana ograničeno je samo ovim dodatkomprojektne ili izvedene klase.

    Nasljeđivanje pristupa članovima razreda ovisi o ključnim riječima. Ako član nije naveden kao takav, dostupnost je postavljena na privatno (privatno).

    Višestruko nasljeđivanje

    Sučelja su ugovor koji jamči da će se skup metoda primijeniti u sučelju razreda nasljednika. Potonji ne sadrže statične članove, polja, konstante ili konstruktore. To je nelogično i ne možete stvoriti predmete sučelja.


    & lt; script type = "text /javascript" & gt;
    može blockSettings3 = {blockId: "R-A-271049-6", renderTo: "yandex_rtb_R-A-70350-44", async: 0};
    if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings3.statId = 70350;
    Funkcija (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (funkcija () {Ya.Context.AdvManager.render (blockSettings3)}), e = b.getElementsByTagName ("script") , d = b.createElement ("script"), d.type = "text /javascript", d.src = "//an.yandex .ru /system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (ovaj, ovaj.dokument," yandexContextAsyncCallbacks ");

    Ove se strukture stvaraju izvan klase, deklarirane pomoću sučelja ključnih riječi:

    sučelje IMyInterfave
    {
    void MyMethod (int someVar);
    }

    Pravilo dobrog tona kod stvaranja sučelja jest pokretanje naziva konstrukcije s velikim slovom slova I kako bi se dalje razlikovali. U tijelu sučelja najavljuju se potpisi njegovih članova.

    Kako bi se naznačilo da će klasa implementirati sučelje, potrebno je, kao što se obično naslijeđuje, specificirati ime konstrukcije nakon deklaracije razreda:

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

    Potrebna su sučelja za provedbu višestrukog nasljeđivanja. U programskom jeziku C ++moguće je klasično nasljeđivanje klasa; U C #, sučelja se koriste u te svrhe. Klasa može implementirati veliki broj sučelja, u kojem slučaju se prenose kroz zareze nakon deklaracije razreda:

    class }

    Po defaultu, sva svojstva i metode sučelja su javna, jer moraju definirati funkciju koja će biti implementirana u učionici. Nasljeđivanje u C # gotovo uvijek uključuje korištenje ovog praktičnog alata.

    Malo o nasljeđivanju klasa

    Java, C #, C ++ - svi objektno orijentirani jezici na svoj način implementiraju mehanizam nasljeđivanja. Ali bit je svugdje: prenijeti svojstva nadređenog objekta-potomka. Sučelja, apstraktne klase su sve prikladni alati za ovaj zadatak.

    Povezane publikacije