Metode (da se podsetimo)

Metoda izvršava određenu operaciju definisanu kao grupa naredbi. Može da primi ulazne podatke od pozivaoca tako što joj se zadaju parametri i da vrati rezultat pozivaocu tako što joj se zada povratni tip. Povratni tip metode može da bude void, što znači da ne vraća nikakvu vrednost svom pozivaocu. Metoda može takođe da vraća pozivaocu izlazne podatke (rezultat) preko parametara ref i out.

Potpis (engl. signature) metode mora biti jedinstven unutar datog tipa. Potpis metode se sastoji od tipova njenog imena i parametara (ali ne od imena parametara, niti od povratnog tipa).

Za one koji žele da znaju malo više: pročitajte detaljnije uputstvo na:

         https://www.manuelradovanovic.com/2015/12/funkcije-u-c-programskom-jeziku.html


Polimorfizam

Polimorfizam je koncept koji nam omogućava da redefinišemo kako nešto radi.

Polimorfizam se postiže sledećim tehnikama: preklapanje (overload) i prepisivanje (override) metoda, kao i preklapanje operatora.

Preklapanje metoda (eng. overloading)

Preklapanje metoda je sposobnost klase da ima više metoda sa istim imenom ali različitim potpisom (tj. parametrima)

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Radnik
{
     public Radnik Snimi()
     {
         // implementacija ...
     }
 
     public Radnik Snimi(bool forsirajAzuriranje)
     {
         // implementacija ...
     }
 
}

Prepisivanje metode (eng. override)

Prepisivanje metode je funkcionalnost programskog jezika kojim se omogućava da izvedena klasa prepiše specifičnu implementaciju metode koja je deklarisana u osnovnoj klasi. Izvedena klasa može imati svoju implementaciju metode, ali se metoda mora zvati isto i mora imati iste parametre tj. tip, broj i parametara ka

1
2
3
4
5
6
7
8
9
public class Radnik
{
    public string Ime { get; set;}
    public string Prezime{ get; set;}
    public override string ToString()
    {
          return Ime + " " + Prezime;
    }
}


Preklapanje operatora

Ovo je specijalni slučaj polimorfizma kada je jedan ili svi operatori, kao što su +, – , == tretiraju kao metode i njihovo ponašanje može varirati u odnosu na tipove parametara metode.

U sledećem primeru uradićemo preklapanje operatora ==

1
2
3
4
5
6
7
8
9
public class Radnik
{
     private string ime;
     public Ime { get; set }
     public static bool operator == (Radnik r1, Radnik r2)
     {
        return r1.Ime == r2.Ime;
     }
}

izvor gornjeg teksta: https://www.ucim-programiranje.com/2019/02/objektno-orijentisano-programiranje/


Na malo drugačiji način objašnjeno:

Preklapanje imena metoda (funkcija)

... = definisanje više metoda sa istim imenom unutar jedne klase


Preopterećene (preklapajuće – OVERLOADING) metode – metode u okviru iste klase koje imaju isti naziv, a različite parametre:

public string DajPrezimeIme() 
{
return this.m_prezime + “ “ + this.m_ime;
}

public string DajPrezimeIme(boolprvoPrezime)
{
return this.m_prezime + “ “ + this.m_ime;
}

Tip može da preklapa (engl. overloads) svoje metode (tj. da ima više metoda istog imena), sve dok su tipovi parametara metode različiti. Recimo, sve sledeće metode mogu da postoje istovremeno u istom tipu:

void Foo (int x); 
void Foo (double x);
void Foo (int x, float y);
void Foo (float x, int y);



... i još malo detaljnije:

Pod preopterećivanjem imena metoda (method name overloading) podrazumeva se definisanje više metoda sa istim imenom unutar jedne klase. Sve te metode moraju međusobno da se razlikuju po broju i/ili tipovima parametara, odnosno treba da imaju različite potpise.

Tip povratne vrednosti nije deo potpisa. Zbog toga nije dovoljno da se dve metode razlikuju samo po tipu povratne vrednosti.

Razlike u parametrima moraju da budu takve da prevodilac, na osnovu broja i tipova parametara koji se navedu prilikom pozivanja, može da jednoznačno odredi koju od istoimenih metoda da pozove.

Izbor koja od istoimenih metoda da se pozove naziva se razrešenje preopterećenih imena (overload resolution).


Last modified: Monday, 9 November 2020, 10:49 AM