Apstrakcija, enkapsulacija, nasleđivanje, polimorfizam
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.
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.
Nasleđivanje
Već je rečeno da klase predstavljaju grupe srodnih objekata. Objekti unutar klase često mogu da se grupišu, prema nekim detaljnijim osobinama, u specifičnije klase. Specifičnija klasa naziva se podklasa (subclass) opštije nadklase (superclass).
Pošto potklasa, osim svojih specifičnih osobina, poseduje sve osobine svoje nadklase, kaže se da potklasa nasleđuje (inherits) svoju nadklasu.U
objektno-orijentisanom programiranju nasleđivanje znači da u
potklasi postoje sva polja i metode natklase, kao i neka dodatna
polja i metode specifične za podklasu. Dodatna polja obezbeđuju
dodatna moguća stanja, a metode dodatna moguća ponašanja objekata
potklase u odnosu na objekte natklase.
Na primer,
geometrijske figure mogu da budu određenih boja. Krugovi, kao
geometrijske figure, dodatno su okarakterisani svojim poluprečnicima,
a pravougaonici dužinama stranica. Svaki krug, kao objekat klase
krugova, ima svoju boju i dužinu poluprečnika. Slično tome, svaki
pravougaonik, kao objekat klase pravougaonika, ima svoju boju i
dužine dve stranice.
Nasleđivanje tj. izvođenje predstavlja mogućnost da se jedna klasa definiše na osnovu neke druge klase pri čemu će ta nova klasa da ima sve osobine koje ima i postojeća klasa, neke osobine će biti promenjene a neke nove će biti dodate. Klasa na osnovu koje kreiramo novu klasu zove se osnovna (base), a klasa koju kreiramo se zove izvedena klasa (derived).
Nasleđenoj klasi se, naravno, mogu dodati novi članovi. Nasleđivanje ne podrazumeva da će nasleđena klasa imati pristup svim članovima bazne klase. Članovi bazne klase koji u svojoj deklaraciji imaju ključnu reč private, iako su nasleđeni, dostupni su samo članovima bazne klase! Samo članovi koji u svojoj deklaraciji imaju ključnu reč protected u baznoj klasi, dostupni su članovima bazne i direktno i indirektno članovima nasleđene klase. Za članove bazne klase kod kojih nije navedeno da li su private, public, ili protected podrazumeva se da su private.
Polimorfizam
Polimorfizam u prevodu znači "mnogo oblika". Na primer: ista metoda može da deluje
različito, u zavisnosti od tipa ili broja parametara koji joj se
prosleđuju. Polimorfizam se zasniva na ideji da
metoda koja je deklarisana u osnovnoj klasi može da se implementira na
više različitih načina u različitim izvedenim klasama
Drugačije rečeno, pri obradi geometrijskih figura treba da postoji klasa figura u kojoj je predviđeno izračunavanje površine figure. Za svaku konkretnu vrstu figura treba da postoji potklasa, a u njoj metoda za izračunavanje površine te vrste figura prema odgovarajućoj formuli a na osnovu dimenzija koje su polja klase. Kada se zatraži izračunavanje površine neke figure koristiće se metoda iz potklase kojoj ta figura pripada.
Ponovno korišćenje koda
Radi što efikasnijeg programiranja poželjno je da se jednom napisani programski delovi mogu iskoristiti više puta, i to bez ponovnog pisanja.
U klasičnom, proceduralnom programiranju, to se svodi na upotrebu biblioteka funkcija opšte namene u više programa.
Taj vid ponovnog korišćenja koda postoji i u objektno-orijentisanom programiranju, pri čemu se tu prave biblioteke klasa opšte namene.
Nasleđivanje predstavlja drugi vid ponovnog korišćenja koda. Metode napisane u natklasi nasleđuju se u potklasama, pa ih ne treba ponovo pisati. U potklasama je potrebno napisati samo metode koje obezbeđuju dodatne funkcionalnosti u odnosu na natklasu.