Objektno orijentisano programiranje
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, apstrakcija, 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:
- identifikovanje problema
- identifikovanje objekata koji su potrebni za njegovo rešenje
- identifikovanje poruka koje će objekti međusobno slati i primati
- 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]- Promenljive koje mogu da skladište informacije su formatirane u malom broju ugrađenih tipova podataka poput celih brojeva i alfanumeričkih znakova. Ovo može obuhvatati strukture podataka poput niski, listi i heš tabela, koje su bilo ugrađene ili su rezultat kombinovanja promenljivih pomoću memorijskih pokazivača.
- Procedure – takođe poznate kao funkcije, metode, rutine, ili podrutine – koje uzimaju ulaz, generišu izlaz i manipulišu podatke. Savremeni jezici uključuju strukturirane programske konstrukcije poput petlji i uslova.
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]- Sve je objekat
- Program je skup objekata koji zadaju poslove jedan drugom preko slanja poruka
- Svaki objekat poseduje sopstvenu memoriju
- Svaki objekat pripada sopstvenoj klasi
- Svi objekti iste klase mogu primati iste poruke
Temelji objektno orijentisanog programiranja
[uredi | uredi izvor]- Apstrakcija i skrivanje informacija
- Enkapsulacija
- Modularnost
- Polimorfizam
- 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]- ^ Kindler, E.; Krivy, I. (2011). „Object-Oriented Simulation of systems with sophisticated control”. International Journal of General Systems: 313—343.
- ^ 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"
- ^ 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.
- ^ John C. Mitchell, Concepts in programming languages. Cambridge University Press. 2003. str. 278. ISBN 0-521-78098-5.. Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.
- ^ Michael Lee Scott (2006). Programming language pragmatics. Morgan Kaufmann. str. 470. ISBN 0-12-633951-1.. Edition 2, Morgan Kaufmann. . Lists encapsulation, inheritance, and dynamic dispatch.
- ^ 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")
- ^ 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.”
- ^ 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. Arhivirano iz originala 01. 06. 2020. g. Pristupljeno 11. 12. 2017.
Literatura
[uredi | uredi izvor]- Abadi, Martin; Cardelli, Luca (1998). A Theory of Objects. Springer Verlag. ISBN 978-0-387-94775-4.
- Abelson, Harold; Gerald Jay Sussman (1997). Structure and Interpretation of Computer Programs. MIT Press. ISBN 978-0-262-01153-2. Arhivirano iz originala 26. 12. 2017. g. Pristupljeno 01. 01. 2017.
- Armstrong, Deborah J. (2006). „The Quarks of Object-Oriented Development”. Communications of the ACM. 49 (2): 123—128. ISSN 0001-0782. doi:10.1145/1113034.1113040. Pristupljeno 8. 8. 2006.
- Booch, Grady (1997). Object-Oriented Analysis and Design with Applications. Addison-Wesley. ISBN 978-0-8053-5340-2.
- Eeles, Peter; Sims, Oliver (1998). Building Business Objects. John Wiley & Sons. ISBN 978-0-471-19176-6.
- Gamma, Erich; Richard Helm; Ralph Johnson; John Vlissides (1995). Design Patterns: Elements of Reusable Object Oriented Software. Addison-Wesley. ISBN 978-0-201-63361-0.
- Harmon, Paul; William Morrissey (1996). The Object Technology Casebook – Lessons from Award-Winning Business Applications. John Wiley & Sons. ISBN 978-0-471-14717-6.
- Jacobson, Ivar (1992). Object-Oriented Software Engineering: A Use Case-Driven Approach. Addison-Wesley. ISBN 978-0-201-54435-0.
- Kay, Alan. The Early History of Smalltalk. Arhivirano iz originala 4. 4. 2005. g. Pristupljeno 1. 1. 2017.
- Meyer, Bertrand (1997). Object-Oriented Software Construction. Prentice Hall. ISBN 978-0-13-629155-8.
- Pecinovsky, Rudolf (2013). OOP – Learn Object Oriented Thinking & Programming. Bruckner Publishing. ISBN 978-80-904661-8-0.
- Rumbaugh, James; Blaha, Michael; Premerlani, William; Eddy, Frederick; William Lorensen (1991). Object-Oriented Modeling and Design. Prentice Hall. ISBN 978-0-13-629841-0.
- Schach, Stephen (2006). Object-Oriented and Classical Software Engineering, Seventh Edition. McGraw-Hill. ISBN 978-0-07-319126-3.
- Schreiner, Axel-Tobias (1993). Object oriented programming with ANSI-C. Hanser. ISBN 978-3-446-17426-9. hdl:1850/8544.
- Taylor, David A. (1992). Object-Oriented Information Systems – Planning and Implementation. John Wiley & Sons. ISBN 978-0-471-54364-0.
- Weisfeld, Matt (2009). The Object-Oriented Thought Process, Third Edition. Addison-Wesley. ISBN 978-0-672-33016-2.
- West, David (2004). Object Thinking (Developer Reference). Microsoft Press. ISBN 978-0-7356-1965-4.
Spoljašnje veze
[uredi | uredi izvor]- Object-oriented programming na sajtu Curlie (jezik: engleski)
- Real life and real world example of object oriented programming
- Introduction to Object Oriented Programming Concepts (OOP) and More by L.W.C. Nirosh
- Discussion about the flaws of OOD
- OOP Concepts (Java Tutorials)
- Science or Snake Oil: Empirical Software engineering Thoughts on software and systems engineering, by Ian Sommerville (2011-8-29)