Osnovni principi objektno orijentisanog programiranja
Posmatrajmo nastavni proces u školi. Recimo da u učionici 1 učenik
IVa, Pera, radi zadatak iz matematike po zahtevu profesora Laze, a u učionici 2 profesor Mika predaje svim učenicima odeljenja IVb novu lekciju iz fizike. Sasvim je moguće da sutradan uloge profesora budu promenjene, pa da profesor Mika u IVa ispituje ili predaje novu lekciju iz fizike, a profesor Laza u IVb predaje novu lekciju iz matematike. Već u ovom uprošćenom prikazu nastavnog procesa možemo uočiti osnovne objekte koji učestvuju u njemu (Pera, Mika, Laza, IVa, IVb, matematika, fizika, učionica 1…). Lako se može uočiti da Mika i Laza koordiniraju nastavnim procesom, da upoznaju učenike sa novim gradivom, da vrše proveru znanja učenika, ocenjuju ga. Oni imaju i zajednička svojstva (ime, stručna sprema, predmet koji predaju, godine staža). Samim tim oni pripadaju jednoj od klasa učesnika u nastavnom procesu, klasi Profesor. Na sličan način možemo uočiti i klase Ucenik (Pera), Predmet (matematika, fizika) , Odeljenje (IVa, IVb)… Čovek koristi računar kao pomoćno sredstvo u rešavanju raznih problema. Rešavanje problema iz naše okoline je pravljenje modela te iste okoline. U modeliranju koristimo intelektualne operacije, a pri tome je osnovni alat apstrakcija. Osnovni nivo apstrakcije je uočavanje šablona za objekte sa više zajedničkih osobina. Na osnovu tih šablona gradimo klase kontrolisanim uključivanjem i isključivanjem nekih detalja o objektima, što je još jedan nivo apstrakcije. Posmatranjem svih učenika uočavamo njihova zajednička svojstva. Na primer, za sve učenike u nastavnom procesu je potrebno pratiti ime, prezime, datum roñenja, razred, odeljenje a nisu nam od značaja boja kose, boja očiju i slično. Svojstva od važnosti za proces koji pratimo nazivamo atributima. Takoñe, svim učenicima možemo pridružiti iste „akcije“ koje su značajne za proces: učenik odgovara i dobija ocenu, učenik menja odeljenje... Te akcije u okviru klase nazivamo metodima klase, i njima se opisuje funkcionalnost objekata te klase. Klasa Ucenik je uopštenje (apstrakcija) pojedinačnih učenika. Svaki pojedinačni učenik je primerak (instanca) klase Ucenik, i opisan je skupom vrednosti atributa te klase. Vrednost atributa ime za konkretnog učenika je na primer „Pera”, a vrednost atributa razred je broj 4. „Pera” i broj 4 su pojedinačni podaci. Svaki objekat u objektno orijentisanom programiranju (u daljem tekstu OOP) predstavlja samostalnu, zaokruženu, celinu koju možemo uklapati sa drugim objektima u skladu sa potrebama i tako rešavati složenije probleme. Svaki objekat u OOP ima svoja unutrašnja stanja, kao i skup metoda ili akcija koje može da izvrši. Enkapsulacija, jedan od važnih principa OOP, je postupak objedinjavanja stanja i ponašanja objekta u jednu celinu. Tako organizovane objekte je lakše kontrolisati i onemogućiti neovlašćen pristup. Korisnici sa objektom komuniciraju samo kontrolisano, pomoću javnih metoda i ne mogu neovlašćeno menjati unutrašnja stanja objekta. Samo internim metodima objekta omogućen je pristup tim stanjima. Ovakav pristup omogućava lakše organizovanje tima programera u razvijanju istog projekta. Svaki član tog tima lako može koristiti sve objekte koji su drugi članovi tima razvili, poznavajući samo načine komunikacije sa objektima, bez poznavanja njihove realizacije. Posmatrajmo klasu Dugme(button) na računaru. Na slici koja sledi vidimo tri takva objekta. Kažemo da su oni instanca klase Dugme. Svi oni mogu da prime iste poruke. Na njih se primenjuju isti metodi (npr. dugme je pritisnuto...), imaju istu funkcionalnost. Funkcionalnosti koje imaju dobijene su iz opšte klase Dugme. Nasleñivanje je još jedna važna osobina jezika OOP. Ono je posledica generalizacije kao metoda za modelovanje objekata. Na primer u nastavnom procesu možemo polazeći od klasa Ucenik, Profesor uočavajući njihove zajedničke atribute i metode napraviti novu klasu Osoba. Tu operaciju nazivamo generalizacijom a obrnutu operaciju specijalizacijom. Na primer, kažemo da se klasa Osoba specijalizuje u klasu Ucenik, Profesor. Sve klase koje su dobijene specijalizacijom nasleñuju sve atribute i metode osnovne ili generičke klase. Na primer, metod promeni_adresu osnovne klase Osoba možemo primenjivati na objekte klase Ucenik jer je klasa Ucenik izvedena klasa iz klase Osoba. Isto tako atribut prezime klase Osoba imai svaki od objekata izvedenih klasa Ucenik i Profesor. Izvedene klase osim nasleñenih osobina i funkcionalnosti mogu posedovati i neke specifične koje ih dodatno karakterišu. Na primer, klasu Ucenik opisujemo dodatnim atributima (razred, ocene, ...) i funkcionalnostima (odrediProsek, uciLekciju ...). Koncept nasleñivanja je od velike pomoći programerima. Izmeñu ostalog obezbeñuje redukciju i lakše održavanje koda (zajedničke osobine i funkcionalnosti pišu se samo jednom a njihove eventualne izmene vršimo samo u osnovnoj klasi). U izvedenim klasama možemo predefinisati neke od nasleñenih funkcionalnosti u skladu sa specifičnostima izvedene klase. Na taj način je omogućeno da objekti različitih izvedenih klasa reaguju različito izvršavajući istu funkcionalnost osnovne klase. Osobina da se isti metod osnovne klase izvršava na različite načine, u zavisnosti od toga kojoj izvedenoj klasi objekat koji ga poziva pripada, naziva se polimorfizam. Većina savremenih aplikacija za obradu dokumenata podržava štampanje dokumenata bez obzira što u trenutku pisanja aplikacija programer nema informaciju o vrsti štampača instaliranog na konkretni računar. Programer u kodu koristi objekat klase Printer i poziva njegov metod Print. Način realizacije tog metoda biće odreñen u trenutku izvršavanja programa prilikom izbora konkretnog štampača koji je povezan na računar na kome se izvršava program. Metod Print konkretnog štampača realizovan je u programu koji prilagoñava štampač aktuelnom operativnom sistemu (drajver). Ovako nešto je moguće zahvaljujući nasleñivanju i polimorfizmu jer su svi štampači izvedeni iz osnovne sistemske klase Printer. Koncept OOP podržavaju i novi, savremeni, programski jezici tako da se može pretpostaviti da će osnovni principi OOP opstati i u ovako brzom razvoju informacionih tehnologija. Svakako donekle modifikovani i prilagoñeni novostima ali će ipak opstati.