Apstrakcija i enkapsulacija
Objektno-orijentisano programiranje zasniva se na pet osnovnih principa: apstrakciji, enkapsulaciji (učaurivanju), nasleđivanju, polimorfizmu i ponovnom korišćenju koda.
Apstrakcija
Pod apstrakcijom (abstraction) podrazumeva se zanemarivanje nebitnih
detalja složenih objekata, u zavisnosti od trenutnih potreba.
Apstrakcija je pojednostavljivanje karakteristika
stvarnog objekta, gde se zanemaruju detalji i uzimaju se samo
zajedničke karakteristike klase u zavisnosti od potreba programa.
Prostije rečeno, predstavlja odabir svojstava – polja koja će opisivati
dati objekat. Jedan isti objekat može da se apstrahuje na različite
načine. Na primer, za objekat pravougaonik možemo da navedemo samo polja
širina i visina ako ga u programu koristimo za izračunavanje, ali ako
želimo da ga grafički predstavimo, bitna su nam i polja boja linije,
koordinate tačke, debljina linije…
Drugi primer: da bi se čovek učlanio u biblioteku, od svih njegovih osobina, potrebni su samo lični podaci (ime, adresa, broj lične karte itd.), a pri korišćenju lifta, njegova težina.
U programiranju apstrakcija se ogleda u odabiru parametara pri modelovanju predmeta ili pojmova koji su bitni za planiranu obradu.
Enkapsulacija ili Učaurivanje
Enkapsulacija ( naš prevod: učaurivanje, engleski termin: encapsulation) u objektno-orijentisanom programiranju predstavlja mehanizam kojim se podaci i postupci u klasama štite od nepoželjnih uticaja okoline. - ovo je definicija iz udžbenika, koja NIJE najbolje sročena !
****************
Način kako je to objašnjeno još pre 20 godina:
Enkapsulacija je naziv za to što objekti u sebi sadrže sve resurse koji su potrebni za njihovo funkcionisanje - i metode (funkcije) i podatke. U Objektno orijentisanom programiranju to se izvodi tako što se kreiraju klase. Kod klasa su vidljive javne metode i osobine. Klasa je na neki način kontejner, ili kapsula ili ćelija u kojoj su ugnježdeni (učaureni) svi metodi i atributi i njihove osobine, tj sve što je potrebno da bi se moglo na željeni način delovati na druge klase. U tom smislu, enkapsulacija takođe omogućava da klasa promeni način kako je nešto izvedeno, a da ne dođe do promene u funkcionisanju sistema. Ideja je da enkapsulacija sakriva kako klasa radi svoj posao, a sa druge strane da druge klase mogu da taj posao zatraže.
Ukratko: Enkapsulacija znači da su sve informacije o objektu (svojstva) i procesima nad njim (metodi) sadržani u definiciji objekta.
*******
Na primer, televizor sadrži puno komponenata koje nisu pristupačne korisniku. Kutija uređaja čini zaštitnu površ. Vezu između korisnika i unutrašnjosti čine dugmad za upravljanje i ekran. Preko dugmadi korisnik utiče na rad televizora, a preko ekrana dobija informacije od televizora.
Enkapsulacija ili učaurivanje je koncept po kojem
je informacija u klasi zaštićena od direktnog pristupa i jedini način da
se promeni je kroz definisane metode (na primer prilikom upravljanja
nekim uređajem –TV, veš mašina i dr, mi pozivamo određene funkcije bez
potrebe da znamo kako se i nad kojim podacima one izvršavaju ). Ovakav
koncept programiranja naziva se „crna kutija“- poznat je ulaz i izlaz,
ali ne i proces koji se odvija unutar funkcije. Učaurivanje se ostvaruje
podelom članova klase na javne i privatne. Javni članovi mogu slobodno
da se koriste u bilo kom delu programa (van tela same klase), dok su
privatni dostupni samo u okviru klase u kojoj su definisani. Polja su
najčešće privatna, dok su metode većinom javne. Do privatnih polja moguće je doći samo posredstvom
javnih metoda, koje mogu da obezbede da sve promene stanja (vrednosti
polja) budu u skladu s definicijom klase. Za javna polja ne može da
se sprovede kontrola ispravnog korišćenja, pa njih treba maksimalno
izbegavati.
Učaurivanjem se izbegava dodela neregularnih podataka, jer se ne dodeljuju direktno poljima, već korišćenjem metoda koje imaju ugrađen mehanizam za proveru njihove ispravnosti. Bez obzira na nivo zaštite, u okviru tela klase svi članovi su međusobno dostupni. Kada govorimo o zaštiti, mislimo na pristupanje članovima koje se vrši iz neke druge klase ili okruženja.
Zaštita se vrši pomoću modifikatora pristupa koji se navode pre definicije polja ili metoda. Modifikatori za određivanje prava pristupa članu su:
- public ……. javni pristup bez ograničenja
- private ……..članovima se može pristupiti samo u okviru klase; ne mogu se naslediti
- protected….članovima se može pristupiti u okviru izvorne ili izvedene klase, tj. mogu se nasleđivati.
primer:
public int podatak1;
private bool podatak2;
double podatak3; // …..ako se modifikator izostavi, podrazumevano je private
public void prikaz
{……} // javna metoda (funkcija)
Privatne metode, mada su u manjini u odnosu na javne, mogu da budu korisne. One mogu da obezbede pomoćne radnje za potrebe javnih metoda.
Kao primer može
se uočiti klasa kalendarskih datuma. Za polja su potrebna tri cela
broja koji predstavljaju dan, mesec i godinu. Ako su polja javna ne
može da se obezbedi da se u objektu ne pojavi trojka celih brojeva
koji ne predstavljaju ispravan datum (na primer, 31.02.2013, pri čemu
je svaka komponenta za sebe unutar dozvoljenih granica za datume –
drastičniji je slučaj kada je neka komponenta izvan dozvoljenih
granica: 55.23.8034). Ako su polja privatna njihovo menjanje moguće
je samo pomoću javnih metoda. One mogu da proveravaju da li su
željene nove vrednosti ispravne i da odbiju promenu stanja objekta
ako nisu.
Upoređivanje između apstrakcije i enkapsulacije:
|
|
Apstrakcija |
Enkapsulacija - učaurivanje ili uvijanje |
|
Kratak opis |
Apstrakcija je proces koji izdvaja bitne pojedinosti o stavci ili skupini stavki i zanemaruje nebitne pojedinosti. |
Enkapsulacija je proces koji omotava ili zatvara podatke kao u kapsuli ili ih čini jezgrovitim. |
|
Oni su |
Apstrakcija se odnosi na ideju skrivanja podataka koji nisu potrebni |
Enkapsulacija je grupisanje podataka i funkcionalnosti. |
|
Osnovne funkcije |
U osnovi, apstrakcija se koristi za skrivanje neželjenih podataka i daje relevantne podatke. |
U osnovi, enkapsulacija znači skrivanje koda i podataka u jednu jedinicu kako bi se zaštitili podaci od spoljašnjeg sveta. |
|
Primenom se |
Rešava problem na nivou dizajna. |
Rešava problem na nivou izvedbe. |
|
Korist : |
Pomaže korisniku da se skoncentriše na ono šta objekat radi umesto na to kako radi bilo koju funkciju. |
Pomaže programeru u skrivanju unutrašnjih detalja kako objekat radi nešto. |
|
Informacije su |
Ovde su informacije odvojene od stvarnih podataka. |
Ovdje su informacije zamotane u skrivenom obliku. |
|
izgled: |
Radi se o spoljašnjem izgledu |
Reč je o izvedbi. |
|
Na primer |
Spoljašnji izgled mobilnog telefona, koji ima displej osetljiv na dodir. |
Unutrašnji detalji izvedbe mobilnog telefona, kako je sastavljena elektronika unutra. |