Objektno orijentirano programiranje

Objektno orijentirano programiranje (OOP) jeste programska paradigma zasnovana na konceptu "objekata", koji mogu sadržavati podatke i kod: podaci u obliku polja (često poznati kao atributi ili svojstva), i koda, u formi procedura (često poznatih kao metoda).

Osobina objekata je da vlastite procedure objekta mogu pristupiti i često mijenjati svoja polja podataka (objekti imaju pojam this ili self). U objektno orijentiranom programiranju, računarski programi su dizajnirani iz objekata koji međusobno djeluju jedan s drugim.[1][2] Programski jeziki OOP-a su različiti, ali najpopularniji među njima su oni zasnovani na klasama, što znači da su objekti instance klasa, što također određuje njihove tipove.

Veći dio najpoznatijih programskih jezika (kao što su C++, Java, Python, itd.) su višestruke paradigme te podržavaju objektno orijentirano progrmairanje u većem ili manjem stepenu, obično u kombinaciji sa imperativnim i/ili proceduralnim programiranje. Značajni objektno orijentirani jezici su među ostalim: (redoslijed prema TIOBE indeksu) Java, C++, C#, Python, R, PHP, Visual Basic.NET, JavaScript, Ruby, Perl, Object Pascal, Objective-C, Dart, Swift, Scala, Kotlin, Common Lisp, MATLAB i Smalltalk.

Osobine uredi

Objektno orijentirano programiranje koristi objekte, ali nisu sve povezane tehnike i strukture podržane direktno u jezicima koji tvrde da podržavaju OOP. Značajke navedene u nastavku uobičajene su među jezicima koji se smatraju da su snažno klasno i objektno orijentirani (ili višestruke paradigme sa podrškom za OOP), sa značajnim izuzecima pobrojanim.[3][4][5][6]

Osobine dijeljene sa jezicima koji nisu OOP uredi

  • Varijable koje mogu pohraniti informacije formatirane u malom broju ugrašenih tipova podataka kao što su cijeli brojevi i alfanumerički simboli. Ovo može uključivati podatkovne strutkure poput stringova, listi i hash tabela koje su ili ugrašene ili rezultat kombinacije varijabli korištenjem memorijskih pokazivača.
  • Procedure – poznate i kao funkcije, metode, rutine ili subrutine – koje uzimaju inpute, generišu outpute te manipuliraju podacima. Savremeni jezici uključuju konstrukte struktuiranog programiranja kao što su petlje i uslovi.

Modularno programiranje podržava omogućavanje grupisanja procedura u datotekama i modulima za organizacijske svrhe. Moduli su imenski prostori tako da identifikatori u jednom modulu neće imati konflikt sa procedurom ili variablom koja dijeli isto ime u drugoj datoteci ili modulu.

Objekti i klase uredi

Jezici koji podržavaju objektno orijentirano programiranje (OOP) obično podržavaju nasljeđivanje za ponovnu upotrebu i proširivost koda u obliku klase ili prototipova. Oni koji koriste klase podržavaju dva glavna koncepta:

  • Klase – definicije formata podataka i dostupne procedure za datu vrstu ili klasu objekta; mogu sadržavati i same podatke i postupke (poznate kao metode klasa), tj. klase sadrže članove podataka i funkcije članova
  • Objekti – instance klasa

Objects sometimes correspond to things found in the real world. For example, a graphics program may have objects such as "circle", "square", "menu". An online shopping system might have objects such as "shopping cart", "customer", and "product".[7] Sometimes objects represent more abstract entities, like an object that represents an open file, or an object that provides the service of translating measurements from U.S. customary to metric.

Objektno orijentirano programiranje nije više od klasa i objekata; to je čitava programska paradigma zasnovana na 'objektima' (strukture podataka) koji sadrže polja podataka i metode. Bitno je to razumjeti; korištenje klasa za organiziranje gomile nepovezanih metoda zajedno nije objektna orijentacija.

Junade Ali, Mastering PHP Design Patterns[8]

Za svaki objekt se kaže da je instanca određene klase (naprimjer, objekt čiji je naziv postavljen "Amar" može biti instanca klase Zaposlenik). Postupci u objektno orijentiranom programiranju poznati su kao metode; varijable su poznate i kao polja, članovi, atributi ili svojstva. To dovodi do sljedećih izraza:

  • Klasa varijable - pripadaju klasi kao cjelini ; postoji samo jedna kopija svake
  • Varijabla instance ili atributi - podaci koji pripadaju pojedinačnim objektima ; svaki objekt ima svoju kopiju svakog
  • Varijabla člana - odnosi se i na varijablu klase i instance koje su definirane određenom klasom
  • Metode klase - pripadaju klasi kao cjelini i imaju pristup samo varijablama klase i ulazima iz poziva procedure
  • Metode instance - pripadaju pojedinačnim objektima i imaju pristup varijablama instance za određeni objekt na koji se pozivaju, ulazima i varijablama klase

Objektima se pristupa nekako poput varijabli sa složenom unutrašnjom strukturom, a u mnogim su jezicima učinkovito pokazivači], služeći kao stvarne reference na jednu instancu spomenutog objekta u memoriji unutar hrpe ili stoga. Oni pružaju sloj apstrakcija koji se može koristiti za odvajanje unutarnjeg od vanjskog koda. Vanjski kôd može koristiti objekt pozivanjem određene metode instance s određenim skupom ulaznih parametara, čitanjem varijable instance ili pisanjem u varijablu instance. Objekti se kreiraju pozivanjem posebne vrste metode u klasi poznatoj kao konstruktor. Program može stvoriti mnogo primjeraka iste klase dok se izvodi, a koji djeluju nezavisno. Ovo je jednostavan način da se isti postupci koriste na različitim skupovima podataka.

Objektno orijentirano programiranje koje koristi klase ponekad se naziva klasno programiranje, dok prototipno programiranje obično ne koristi klase. Kao rezultat toga, značajno različita, ali analogna terminologija koristi se za definisanje pojmova objekt i instanca.

U nekim se jezicima klase i objekti mogu sastaviti koristeći druge koncepte poput osobina i mixina.

Također pogledajte uredi

Reference uredi

  1. ^ Kindler, E.; Krivy, I. (2011). "Object-Oriented Simulation of systems with sophisticated control". International Journal of General Systems: 313–343. journal zahtijeva |journal= (pomoć)
  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, p.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, p. 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-0-8053-0608-8. 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.Šablon:Sonderholliday
  8. ^ Ali, Junade (28. 9. 2016). Mastering PHP Design Patterns | PACKT Books (jezik: engleski) (1 izd.). Birmingham, England, UK: Packt Publishing Limited. str. 11. ISBN 978-1-78588-713-0. Pristupljeno 11. 12. 2017.