Objektno orijentisano programiranje

Izvor: Wikipedia

Objektno orijentisano programiranje (OOP) u računarstvu je jedna od programskih paradigmi. Od ranih 1980-tih pa do danas ova paradigma je postala najuticajnija paradigma u komercijalnom razvoju softvera. Programski jezici poput C++ i 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 orijentirani su naknadno dodali OOP koncepte (npr. Visual Basic, Pascal programski jezik itd.).

Osnovni principi[uredi - уреди]

  • Klasa (en. 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 računarskim programom i izvorni kod klase treba (po mogućnosti) biti cijelovit 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 (en. object) ili instanca je jedinica klase, koji postoji sa određenom informacijom (tzv. stanje ili en. state), npr. Mujo instanca Osobe 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
  • ime::"Mujo Tokić"
  • spol::"Muški"
  • godiste::"1962".
  • Zatvorenost (en. 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 ideNaPosao(), 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 (en. 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 preselioNaAhiret(), te klasu Ženu koja također proširuje klasu Osoba ali ima metodu preselilaNaAhiret(). 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 preselioNaAhiret() dok se žena preselilaNaAhiret().
  • Apstrakcija (en. 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 (en. polymorphism) je karakteristika klase čije ponašanje se mijenja ovisno o implementaciji. Tako u našem primjeru, metoda sahrana() može biti implementirana kao ukopavanje, kremiranje ili mumifikacija.

U biti 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đer pogledajte[uredi - уреди]

Razvoj objektno orjentisanih programskih jezika[uredi - уреди]

Algol Fortran LISP


1960

PL/1 Simula Smalltalk-72 Cobol


1970

Prolog Smalltalk-76 Smalltalk-74 Smalltalk-78 Smalltalk-80 Loops Pascal C


1980

Eiffel Ada C++ ObjectPascal Objective C CLOS


1990

Ada 9 Delphi Java ObjectCobol


2000

C#

Najbólji način za razumijevanje šta je to objektno orjentisano programiranje je da se razumiju razlike između strukturalnog i objektno orijentisanog programiranja. A te razlike se fundamentalne.

  1. Strukturalno programiranje:
 o Zadaci se uvijek u manje razvojene korake razgradjuju
 o Top-Down izrada
 o Podaci u poredju sa funkcijama igraju podredjenu ulogu
  1. Objektno orijentisani razvoj:
 o Fundament grade objekti a ne funkcije i procedure
        +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 obradjivane
 o Objekti su u stvari struktira podataka, koje imaju jedan poseban odnos, koji je u metodama utvrdjen
  1. Dan Ingals (smalltalk veteran):

Ključna razlika između klasičniog proceduralnog programiranja i objektno orjentisanog programiranja je nepostojanje jasne podele na podatke i funkcije/operacije koje treba nad podacima izvršiti.

Naime, u objektno orjentisanom 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 umesto razdvajanja na podatke i funkcije koje procesiraju podatke na određene načine, podacima direktno definišu metodi za operisanje nad njima samima.

umesto:

podatak A (broj) funkcija smanji_za_jedan(broj) pa se obrada vrsi zvanjem fukcije smanji_za_broj(A) koja izvrši smanjivanje vrednosti brojcanog podatka A za jedan

koristimo:

podatak A (broj) metod podatka A poznaje metod smanji_za_jedan odnosno - da bi smanjili A za jedan jednostavno mu kazemo A.smanji_za_jedan