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

Pod polimorfizmom (polymorphism) u objektno-orijentisanom programiranju podrazumeva se sposobnost programa da se prilagođava tipu podataka koji se upravo obrađuju. Na primer, ako se obrađuje skup geometrijskih figura i treba izračunavati površine tih figura. Površina različitih vrsta figura, kao što su krugovi, pravougaonici i trouglovi, računa se na različite načine, pomoću različitih formula. Polimorfizam obezbeđuje da u programu ne treba za svaku pojedinačnu figuru ispitivati kojoj vrsti pripada i primeniti odgovarajuću formulu. Dovoljno je zatražiti da se izračuna površina date figure, a prepoznavanje vrste figure i primena odgovarajuće formule dešavaju se automatski.

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.



Last modified: Wednesday, 2 September 2020, 10:41 AM