2.1KAPSULIRANJE

 

Kapsuliranje (engl. encapsulation) predstavlja mehanizam koji povezuje naredbe i podatke sa kojima one rade, i oboje štiti od spoljnih uplitanja i zloupotreba. Kapsulirani kôd dobija "zaštitnu čauru" koja štiti naredbe i podatke od proizvoljnog pristupa izvan čaure. Pristupanje naredbama i podacima unutar čaure strogo se kontroliše pomoću dobro definisanih standarda.

Primjer automatskog mjenjača u automobilu:

 Ovaj sistem kapsulira na stotine podataka o motoru, na primjer, ubrzanje, zatim podatke o nagibu puta, kao i o položaju ručice mjenjača. Kao korisnik, vi možete da utičete na ovu složenu strukturu samo na jedan način: pomjeranjem ručice mjenjača. Na ponašanje mjenjača ne možete da utičete pritiskajući migavce, na primjer, ili pokrećući brisače. Shodno tome, ručica mjenjača jeste ono što predstavlja dobro definisan (u stvari, i jedini) način pristupa mjenjaču. Štaviše, ono što se događa unutar mjenjača ne utiče na objekte izvan njega. Na primjer, mjenjanje brzina ne utiče na glavna svjetla automobila! Pošto je automatski mjenjač kapsuliran, desetine proizvođača automobila ih ugrađuju onako kako im odgovara. Međutim, sa gledišta vozača, svi oni rade jednako. Ista ideja može da se primeni i na programiranje. Moć kapsuliranog objekta ogleda se u tome što svako zna kako može da mu pristupi i stoga ga može koristiti bez obzira na princip rada - i bez bojazni od neočekivanih sporednih efekata.

Osnova kapsuliranja kod Jave jeste klasa. Klasa (engl. class) definiše strukturu i ponašanje (podatke i naredbe) zajedničke za skup objekata. Svaki objekat određene klase ima strukturu i ponašanje definisane klasom, baš kao da predstavlja repliku klase. Zbog ovoga se objekti ponekad nazivaju primjercima ili instancama klase. Na taj način klasa predstavlja logičku konstrukciju; objekat predstavlja fizičku realnost.

Kada pravite klasu, definišete kôd i podatke koji je čine. Ovi elementi se jednim imenom nazivaju članovima klase (engl. class members). Podaci definisani klasom posebno se nazivaju članovi promenljive (engl. member variables) ili promenljive instanci (engl. instance variables). Procedure koje rade sa tim podacima nazivaju se članovi metode (engl. member methods) ili, jednostavno, metode (engl. methods). (Ako poznajete C ili C++, dobro je da znate da ono što Java programer naziva metodom, C/C++ programer naziva funkcijom.) U ispravno napisanom Java programu metode definišu način korišćenja promenljivih. To znači da su ponašanje i način pristupa klasi definisani metodama koje rade sa podacima instance.

Pošto je svrha klase da kapsulira složenost, postoje mehanizmi za skrivanje složenosti načina rada unutar klase. Svaka metoda ili promenljiva unutar klase može da bude privatna ili javna. Javni (engl. public) deo klase predstavlja sve što spoljni korisnici klase treba ili mogu da znaju. Privatnim (engl. private) metodama i podacima može da pristupi samo kôd klase. Kôd izvan te klase ne može da pristupi privatnoj metodi ili promjenljivoj. Pošto privatne članove klase drugi članovi vašeg programa mogu da dosegnu samo preko javnih metoda klase, na taj način se obezbjeđujete od neodgovarajućih akcija. Naravno, ovo znači da javni deo treba da bude pažljivo oblikovan kako ne bi previše otkrivao zbivanja unutar klase.