Objektno-orijentisano programiranje

S Vikipedije, slobodne enciklopedije

Objektno-orijentisano programiranje je paradigma programiranja, koja koristi objekte kao osnovu za projektovanje računarskih programa i različitih aplikacija softvera. Zasniva se na različitim tehnikama, kao što su nasleđivanje, modularnost, polimorfizam i enkapsulacija.[1][2]

Rešavanje problema paradigmom objektno-orijentisanog programiranja, je vrlo slično ljudskom načinu razmišljanja i rešavanju problema. Sastoji se od identifikovanja objekata i postavljanje objekata koji će se koristiti u odgovarajuću sekvencu za rešenje određenog problema. Radi se o dizajnu objekata čija će ponašanja kao jedinica i u njihovoj međusobnoj interakciji, rešiti određeni problem. Interakcija između objekata se sastoji u razmeni poruka, gde određena poruka usmerena prema određenom objektu, pokreće enkapsulirane operacije u tom objektu, čime se rešava deo obično šireg i složenijeg problema. Uopšteno gledano, objektno-orijentisano rešavanje problema se sastoji iz četiri koraka:

  1. identifikovanje problema
  2. identifikovanje objekata koji su potrebni za njegovo rešenje
  3. identifikovanje poruka koje će objekti međusobno slati i primati
  4. kreiranje sekvence poruka objektima, koje će rešavati problem ili probleme.

U paradigmi objektno orijentisanog programiranja, objekti su strukture podataka koje predstavljaju određeno i jasno definisano znanje o spoljašnjem svetu ili stvarnosti. Tipična organizacija je u hijerarhijske klase, gde svaka klasa objekta poseduje informacije o osobinama objekta koje se čuvaju u instancama promenljivih i koje su povezane (konceptom asocijacije) sa svakom instancom u određenoj klasi. Svaki objekat prepoznaje drugi objekat preko njegovog interfejsa. Podaci i logika svakog objekta su skriveni od drugih objekata. Time se omogućava razdvajanje implementacije od ponašanja objekta u interakciji sa drugim objektima.

Osnovne osobine objekata su identitet, stanje i ponašanje. Identitet predstavlja naziv objekta kojim se određeni objekat razlikuje od ostalih. Stanje objekta je deo prošlosti i sadašnjosti koje određuju ponašanje objekta u budućnosti. Ponašanje objekta je određeno operacijama koje se nad objektom mogu izvršiti, a aktiviranje operacije se vrši porukom.

Svaka klasa se sastoji od:

  • podataka - članova
  • objekat - član
  • funkcija članica - metoda

Podatak, član i objekat član su atributi klase, i pomoću njih je opisano stanje objekata. Objekat je model entiteta a atributi su esencijalne osobine entiteta koje ga opisuju. Metode definišu ponašanje objekata.

Svojstva[uredi | uredi izvor]

Objektno-orijentisano programiranje koristi objekte, ali nisu sve pridružene tehnike i strukture direktno podržane na jezicima koji tvrde da podržavaju OOP. Ispod navedene karakteristike uobičajene su među jezicima za koje se smatra da su snažno orijentisani prema klasama i objektima (ili multiparadigmi sa podrškom za OOP), sa pomenutim znatnim izuzecima.[3][4][5][6]

Zajednička svojstva sa prethodničkim ne-OOP jezicima[uredi | uredi izvor]

Modularno programska podrška pruža sposobnost grupisanja procedura u fajlove i module za organizacione svrhe. Moduli su imenski prostori koji su definisani tako da identifikatori u jednom modulu nisu u sukobu sa procedurom ili promenljivom istog imena u drugoj datoteci ili modulu.

Objekti i klase[uredi | uredi izvor]

Jezici koji podržavaju objektno-orijentisano programiranje (OOP) tipično koriste nasleđivanje za ponovnu upotrebu i proširenje koda u obliku klasa ili prototipa. Oni koji koriste klase podržavaju dva glavna koncepta:

  • Klase – definicije formata podataka i dostupnih procedura za datu vrstu ili klasu objekta; mogu takođe da sadrže podatke i procedure (poznate kao metode klase), tj. klase sadrže članove koji su podaci i članove koji su funkcije
  • Objekti – instance klasa

Objekti ponekad korespondiraju stvarima koje postoje u stvarnom svetu. Na primer, grafički program može da ima objekte kao što su „krug”, „kvadrat”, „meni”. Sistem za onlajn kupovinu može da sadrži objekte kao što su „korpa za kupovinu”, „kupac” i „proizvod”.[7] Ponekad objekti predstavljaju apstraktnije entitete, poput objekta koji predstavlja otvorenu datoteku ili objekta koji pruža uslugu konverzije merenja iz SAD jedinca u metričke.

