20.02. Zajednički članovi klase
1. Uvod
Kada pravimo više objekata iste klase, svaki objekat ima svoje vrednosti atributa (polja) i može da poziva metode definisane u klasi.
Međutim, postavlja se pitanje:
👉 Da li baš svi članovi klase moraju da pripadaju pojedinačnom objektu?
👉 Da li postoji nešto što je zajedničko svim objektima iste klase?
Odgovor je: da.
U C# jeziku takvi članovi nazivaju se zajednički članovi klase ili statički članovi (static).
2. Šta su zajednički (static) članovi klase?
Zajednički članovi su članovi koji:
- ne pripadaju pojedinačnom objektu
- pripadaju samoj klasi
- dele se između svih objekata
Deklarišu se pomoću ključne reči:
static
Na primer:
class Ucenik
{
public string Ime;
public static string NazivSkole;
}
U ovom primeru:
Imepripada svakom učeniku posebnoNazivSkoleje zajednički za sve učenike
Ako promenimo NazivSkole, promena važi za sve objekte.
3. Razlika između običnih i zajedničkih članova
| Obični član | Zajednički (static) član |
|---|---|
| Pripada objektu | Pripada klasi |
| Svaki objekat ima svoju kopiju | Postoji samo jedna kopija |
| Poziva se preko objekta | Poziva se preko imena klase |
Primer:
Ucenik u1 = new Ucenik();
Ucenik u2 = new Ucenik();
u1.Ime = "Marko";
u2.Ime = "Jovan";
Ucenik.NazivSkole = "Tehnička škola";
Kako se koristi:
Ucenik.NazivSkole
NE:
u1.NazivSkole // nije preporučeno
4. Kada koristimo zajedničke članove?
Zajedničke članove koristimo kada:
- Vrednost treba da bude ista za sve objekte
- Želimo da brojimo objekte
- Želimo pomoćne metode koje ne zavise od konkretnog objekta
- Kada pravimo globalne postavke klase
5. Primer 1 – Brojanje objekata
Zadatak: Napraviti klasu koja broji koliko je objekata napravljeno.
class Automobil
{
public string Marka;
public static int BrojAutomobila;
public Automobil(string marka)
{
Marka = marka;
BrojAutomobila++;
}
}
U glavnom programu:
Automobil a1 = new Automobil("Audi");
Automobil a2 = new Automobil("BMW");
Automobil a3 = new Automobil("Opel");
Console.WriteLine("Ukupno automobila: " + Automobil.BrojAutomobila);
Objašnjenje:
- Svaki put kada se napravi objekat
- Konstruktor se izvršava
- Povećava se zajednički brojač
Rezultat:
Ukupno automobila: 3
Postoji samo jedna promenljiva BrojAutomobila za celu klasu.
6. Primer 2 – Zajednička metoda
Statičke metode takođe postoje.
Primer:
class Matematika
{
public static int Saberi(int a, int b)
{
return a + b;
}
}
Poziv:
int rezultat = Matematika.Saberi(5, 3);
Console.WriteLine(rezultat);
Ovde nije potrebno praviti objekat klase Matematika.
7. Jako je bitno da zapamtite jedno važno pravilo
⚠ Statička metoda NE MOŽE da koristi nestatičke članove.
Neispravno bi bilo:
class Test
{
public int Broj;
public static void Prikazi()
{
Console.WriteLine(Broj); // Greška!
}
}
Zašto?
Zato što statička metoda ne zna na koji objekat se odnosi.
Ispravno bi bilo:
class Test
{
public static int Broj;
public static void Prikazi()
{
Console.WriteLine(Broj);
}
}
8. Statički konstruktor
Klasa može (a ne mora) imati i statički konstruktor.
On se izvršava:
- samo jednom
- pre kreiranja prvog objekta
- automatski
Primer:
class Firma
{
public static string Naziv;
static Firma()
{
Naziv = "Moja Firma";
Console.WriteLine("Statički konstruktor izvršen.");
}
}
9. Vežbe
Zadatak 1: Napraviti klasu Radnik koja ima polje Ime, ima statičko polje UkupanBrojRadnika, i svaki put kada se napravi objekat povećava brojač
Rešenje:
class Radnik
{
public string Ime;
public static int UkupanBrojRadnika;
public Radnik(string ime)
{
Ime = ime;
UkupanBrojRadnika++;
}
}
Zadatak 2: Napraviti klasu Konvertor sa statičkom metodom koja pretvara kilometre u metre.
Rešenje:
class Konvertor
{
public static double KmUMetre(double km)
{
return km * 1000;
}
}
Poziv:
Console.WriteLine(Konvertor.KmUMetre(5));
10. Složeniji primer (u cilju razumevanje razlike)
class Proizvod
{
public string Naziv;
public static double PDV = 0.20;
public double CenaSaPDV(double cena)
{
return cena + cena * PDV;
}
}
Ako promenimo:
Proizvod.PDV = 0.10;
Promena važi za sve proizvode.
11. Tipične greške
- Pokušaj pristupa statičkom članu preko objekta
- Korišćenje nestatičkog polja unutar statičke metode
- Mešanje pojma „zajedničko“ sa „public“
Zajedničko ≠ javno
Zajedničko znači da pripada klasi, a ne objektu.
12. Zadaci za domaći
Zadatak 1:
Napraviti klasu Student koja:
-
ima ime
-
ima statičko polje NazivFakulteta
-
omogućava promenu naziva fakulteta
Zadatak 2:
Napraviti klasu Kalkulator sa statičkim metodama:
-
Saberi
-
Oduzmi
-
Pomnozi
-
Podeli
Zadatak 3 (napredni):
Napraviti klasu Porudzbina koja:
-
ima broj porudžbine
-
ima statičko polje koje automatski generiše sledeći broj porudžbine
...