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  ili ). U objektno orijentiranom programiranju, računarski programi su dizajnirani iz objekata koji međusobno djeluju jedan s drugim., section 1.6 "Object-Oriented Programming" 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 
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.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, , p.278.  Lists: Dynamic dispatch, abstraction, subtype polymorphism, and inheritance.Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, , p. 470.  Lists encapsulation, inheritance, and dynamic dispatch., 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")

 Osobine dijeljene sa jezicima koji nisu OOP 

 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
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". 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.

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 
 Računarska dizajn šema

 Reference 

Kategorija:Objektno orijentirano programiranje
Kategorija:Programske paradigme
Kategorija:Norveški izumi