Objektno-orijentisano programiranje je više od samo klasa i objekata; to je čitava paradigma programiranja zasnovana na objektima (strukturama podataka) koji sadrže polja podataka i metoda. Bitno je da se to razume; korišćenje klasa za organizovanje skupa nepovezanih metoda nije objektna orijentacija.

Junade Ali, Mastering PHP Design Patterns[8]

Principi objektno orijentisanog programiranja[uredi | uredi izvor]

  1. Sve je objekat
  2. Program je skup objekata koji zadaju poslove jedan drugom preko slanja poruka
  3. Svaki objekat poseduje sopstvenu memoriju
  4. Svaki objekat pripada sopstvenoj klasi
  5. Svi objekti iste klase mogu primati iste poruke

Temelji objektno orijentisanog programiranja[uredi | uredi izvor]

  1. Apstrakcija i skrivanje informacija
  2. Enkapsulacija
  3. Modularnost
  4. Polimorfizam
  5. Veze između klasa i nasljeđivanje

Apstrakcija je postupak razdvajanja bitnog od nebitnog. U toku ovog postupka neophodno je uočiti koji podaci i veze su bitne za dati domen problema, i one bitne podatke implementirati u klasi. Postoje tri grupe apstrakcije: apstrakcija predmeta, apstrakcija procesa i sintetska apstrakcija (apstrakcija virtuelne mašine).

Skrivanje podataka se definiše na sljedeći način: sve informacije o modulu moraju biti skrivene osim onih koje su eksplicitno deklarisane kao javne. Neposredna realizacija članova klase mora biti nedostupna klijentu.

Enkapsulacija je postupak objedinjavanja stanja i ponašanja u jednu celinu. Krajnji rezultat enkapsulacije je klasa. Drugi zadatak enkapsulacije je obezbeđivanje kontrole pristupa u cilju poštovanja principa skrivanja informacija.

Modularnost se odnosi na postupak razbijanja programa na manje dijelove koji mogu autonomno funkcionisati. Modularnost se primjenjuje kako bi se omogućila višestruka upotreba softverskih komponenti.

Polimorfizam je kontekstno zavisno ponašanje. Programske kategorije koje se mogu polimorfno ponašati su: promjenljive odnosno instance klase, operatori i metode. Polimorfizam se dijeli na univerzalni i ad hok. Univerzalni polimorfizam se dijeli na parametarski i inkluzioni. Ad hok polimorfizam se deli na preklapanje i koercitivni polimorfizam.

Nasljeđivanje predstavlja mogućnost hijerarhijske organizacije klasa. Kada jedna klasa nasledi drugu ona zadržava kompletan sadržaj klase koju nasljeđuje, i taj sadržaj može redefinisati ili proširiti. Postoji nekoliko vrsta nasljeđivanja.

Objektno orijentisani jezici[uredi | uredi izvor]

Prevedeni:

Prevedeni u bajt kod za izvršavanje na virtuelnoj mašini:

Interpretirani:

Reference[uredi | uredi izvor]

  1. ^ Kindler, E.; Krivy, I. (2011). „Object-Oriented Simulation of systems with sophisticated control”. International Journal of General Systems: 313—343. 
  2. ^ Lewis, John; Loftus, William (2008). Java Software Solutions Foundations of Programming Design 6th ed. Pearson Education Inc. ISBN 978-0-321-53205-3. , section 1.6 "Object-Oriented Programming"
  3. ^ Deborah J. Armstrong. The Quarks of Object-Oriented Development. A survey of nearly 40 years of computing literature which identified a number of fundamental concepts found in the large majority of definitions of OOP, in descending order of popularity: Inheritance, Object, Class, Encapsulation, Method, Message Passing, Polymorphism, and Abstraction.
  4. ^ John C. Mitchell, Concepts in programming languages, Cambridge University Press. 2003. ISBN 0-521-78098-5. str. 278.. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.
  5. ^ Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann. 2006. ISBN 0-12-633951-1. str. 470.. Lists encapsulation, inheritance, and dynamic dispatch.
  6. ^ Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. ISBN 978-0-262-16209-8. , section 18.1 "What is Object-Oriented Programming?" Lists: Dynamic dispatch, encapsulation or multi-methods (multiple dispatch), subtype polymorphism, inheritance or delegation, open recursion ("this"/"self")
  7. ^ Booch, Grady (1986). Software Engineering with Ada. Addison Wesley. str. 220. ISBN 978-0805306088. „Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world. 
  8. ^ Ali, Junade (28. 9. 2016). Mastering PHP Design Patterns | PACKT Books (na jeziku: engleski) (1 izd.). Birmingham, England, UK: Packt Publishing Limited. str. 11. ISBN 978-1-78588-713-0. Pristupljeno 11. 12. 2017. 

Literatura[uredi | uredi izvor]

Spoljašnje veze[uredi | uredi izvor]