Metode i preklapanje metoda u C#
1. Uvod
Kada pišemo programe, često nam se desi da isti zadatak radimo mnogo puta.
Na primer — više puta sabiramo brojeve, ispisujemo podatke o korisniku, pretvaramo vrednosti iz jednog tipa u drugi, učitavamo nešto sa tastature…
Bez metoda, morali bismo svaki put ispočetka da pišemo isti kod. To bi ubrzo postalo haotično, nepregledno i puno grešaka.
Zato programiranje uvodi metode — male, jasno definisane funkcionalne celine, koje možemo da pozovemo kad god nam trebaju.
U C# metodu možete posmatrati kao „mini-program“ unutar većeg programa.
Metode:
-
pomažu da kod bude kraći i pregledniji,
-
omogućavaju ponovno korišćenje logike,
-
čine program modularnim,
-
olakšavaju održavanje i unapređivanje programa.
2. Šta je metoda u C#?
Metoda je blok koda koji ima:
-
ime
-
ulazne podatke (parametre) – ne moraju uvek da postoje
-
povratnu vrednost – vrednost koju metoda vraća nazad pozivaocu
-
telo metode – instrukcije koje se izvršavaju
Najosnovniji oblik metode izgleda ovako:
<tip_povratne_vrednosti> NazivMetode(<parametri>)
{
// telo metode
}
Primer najjednostavnije metode:
void Pozdrav()
{
Console.WriteLine("Zdravo!");
}
Ova metoda ne vraća ništa (koristi void) i samo ispisuje poruku.
Primer metode koja vraća vrednost:
int Saberi(int a, int b)
{
return a + b;
}
Ova metoda prima dva broja i vraća njihov zbir.
Veoma je jednostavno – kao matematička funkcija.
Kako se metoda poziva?
Saberi(3, 5); // vraća 8
Pozdrav(); // ispisuje "Zdravo!"
3. Metode u okviru klase
U objektno orijentisanom programiranju sve metode se nalaze unutar klasa.
Na primer:
class Kalkulator
{
public int Saberi(int a, int b)
{
return a + b;
}
}
Da bismo koristili ovu metodu, moramo da napravimo objekat klase:
Kalkulator k = new Kalkulator();
int rezultat = k.Saberi(10, 20);
Console.WriteLine(rezultat); // 30
4. Zašto nam treba preklapanje metoda (Method Overloading)?
Zamislite situaciju: želite metodu Saberi koja sabira različite tipove podataka:
-
dva cela broja
-
dva broja sa decimalama
-
tri cela broja
-
dva broja u string formatu
Ako bismo morali da metodama dajemo različita imena, imali bismo:
-
SaberiInt -
SaberiDouble -
SaberiTriBroja -
SaberiStringove
To bi bilo ružno i nepraktično.
C# zato dozvoljava da metode imaju isto ime, ali različite parametre.
To se zove preklapanje metoda.
5. Preklapanje metoda (Method Overloading)
Preklapanje metoda znači da u istoj klasi imamo više metoda istog imena, ali se razlikuju po:
-
Broju parametara
-
Tipu parametara
-
Redosledu parametara
Važno pravilo: Povratni tip NE MOŽE biti jedina razlika.
Dakle, ove dve metode NIJE moguće preklopiti:int Metoda() { ... } double Metoda() { ... } // Pogrešno
6. Primeri preklapanja metoda
Primer 1: različiti tipovi parametara
class Kalkulator
{
public int Saberi(int a, int b)
{
return a + b;
}
public double Saberi(double a, double b)
{
return a + b;
}
}
Ako pozovemo:Saberi(2, 3) → pozvaće se prva metodaSaberi(2.5, 4.5) → pozvaće se druga
Primer 2: različit broj parametara
public int Saberi(int a, int b, int c)
{
return a + b + c;
}
Primer 3: različit redosled parametara
public void Info(string ime, int godine)
{
Console.WriteLine($"{ime} ima {godine} godina.");
}
public void Info(int godine, string ime)
{
Console.WriteLine($"{ime} ima {godine} godina.");
}
7. Kako C# bira koju verziju metode da pozove?
Kompajler bira na osnovu:
-
broja parametara,
-
tipova parametara,
-
redosleda parametara.
Ako postoji idealno poklapanje – koristi se ta metoda.
Ako ne postoji – program ne može da se prevede.
8. Primer — klasa Converter
class Converter
{
public string ConvertToString(int broj)
{
return "Ceo broj: " + broj;
}
public string ConvertToString(double broj)
{
return "Decimalni broj: " + broj.ToString("0.00");
}
public string ConvertToString(bool vrednost)
{
return vrednost ? "Tačno" : "Netačno";
}
}
9. Vežbe
Vežba 1 – Osnovno razumevanje metoda
Napisati klasu Osoba sa:
-
poljima: ime, prezime, godine
-
metodom
Prikazi(), koja ispisuje podatke
Napraviti 2 objekta i pozvati metod.
Vežba 2 – Preklapanje metoda
Napraviti klasu Matematika sa preklopljenim metodama:
-
Mnozi(int a, int b) -
Mnozi(double a, double b) -
Mnozi(int a, int b, int c)
Proveriti da li rade kako treba.
Vežba 3 – Različit redosled parametara
Napraviti tri metode Info:
-
Info(string ime, int godine) -
Info(int godine, string ime) -
Info(string ime)
– poslednja metoda poziva neku od prethodnih.
Vežba 4 – Naprednija: formatiranje teksta
Napraviti klasu FormatHelper sa metodama:
-
Format(string tekst) -
Format(int broj)— pretvara u string i dodaje “(broj)” -
Format(double broj)— zaokruži na 2 decimale -
Format(object o)— vraća tip objekta (typeof(o))
10. Zadaci za vežbu (malo teži zadaci)
Zadatak 1
Napraviti klasu Statistika sa metodama:
-
Prosek(int a, int b) -
Prosek(int a, int b, int c) -
Prosek(double[] brojevi)— vraća prosek niza
Testirati sve metode.
Zadatak 2
Napraviti klasu Printer sa metodama Print:
-
Print(string tekst) -
Print(int broj) -
Print(string[] reci)– ispisuje niz reči, svaku u novom redu -
Print(object o)– ispisuje tip i vrednost
Zadatak 3 (za bolje učenike)
Kreirati klasu Kalkulator2 sa metodama:
-
Izracunaj(int a, int b, string operacija)
gde operacija može biti: “+”, “-”, “*”, “/” -
Izracunaj(double a, double b, string operacija) -
Izracunaj(string izraz)
koristi prethodne metode, parsira izraz poput"3 + 4"ili"10 * 5"
11. Zaključak
Preklapanje metoda čini naš kod:
-
čitljivijim (koristimo isto ime metoda za istu namenu)
-
jasnijim (korisnik klase zna samo jedno ime metode)
-
fleksibilnim (program radi sa raznim tipovima podataka)
-
lakšim za održavanje (sve verzije metode su na jednom mestu)