23.01. Modifikatori pristupa
Uvod
U objektno orijentisanom programiranju veoma je važno da znamo ko sme da koristi određene delove koda.
Zbog toga se koriste modifikatori pristupa. Oni određuju odakle se može pristupiti klasi, njenim promenljivama i metodama, kao i šta se dešava kada se iz klase prave objekti.
Primer klase i objekta:
class Ucenik
{
public string Ime;
}
Ucenik u1 = new Ucenik();
Ucenik u2 = new Ucenik();
-
Ucenikje klasa,u1iu2su objekti, a svaki objekat ima svoje podatke
Šta se dešava kada se napravi objekat?
Kada se izvrši naredba:
Ucenik u1 = new Ucenik();
dešava se sledeće:
- U memoriji se rezerviše prostor za objekat
- Kreira se novi objekat klase
Ucenik - Svi članovi klase postaju deo tog objekta
- Modifikatori pristupa određuju kojim članovima se može pristupiti preko objekta
Modifikatori pristupa
U Visual Studio 2010 (C# 4.0) koriste se sledeći modifikatori pristupa:
-
public -
private -
protected -
internal -
protected internal
Kratka objašnjenja sa primerima su sakrivena iza dugmića:
Član označen kao public je dostupan:
-
unutar klase
-
preko objekta
-
iz drugih klasa
-
iz drugih projekata
Primer:
class Ucenik
{
public string Ime;
}
Ucenik u = new Ucenik();
u.Ime = "Milica";
Pošto je Ime javno, može se slobodno koristiti preko objekta u.
private članovi su dostupni samo unutar iste klase.
Oni postoje u objektu, ali im se ne može pristupiti spolja.
Primer:
class Racun
{
private int stanje;
public void Uplata(int iznos)
{
stanje += iznos;
}
public int PrikazStanja()
{
return stanje;
}
}
Racun r = new Racun();
r.Uplata(500);
// r.stanje = 500; // nije dozvoljeno
Šta se dešava sa objektom?
-
Objekat
rima promenljivustanje -
Ali ta promenljiva je privatna
-
Može se menjati samo preko metoda klase
protected članovi su dostupni:
-
unutar iste klase
-
u klasama koje je nasleđuju
Primer:
class Vozilo
{
protected int brzina;
}
class Auto : Vozilo
{
public void PostaviBrzinu()
{
brzina = 100;
}
}
Auto a = new Auto();
// a.brzina = 100; // nije dozvoljeno
Objašnjenje
-
Objekat
aima promenljivubrzina -
Ali joj se ne može pristupiti direktno
-
Može se koristiti samo unutar nasledničke klase
internal članovi su dostupni svim klasama u istom projektu.
Primer:
internal class PomocnaKlasa
{
public void Ispis()
{
Console.WriteLine("Interna klasa");
}
}
Ako se u istom projektu napravi objekat:
PomocnaKlasa p = new PomocnaKlasa();
p.Ispis();
Ako se pokuša korišćenje u drugom projektu – to nije dozvoljeno.
protected internal modifikator
Ovaj modifikator kombinuje dva pravila:
-
dostupan je u istom projektu
-
dostupan je u nasledničkim klasama, čak i u drugim projektima
Primer:
class Zaposleni
{
protected internal int plata;
}
Objekat ima promenljivu plata, ali njen pristup zavisi od mesta korišćenja.
Vežbe
Koristimo zadatke 97 i 98 iz priručnika za maturski ispit ......
/* **** analiza zadatka se radi na času, a vi kod kuće pokušajte da uredite ove primere **** */
Zadatak 1 - Dat je kod na C#-u kojim su kreirane tri klase u lancu nasleđivanja.
public class Deda {
private double penzija;
protected string adresa;
public string ime;
}
public class Otac: Deda {
private double plata;
protected string struka;
}
public class Sin: Deda {
public int razred;
}
Imajući u vidu klasifikatore pristupa poljima klasa, odrediti polja koja će biti vidljiva unutar klase Sin:
Zadatak 2 - Dat je kod kojim su kreirane tri klase u lancu nasleđivanja. Unutar svake klase deklarisan je po jedan private, public i protected atribut.
public class Deda {
private double penzija;
protected string adresa;
public string ime;
}
public class Otac: Deda {
private double plata;
protected string firma;
public string struka;
}
public class Sin: Otac {
private double prosek;
protected int razred;
public string skola;
}
Odrediti polja koja će biti vidljiva u kreiranom objektu s klase Sin:
Kako modifikatori utiču na objekte
-
Objekat uvek sadrži sve članove klase
-
Modifikatori određuju da li se tim članovima može pristupiti i odakle im se može pristupiti
Drugim rečima: Modifikator pristupa ne utiče na postojanje člana u objektu, već na mogućnost njegovog korišćenja.
Uporedni pregled
| Modifikator | Pristup preko objekta | Pristup u klasi | Pristup u nasledniku |
|---|---|---|---|
| public | da | da | da |
| private | ne | da | ne |
| protected | ne | da | da |
| internal | da (isti projekat) | da | ne |
| protected internal | da | da | da |
...