Encapsulation vs Apstraction
Enkapsulacija i apstrakcija su dva različita, ali srodna koncepta koja se nalaze u OOP (Objektno orijentiranom programiranju) jezicima. Enkapsulacija je koncept kombinovanja podataka i ponašanja zajedno kao jedan entitet. S druge strane, apstrakcija je proces predstavljanja kako se entitet ponaša\izgleda nasuprot tome kako se implementira.
Šta je inkapsulacija?
Encapsulacija je proces umotavanja podataka i operacija koje rade na njima u jedan entitet. To u suštini znači da za pristup podacima treba koristiti određene unaprijed definirane metode. Drugim riječima, inkapsulirani podaci nisu direktno dostupni. Time se osigurava očuvanje integriteta podataka jer korisnik nije u mogućnosti izravno pristupiti podacima i modificirati ih kako želi. Korisnici će dobiti ili postaviti vrijednosti podataka samo putem metoda koje su javno dostupne korisnicima. Ove metode obično pružaju provjeru valjanosti podataka tako da je dozvoljeno umetanje samo podataka u odgovarajućem formatu u polja. Stoga su prednosti inkapsulacije trostruke. Kroz Enkapsulaciju, programer može napraviti polja klase samo za čitanje ili samo za pisanje. Drugo, klasa može imati potpunu kontrolu nad onim što je pohranjeno u njenim poljima. Konačno, korisnici klase ne moraju da brinu kako se njeni podaci pohranjuju. U Javi, programer može proglasiti sve varijable instance privatnim i obezbijediti metode get i set (koje su javne) za pristup i modificiranje privatnih polja.
Šta je apstrakcija?
Apstrakcija je proces odvajanja detalja prezentacije od detalja implementacije. Ovo je učinjeno kako bi se programer oslobodio složenijih detalja implementacije. Umjesto toga, programer se može fokusirati na prezentaciju ili detalje ponašanja entiteta. Jednostavno rečeno, apstrakcija se fokusira na to kako se određeni entitet može koristiti, a ne kako se implementira. Apstrakcija u suštini skriva detalje implementacije, tako da čak i ako se metodologija implementacije promeni tokom vremena, programer ne bi morao da brine kako će to uticati na njegov program. Sistem se može apstrahovati u nekoliko slojeva ili nivoa. Na primjer, slojevi apstrakcije niskog nivoa će otkriti detalje o hardveru, dok će apstrakcija visokog nivoa otkriti samo poslovnu logiku entiteta. Termin apstrakcija može se koristiti za označavanje i entiteta i procesa i to dovodi do određene zabune. Kao proces, apstrakcija znači izdvajanje bitnih detalja uz ignorisanje nebitnih detalja stavke ili grupe stavki, dok kao entitet, apstrakcija znači model ili pogled na entitet sa samo bitnim detaljima. U Javi, programer može koristiti ključnu riječ abstract da deklarira klasu kao apstraktni entitet, koji predstavlja suštinske definišne karakteristike entiteta iz stvarnog svijeta.
Koja je razlika između inkapsulacije i apstrakcije?
Iako su inkapsulacija i apstrakcija veoma povezani koncepti koji se nalaze u objektno orijentisanim programskim jezicima, oni imaju ključne razlike. Apstrakcija je tehnika koja nam pomaže da identifikujemo šta bi trebalo biti vidljivo, a šta sakriveno. Enkapsulacija je tehnika pakovanja informacija tako da čini vidljivim ono što bi trebalo biti vidljivo i skriva ono što bi trebalo biti skriveno. Drugim riječima, inkapsulacija se može identificirati kao jedan korak izvan apstrakcije. Dok apstrakcija svodi objekt iz stvarnog svijeta na njegove osnovne karakteristike, enkapsulacija proširuje ovu ideju modeliranjem i povezivanjem ove funkcionalnosti tog entiteta.