Objektno-orijentisano programiranje – razlika između verzija

Uklonjeni sadržaj Dodani sadržaj
Nema sažetka izmjene
Red 1:
'''Objektno orijentisano programiranje''' (OOP) u [[Računarstvo i informatika|računarstvu]] je jedna od [[Programska paradigma|programskih paradigmi]]. Od ranih [[1980|1980-tihih]] pa do danas ova paradigma je postala najuticajnija paradigma u komercijalnom razvoju [[softver]]a. [[Programski jezik|Programski jezici]] poput [[C++]] i [[Java (programski jezik)|Java programski jezik]] su svojom popularnošću utvrdili vodeći status OOP-a kao ''de facto'' obaveznog pristupa pri razvoju softvera danas, te i jezici koji tradicionalno nisu bili objektno orijentiraniorijentisani su naknadno dodali OOP koncepte (npr. [[Visual Basic]], [[Pascal programski jezik]] itd.).
 
== Osnovni principi ==
* '''[[Klasa (računari)|Klasa]]''' ([[Engleski jezik|enengl.]] ''class'') sadrži opis (definiciju) ''nečega'', npr. ''klasa Osoba''. Ovaj opis sadrži informaciju (npr. ime, godište, spol) i ponašanje, ili funkcionalnost (npr. [[metoda]] umri()). Ona je osnovica modularnosti i strukture objektno-orijentisanog programa. Kao takva treba biti poznata osobama koje nisu programeri, ali su upoznati sa okvirom problema koji treba riješiti [[kompjuterski program|računarskim programom]] i [[izvorni kod]] klase treba (po mogućnosti) biti cijelovitcjelovit i nezavisan (''opisati coupling''). Samo sa takvom modularnošću klasa je u stanju da odgovara aspektu problema koji program treba da riješi i istovremeno pojednostavi odnos (mapiranje) između problema i programa.
* '''[[Objekat (računari)|Objekat]]''' ([[Engleski jezik|enengl.]] ''object'') ili instanca je jedinica klase, koji postoji sa određenom informacijom (tzv. '''stanje''' ili [[Engleski jezik|enengl.]] ''[http://en.wikipedia.org/wiki/State_(computer_science) state]''), npr. <code>Mujo</code> instanca <code>Osobe</code> je ''runtime'' reprezentacija Osobe u programskom prostoru. Svaki objekat ima samo svoju informaciju (stanje) koje može biti dijeljeno između više instanci, što se u računarstvu zove ''[[reentrant]]''. Tako npr. naš Mujo objekat bi imao
:* <code>ime::"Mujo Tokić"</code>
:* <code>spol::"Muški"</code>
:* <code>godiste::"1962"</code>.
* '''[[Zatvorenost]]''' ([[Engleski jezik|enengl.]] ''encapsulation'') je koncept po kojem je informacija u klasi zaštićena od direktnog pristupa i jedini način da se promjeni informacija je kroz utemeljene metode. Tako npr. ako napravimo metodu <code>ideNaPosao()</code>, kojom Mujo ide na posao biciklom, onda kad on kupi auto i ide autom na posao, ta promjena je skrivena unutar metode koja samo prikaže rezultat (tj. da je na putu na posao a ne čime ide).
* '''[[Nasljedstvo (računari)|Nasljedstvo]]''' ([[Engleski jezik|enengl.]] ''inheritance'') je koncept po kojem se može definisati klasna hijerarhija, tj. obiteljska loza klase gdje jedna klasa može da proširi (''extend'') drugu klasu. Tako u našem primjeru možemo definisati klasu ''Muškarac'' koja proširuje klasu ''Osoba'' i definiše novu metodu <code>preselioNaAhiret()</code>, te klasu ''Ženu'' koja također proširuje klasu ''Osoba'' ali ima metodu <code>preselilaNaAhiret()</code>. I ''Muškarac'' i ''Žena'' nasljeđuju činjenike ime, spol i godište, te metodu, tj. ponašanje umri() (i muškarci i žene umiru) ali se samo objekat muškarca <code>preselioNaAhiret()</code> dok se žena <code>preselilaNaAhiret()</code>.
* '''[[Kompjuterska apstrakcija|Apstrakcija]]''' ([[Engleski jezik|enengl.]] ''abstraction'') je pojednostavljivanje karakteristika objekta, gdje se zanemaruju detalji i uzimaju se samo zajedničke karakteristike klase. Npr. Mujo Tokić je ćelav ali ta karakteristika nije opisana ni u klasi ''Osoba'' ni u klasi ''Muškarac''.
* '''[[Polimorfizam]]''' ([[Engleski jezik|enengl.]] ''polymorphism'') jejeste karakteristika klase čije ponašanje se mijenja ovisno o implementaciji. Tako u našem primjeru, metoda <code>sahrana()</code> može biti implementirana kao ''ukopavanje'', ''kremiranje'' ili ''mumifikacija''.
 
U bitiUbiti, klasa je poput arhitektonskog nacrta zgrade, po kojoj graditelj ([[kompajler]] i [[linker]]), tj. izvođač radova (''runtime'') je u stanju da izgradi objekat te zgrade.
 
== TakođerVidi pogledajtetakođe ==
* [[Računarska dizajn šema]]
== Razvoj objektno orjentisanihorijentisanih programskih jezika ==
Algol
Fortran LISP
Red 59:
 
 
NajbóljiNajbolji način za razumijevanje šta je to objektno orjentisanoorijentisano programiranje je da se razumiju razlike između strukturalnog i objektno orijentisanog programiranja. A teTe razlike se fundamentalne.
 
# Strukturalno programiranje:
o Zadaci se uvijek u manje razvojene korake razgradjujurazgrađuju
o Top-Down izrada
o Podaci u poredjupoređu sa funkcijama igraju podredjenupodređenu ulogu
*/
# Objektno orijentisani razvoj:
Red 71:
+Objekat je manje ili vise apstraktan element u oblasti primjene
+Objekti i tipovi objekata (klase) predstavljaju podatke, koji imaju sopstvene funkcije,
i samo od tih sopstvenih funkcija smiju biti obradjivaneobrađivane
o Objekti su uustvari stvari struktirastruktura podataka, kojekoji imaju jedan poseban odnos, koji je u metodama utvrdjenutvrđen
 
# Dan Ingals (smalltalk veteran):
 
Ključna razlika između klasičniogklasičnog proceduralnog programiranja i objektno orjentisanogorijentisanog programiranja je nepostojanje jasne podele na podatke i funkcije/operacije koje se treba nad podacima izvršiti.
 
Naime, u objektno orjentisanomorijentisanom programiranju - polazi se od toga da se za bilo kakvu operaciju koristi podatak a da se nad svakim podatkom može izvršiti određeni niz operacija/radnji koje za taj podatak imaju smisla - stoga se umestoumjesto razdvajanja na podatke i funkcije koje procesiraju podatke na određene načine, podacima direktno definišu metodi za operisanje nad njima samima.
 
umjesto:
umesto:
 
podatak A (broj)
Red 87:
koja izvrši smanjivanje vrednosti brojcanog podatka A za jedan
 
koristi se:
koristimo:
 
podatak A (broj)