Objektno-orijentisano programiranje zasniva se na pet osnovnih principa: apstrakciji, enkapsulaciji (učaurivanju), nasleđivanju, polimorfizmu i ponovnom korišćenju koda.

Nasleđivanje

Već je rečeno da klase predstavljaju grupe srodnih objekata. Objekti unutar klase često mogu da se grupišu, prema nekim detaljnijim osobinama, u specifičnije klase. Specifičnija klasa naziva se podklasa (subclass) opštije nadklase (superclass).

Pošto potklasa, osim svojih specifičnih osobina, poseduje sve osobine svoje nadklase, kaže se da potklasa nasleđuje (inherits) svoju nadklasu.

U objektno-orijentisanom programiranju nasleđivanje znači da u potklasi postoje sva polja i metode natklase, kao i neka dodatna polja i metode specifične za podklasu. Dodatna polja obezbeđuju dodatna moguća stanja, a metode dodatna moguća ponašanja objekata potklase u odnosu na objekte natklase.

Na primer, geometrijske figure mogu da budu određenih boja. Krugovi, kao geometrijske figure, dodatno su okarakterisani svojim poluprečnicima, a pravougaonici dužinama stranica. Svaki krug, kao objekat klase krugova, ima svoju boju i dužinu poluprečnika. Slično tome, svaki pravougaonik, kao objekat klase pravougaonika, ima svoju boju i dužine dve stranice.

Nasleđivanje tj. izvođenje predstavlja mogućnost da se jedna klasa definiše na osnovu neke druge klase pri čemu će ta nova klasa da ima sve osobine koje ima i postojeća klasa, neke osobine će biti promenjene a neke nove će biti dodate. Klasa na osnovu koje kreiramo novu klasu zove se osnovna (base), a klasa koju kreiramo se zove izvedena klasa (derived).

public class Osnovna
 {
...
}
public class Izvedena : Osnovna
 {
...
}

Objekti izvedene klase nasleđuju sve članove  koji čine osnovnu klasu. Prilikom kreiranja objekta izvedene klase, poziva se konstruktor te klase, a nakon toga i konstruktor osnovne klase.

Primer:

public class Ucenik
{
    protected string ime;
    protected string prezime;
 
    public Ucenik(string Ime, string Prezime)
    {
        ime = Ime;
        prezime = Prezime;
    }
 
    public void Informacije()
    {
        System.Console.WriteLine("ime: " + ime + " prezime: " + prezime);
    }
}
 
public class Blagajnik : Ucenik
{
    public string pozicijaBlagajnika;
 
    public Ucenik(string ime, string prezime, string pozicija) : base(ime, prezime)
    {
        pozicijaBlagajnika = pozicija;
    }
}

Izvedena klasa ne nasleđuje konstruktor osnovne klase. Ako je definisan konstruktor u osnovnoj klasi potrebno je definisati i konstruktor u izvedenoj klasi. Konstruktor osnovne klase se poziva korišćenjem ključne reči base. U ovom slučaju, prvo se izvršava konstruktor bazne klase. U telu konstruktora izvedene klase se vrši inicijalizacija samo članova izvedene klase.

Nasleđenoj klasi se, naravno, mogu dodati novi članovi. Nasleđivanje ne podrazumeva da će nasleđena klasa imati pristup svim članovima bazne klase. Članovi bazne klase koji u svojoj deklaraciji imaju ključnu reč private, iako su nasleđeni, dostupni su samo članovima bazne klase! Samo članovi koji u svojoj deklaraciji imaju ključnu reč protected u baznoj klasi, dostupni su članovima bazne i direktno i indirektno članovima nasleđene klase. Za članove bazne klase kod kojih nije navedeno da li su private, public, ili protected podrazumeva se da su private.

Ključna reč base

Već smo rekli da jedino što Nasleđena klasa ne nasleđuje iz Bazne klase jeste konstruktor. Ukoliko se desi da nam u Nasleđenoj klasi ipak treba konstruktor Bazne klase, možemo ga pozvati korišćenjem ključne reči base.

Ukoliko pozovemo funkciju bez ključne reči base, program će da radi, ali morate paziti da u tom slučaju nemate neku funkciju u nasleđenoj klasi koja je definisana kao funkcija iz bazne klase jer u tom slučaju program poziva funkciju iz nasleđene klase, a ne iz bazne klase


Last modified: Thursday, 5 November 2020, 12:21 AM