1. Podsetite se: Zašto nam treba enkapsulacija?

Pre nego što se upoznamo sa ključnom rečju this i metodama get i set, prvo treba da se podsetimo zašto objektno programiranje uvodi koncept enkapsulacije i šta je to.

Enkapsulacija znači pakovanje podataka i funkcija koje rade nad tim podacima u jednu celinu – klasu. Ideja je da objekat štiti sopstvene podatke tako što spoljašnji korisnik objekta ne može tek tako da ih menja, osim na način koji mi dozvolimo.

 

To znači da se podaci i metode koji pripadaju nekom objektu drže zajedno, „u paketu“. Još važnije, spolja ne moramo da vidimo ili znamo sve detalje kako nešto radi.

Zamislite vozača automobila: on vidi volan, pedale i menjač. Kada pritisne gas, auto ubrzava. Ali vozač ne mora da zna šta se tačno dešava u motoru. Ti detalji su „sakriveni“ – enkapsulirani unutar automobila.

To u praksi znači da:

  • atributi obično nisu javni, jer bi to omogućilo da se vrednosti menjaju nasumično.

  • umesto toga koristimo metode (get/set) koje proveravaju da li je promena dozvoljena.

To je kao da u kući imate sef ili kasicu: šifru ne dajete svima, ali im umesto toga ponudite način da ubace novac kroz mali otvor –> svi mogu da dodaju novce ali ne mogu svi da im pristupe.


2. Ključna reč this

Ključna reč this označava tekući objekat — onaj objekat nad kojim se trenutno izvršava metoda, odnosno kada objekat misli na samog sebe.

Koristimo je kada:

  • Želimo da razlikujemo polje objekta od parametra istog imena
  • Želimo da prosledimo trenutni objekat nekoj metodi ili konstruktoru
  • Pristupamo članovima klase iznutra (jasnije i bez greške)

Za učenike sada je najvažniji prvi slučaj: kako da se razlikuju atributi klase i parametri metoda/konstruktora ako imaju isto ime

Primer bez this (gde se nailazi na problem)
class Ucenik
{
    private string ime;

    public Ucenik(string ime) //parametar se isto zove kao i polje klase
    {
        ime = ime; // OVO NE RADI KAKO TREBA!  - oba se odnose na parametar
    }
}

Ovde kompajler misli da oba ime predstavljaju parametar, ne radi kako treba - pa nema dodele vrednosti.

Rešenje -> Koristimo this

class Ucenik
{
    private string ime;

    public Ucenik(string ime)
    {
        this.ime = ime; // this.ime je polje u klasi, ime je parametar
    }
}

this.ime = polje objekta
ime = vrednost prosleđenog argumenta u konstruktoru

this jasno pokazuje da mislimo na deo koji pripada objektu.


 

Enkapsulacija = skrivanje podataka i kontrola pristupa tim podacima.

Zašto se koristi?

  • da zaštitimo podatke objekta

  • da sprečimo neispravne vrednosti

  • da kontrolišemo kako se podaci menjaju (validacija)

  • da se klasa koristi bez uvida u njenu unutrašnjost

U praksi → polja postaju private, a pristup omogućavamo get/set metodama.

Bez enkapsulacije (loša praksa):
class BankovniRacun
{
    public double Stanje;   // svako može promeniti direktno
}

Korisnik bi mogao da napiše:

racun.Stanje = -9999;

Što nema smisla.

3. Enkapsulacija u praksi

Enkapsulacija se najčešće radi tako što:

  • atribute pišemo kao private

  • dozvoljavamo pristup kroz javne metode (često set i get)

4. Get i Set metode (klasičan način)

(Pre nego što naučimo svojstva — properties)

U starijem i osnovnom pristupu enkapsulaciji koristimo:

  • get metodu – vraća vrednost polja (privatnog atributa klase)

  • set metodu – menja polje, sa validacijom

Primeri:

Klasa Krug

class Krug
{
    private double poluprecnik;

    public double GetPoluprecnik()
    {
        return poluprecnik;
    }

    public void SetPoluprecnik(double vrednost)
    {
        if (vrednost > 0)
            poluprecnik = vrednost;
    }
}

Ovo omogućava:

  • da korisnik dobije podatak

  • ali kada želi da ga promeni – prolazi kroz našu validaciju (proveru da li je sve ok)


Još jedan primer je iza dugmenceta: 

Klasa Student
class Student
{
    private int godina;

    public int GetGodina()
    {
        return godina;
    }

    public void SetGodina(int g)
    {
        if (g >= 1 && g <= 4)
            godina = g;
        else
            Console.WriteLine("Greska: godina mora biti 1–4.");
    }
}

Napomena: set metode ne smeju bezuslovno da prihvate vrednost.


5. Primena svega zajedno – kompletni primeri

 

Klasa Pravougaonik
class Pravougaonik
{
    private double sirina;
    private double visina;

    public Pravougaonik(double sirina, double visina)
    {
        this.SetSirina(sirina);
        this.SetVisina(visina);
    }

    public double GetSirina()
    {
        return sirina;
    }

    public void SetSirina(double s)
    {
        if (s > 0)
            this.sirina = s;
        else
            Console.WriteLine("Sirina mora biti > 0");
    }

    public double GetVisina()
    {
        return visina;
    }

    public void SetVisina(double v)
    {
        if (v > 0)
            this.visina = v;
        else
            Console.WriteLine("Visina mora biti > 0");
    }

    public double Povrsina()
    {
        return sirina * visina;
    }
}

Korišćenje ove klase:

Pravougaonik p = new Pravougaonik(10, 5);
Console.WriteLine(p.Povrsina()); // 50
p.SetVisina(-2); // ispis: "Visina mora biti > 0"

 

Klasa Ucenik
class Ucenik
{
    private string ime;
    private double prosek;

    public Ucenik(string ime, double prosek)
    {
        this.ime = ime;             // this → polje = parametar
        this.prosek = prosek;
    }

    public void SetIme(string ime)
    {
        if (ime.Length > 0)
            this.ime = ime;
    }

    public string GetIme()
    {
        return this.ime;
    }

    public void SetProsek(double p)
    {
        if (p >= 1 && p <= 5)
            this.prosek = p;
        else
            Console.WriteLine("Prosek mora biti izmedju 1 i 5!");
    }

    public double GetProsek()
    {
        return this.prosek;
    }
}

Upotreba:

Ucenik u = new Ucenik("Marko", 4.5);

Console.WriteLine(u.GetIme());        // Marko
u.SetProsek(6);                        // ✖ greška
u.SetProsek(5);                        // ✔ ok

Ukratko:
  • this pokazuje na objekat koji je trenutno u upotrebi

  • enkapsulacija štiti podatke objekta

  • set/get metode služe za kontrolisani pristup atributima

 

Pojam Objašnjenje
this Oznaka za tekući objekat 
Enkapsulacija Sakrivanje podataka i kontrolisan pristup
private polja Podaci koje korisnik direktno ne vidi
Get metoda Vraća vrednost privatnog polja
Set metoda Menja privatno polje uz validaciju

Last modified: Friday, 14 November 2025, 6:29 PM