You are on page 1of 26

4.

Programski jezici za izradu web aplikacije


4.1. PHP
PHP je skriptni jezik razvijen za izradu dinaminih web stranica. Jezik je licenciran pod "Open Source" licencom i time je besplatan za koritenje. Danas najmoniji i najrasprostranjeniji jezik na Internetu, trenutno je instaliran na preko 1 milijun web servera i pogoni preko 20 milijuna internet stranica. Od verzije 5 PHP postaje potpuno objektno orijentiran jezik, za Paman-a koritena je verzija 5.2.1. Trenutno najpopularnija konfiguracija web servera skraeno se zove LAMP i skraenica je za Linux (os), Apache (web server), MySQL (database server), PHP (script language). Postoje i razliite varijacije kao to je npr. WAMP (Windows/Apache/MySQL/PHP). Mnoge od najpopularnijih internet stranica, kao to su Facebook i Wikipedia, su izgraene na LAMP arhitekturi. Glavna razlika izmeu skriptnih jezika, kao to je PHP, i aplikativnih jezika, kao to su npr. Java ili C#, je u tome to se skriptni jezik kompajlira svaki puta kada je aplikacija pozvana, dok se aplikativni jezici kompajliraju samo jednom. Dakle aplikacija napisana u skriptnom jeziku uvijek se nalazi u svojem originalnom, ljudski itljivom, formatu popularno zvanom "Source Code". Dobra stvar kod PHP koda je u tome to unutar jedne datoteke, npr. index.php, moete koristiti vie jezika, npr. esta kombinacija je PHP, HTML i Javascript.

<html> <head> <script type="text/javascript"> function javascript_funkcija(){ alert('Pozdrav iz javaskripte'); } </script> </head> <body> <p>Malo html koda...</p> <?php function php_funkcija(){ echo 'Pozdrav iz PHP-a'; } ?> </body> </html>

Primjer koda 1: Kombinacija PHP/HTML/Javascript koda

Primjer koda 1 prikazuje Javascript kod koji mora biti unutar "<script></script>" oznaka, poetak PHP koda oznaen s "<?php", isto tako se moe koristiti i "<?", a kraj oznaava "?>". Sve izvan gore navedenih oznaka smatra se HTML kodom. PHP spada u takozvanu grupu "Loosely typed" jezika, za razliku od nekih drugih jezika poput Jave koji su "Strict typed". Naime radi se o oznaavanju tipa varijabli ili objekata. U PHP se varijable deklariraju tako da se ispred eljenog naziva varijable stavi znak za dolar "$" i tip varijable se ne definira, dok se kod jezika poput Jave tip se mora deklarirati. Dakle Java programski jezik mora znati o kojem tipu se radi, dok PHP ne mora. Upravo ova prednost omoguava to to se PHP kod kompajlira svaki puta, jer kompajler zna unaprijed kojeg e tipa biti koja varijabla i koliko je memorije potrebno za njezinu alokaciju. Glavna mana je to to kompajliranje traje i time se usporava samo izvravanje aplikacije. No postoje razliite metode kako se to moe ubrzati. 1 TIP OPIS Integer Serija brojeva od N do +N (matematiki skup Z) Float Decimalni brojevi (matematiki skup R) Boolean Poprima TRUE ili FALSE vrijednost String Serija od razliitih znakova slova ili brojeva. Array Dvodimenzionalni skup znakova. Tabela 1: Najei tipovi varijabli u programskim jezicima Tablela 1 prikazuje najee koritene tipove varijabli u programskim jezicima. Izvorni PHP kod razvijen je na bazi C++-a i Perl-a2. Pa je tako od njih i preuzeo logike operatore, prikazane u tabeli 2, i osnovne naredbe od kojih su neke prikazane u tabeli 3.

Vie o metodama i teoriji ubrzavanja kompajliranja PHP koda moete pronai na http://en.wikipedia.org/wiki/PHP_accelerator 2 Vie o C++- u i Perl-u moete pronai na sljedeim stranicama: C++: http://en.wikipedia.org/wiki/C++ Perl: http://en.wikipedia.org/wiki/Perl

OPERATOR $a AND $b

OPIS Operator "i". Ukoliko su $a i $b TRUE rezultat je TRUE. Umjesto rijei "AND" moe se i koristiti "&&". Operator "ili". Ukoliko je jedan od elemenata TRUE, rezultat je TRUE, u protivnom je FALSE. Umjesto rijei "OR" moe se i koristiti "||". Operator "ekskluzivno ili" ukoliko je samo jedan od elemenata TRUE,

$a OR $b

$a XOR $b

rezultat je TRUE. Ukoliko su oba elementa TRUE ili FALSE, rezultat je FALSE Operator "ne". Ukoliko je $a FALSE, rezultat je TRUE i obrnuto.

NOT $a

Umjesto rijei "NOT" moe se i koristiti "!". Tabela 2: Logiki operatori U tabeli 2 namjerno su koriteni termini "TRUE" i "FALSE" za rezultate logikih usporeivanja. To je prvenstveno iz razloga to u programskim jezicima rezultat usporedbe je uvijek tipa "Boolean" koji moe imati samo dvije vrijednosti, "TRUE" ili "FALSE". Ujedno u nekim jezicima vrijedi pravilo "TRUE"=1, "FALSE"=0, pogotovo u jezicima koji su "Loosely typed" jer nema definicija tipova varijabli kao ni rezultata njihovih usporeivanja.

NAZIV

PRIMJER
if ($a > $b) { echo "a je vee od b"; $b = $a; } if ($a > $b) { echo "a je vee od b";

OPIS "if" vri usporedbu izmeu dvije ili vie vrijednosti. Ukoliko je varijabla $a vea od $b na ekranu e se ispisati prikazana poruka. "else" naredba dolazi u paru sa "if" naredbom. Ukoliko je rezultat "if" naredbe FALSE, kod unutar "else" naredbe biti e izvren. "while" naredba e izvravati kod sve dok je zadani uvjet ispunjen. U ovom primjeru na ekranu e ispisati brojeve od 1 do 10. "for" naredba je ustvari petlja koja se sastoji od 3 dijela. Prvi definira poetnu vrijednost petlje, drugi uvjet koji mora biti zadovoljen da se ue u petlju a trei uvjet definira pravilo kako e se mijenjati inicijalna vrijednost.

if

else

} else { echo "a nije vee od b"; } $i = 1; while ($i <= 10) { echo $i++; }

while

for ($i = 1; $i <= 10; $i++) {

for
}

echo $i;

Tabela 3: Primjer nekih od osnovnih naredbi u PHP-u

Osim gore nabrojanih funkcija PHP sadri preko 100 osnovnih i par tisua dodatnih funkcija. Funkcije se pozivaju preko njihovih naziva, a mogue je i pisanje vlastitih funkcija. Primjer definiranja i poziva funkcije prikazano je primjerom koda 2.

<?php /** * Definicija funkcije koja prima dva parametra * * @param Integer $a * @param Integer $b */ function kojiJeVeci($a, $b){ if(intval($a)<1 OR intval($b)<1){ echo 'Niste unjeli brojeve'; die(); } if($a>$b){ echo 'Prvi broj je vei'; }else if ($a<$b){ echo 'Brugi broj je vei'; }else{ echo 'Brojevi su jednaki'; } } #PRIMJER POZIVA FUNKIJE kojiJeVeci(17, 36); kojiJeVeci(77,100); kojiJeVeci(10,10); kojiJeVeci('a', 'b'); ?> // Prvi broj je vei // Drugi broj je vei // Brojevi su jednaki // Niste unijeli brojeve

Primjer koda 2: Definicija i poziv funkcije u PHP-u Primjer koda 2 prikazuje funkciju definiranu s kljunom rijei "function" prije naziva funkcije (u ovom primjeru naziv funkcije je "kojiJeVeci"). Poslije naziva funkcije nalaze se oble zagrade unutar kojih se nalaze parametri. Nakon oblih zagrada, nalaze se vitiaste unutar kojih se nalazi kod funkcije. Primjere poziva navedene funkcije vide se pri kraju primjera koda 3 kao i rezultate poziva koji se nalaze u komentaru ("//") usporedno sa svakim pozivom.

Pravilo je da naziv funkcije mora poeti sa slovom, a smije sadravati slova, brojeve i "_". Nazivi funkcija su osjetljivi na veliinu slova (eng. case sensitive). PHP takoer podrava rekurzivne funkcije, no preporueno je da se rekurzivne funkcije ne koriste ukoliko rekurzivna funkcija ima preko 100 poziva jer usporava rad i moe prekinuti izvravanje aplikacije. Od verzije 3 PHP ima podrku sa stvaranje objekata preko klasa, no tek od verzije 5 dodane su napredne mogunosti za rad sa objektima. U verzijama prije petice objekti su se smatrali primitivnim tipovima. To je bilo loe jer kada se objekt prenosio, kao vrijednost parametra funkcije, ustvari on bi se kopirao i zauzimao dodatnu memoriju. U novom pristupu nije se prenosio objekt, ve samo njegova memorijska lokacija. Ovaj nain prijenosa objekta zove se referenciranje. Sa novom verzijom su se pojavile i nove vrste varijabli i metoda unutar klasa, poput private, protected, kao i vrste objekata, poput final i abstract. Osim toga, uvedeni su i novi standardi i pravila za konstruiranje (eng. construct) i brisanje (eng. destruct) objekata, kao i metode za rad sa iznimkama (eng. exception). Uz to uvedena su i suelja (eng. interface) koja je mogue implementirati (eng. implements) u klase. PHP u svojoj osnovnoj instalaciji dolazi sa velikom knjinicom funkcija i podrkom za razliite alate i sustave, poput knjinica za rad sa razliitim bazama podataka, ija je lista prikazana u tabeli 5, podrkom za Windows API, Unix process managment, ..itd. Uz to PHP ima procedure za rad s alatima za kompresiranje, poput zip-a, gzip-a, i uskoro rar-a. Osim toga, iz PHP-a mogue je i izrada PDF datoteka i Flash sadraja.

PODRANE BAZE PODATAKA U PHP-u

Adabas D InterBase dBase FrontBase Empress mSQL FilePro (read-only) Direct MS-SQL Hyperwave MySQL IBM DB2 ODBC Informix Oracle (OCI7 and OCI8) Ingres Ovrimos Tabela 4: Podrane baze podataka u PHP-u

PostgreSQL SQLite Solid Sybase Velocis Unix dbm

4.1.1. Zend Studio


Svaki programer pie kod u nekom editoru, i vrlo je vano da je taj editor to kvalitetniji jer on direktno utjee na rad programera. Za PHP postoji vie razliitih editora, lista nekih od njih prikazana je u tabeli 6, a jedan od trenutno najboljih editora na tritu je Zend Studio koji se moe vidjeti na slici 9. NAZIV BlueFish Geany Aptana Eclipse PDT Emacs PHPEdit ZendStudio Tabela 5: PHP tekstualni editori3 INFO LINK http://bluefish.openoffice.nl/ http://geany.uvena.de/Main/HomePage http://aptana.com/ http://www.eclipse.org/pdt/ http://www.gnu.org/software/emacs/emacs.html http://www.waterproof.fr/ http://www.zend.com/en/products/studio

Zend Studio je trenutno u verziji 6.0.1. Od verzije 6 ovaj editor je u potpunosti baziran na IBM-ovom Eclipse IDE-u, koji je najmoniji IDE (skraenica od eng. Integrated development environment) dananjice.

Usporedbu navedenih editora i njih jo puno vie moete vidjeti na adresi: http://en.wikipedia.org/wiki/Comparison_of_text_editors

Slika 9: Zend Studio 6.0.1

Neke od naprednih mogunosti koje nudi ovaj editor su: zamotavanje koda, integrirani PHPDoc, Subversion, FTP/SSH/SFTP i debugger. Zamotavanje koda (eng. Code folding) je mogunost editora da smota neku funkciju, klasu ili komentar u jedan red i tako oslobaa radnu povrinu i funkcija ne smeta vie na ekranu. Primjer zamotavanja koda prikazan je na slici 10.

Slika 10: Code Folding Na slici 10 code folding-om uteeno je 17 linija na ekranu. Ovo je vrlo korisno kada se radi sa nekim veim datotekama koje imaju par tisua linija, da bi se izbjeglo puno scollanja miem te je olakana orijentacija unutar koda.

PHPDoc je alat unutar editora koji slui za pisanje komentara i to po tono definiranom standardu i pravilima. Prednost koritenja PHPDoc-a je u tome da, kada programer pie svoju aplikacju, moe u par sekundi generirati datoteku za pomo koja sadri opis kompletnog koda s funkcijama i klasama. Ovo je dobro ako se radi na nekom velikom i dugoronom projektu, jer na ovaj nain lake se pretrauje vlastiti kod kao i ubrzavanje proces upoznavanja novih programera sa kodom. Primjer komentiranja funkcije preko PHPDoc-a prikazan je u primjeru koda 3.
<?php /** * Ovo je neki primjer funkcije i komentiranja preko PHPDoc-a * * @param String $param1 * @param Boolean $param2 * @return Array */ function nekaFunkcija($param1, $param2){ echo 'kod funkcije'; return array(); } ?>

Primjer koda 3: Komentiranje preko PHPDoc-a

Izgled generiranog dokumenta za gore prikazani kod prikazan je na slici 11.

Slika 11: Dokument generiran PHPDoc-om Subversion ili skraeno SVN, je sustav za verzioniranje izvornog koda aplikacije. Ovaj sustav prati promjene nad kodom i pridruuje im verziju. Kod veih projekata kada bi neki programer htio mijenjati izvorni kod aplikacije prvo mora zatraiti doputenje od Subversion-a, koji provjeri da li netko trenutno ve radi kakve promjene na kodu. Ako je kod slobodan, sustav pridaje pristup programeru na izvorni kod, a ako netko trenutno mijenja kod, onda stavi programera na ekanje. Ovim principom Subversion uvijek osigurava samo jednu tekuu verziju izvornog koda.

Slika 12: Organizacija koda preko Subversion-a4 FTP/SSH/SFTP su razliiti naini spajanja na web server preko odreenog protokola. Kod web aplikacija izvorni kod se najee nalazi na web serveru i samo napredniji editori imaju podrku da direktno na serveru mijenjju izvorni kod i to preko gore nabrojanih protokola. Debugger je ustvari interni kompajler u editoru koji daje mogunost testiranja PHP koda bez web servera. Uz pisanje koda, on se svako malo testira, no to se tie PHP-a, to nije preporueni nain rada jer svaki web server ima razliite postavke PHP-a to znai da kod koji radi preko debugger-a moe ne raditi na web serveru. Preporueni nain rada je da se kod direktno pie na web serveru i tamo testira.

Poto je Zend Studio izgraen na Eclipse IDE platformi, on podrava sve ekstenzije koje podrava i Eclipse. Po osnovnim postavkama Zend Studio dolazi s editorom za PHP kod i
4

<http://en.wikipedia.org/wiki/File:Svn_3D-tree.svg>, 21.12.2008.

za HTML kod, no ne i za Javascript kod. Kako bi se dodala podrka za javascript kod Zend Studio preporueno je nadograditi s alatom pod nazivom JSEclipse, kojeg trenutno razvija Adobe.5 Za programere vrlo je vano da se osjeaju ugodno u okruenju i alatu u kojem rade.

Vie informacija o JSEclipse moe pronai na adresi: <http://labs.adobe.com/technologies/jseclipse/>, 21.12.2008.

4.2. Javascript
Javascript je skriptni jezik koji se najvie koristi u izradi Internet stranica. Ovaj jezik je razvijen od strane Netscape-a pod nazivom "Mocha", te je kasnije naziv promijenjen u "LiveScript" i na kraju tek u "Javascript". Kao u veini skriptnih jezika, pa tako i u Javascript-i, tipovi nisu pridrueni varijablama, ve vrijednostima. Na primjer, jedna varijabla na poetku moe biti tipa broj, a kasnije se moe promijeniti u niz znakova (eng. string). Javascript je objektno baziran jezik, za razliku od objektno orijentiranih jezika objektno bazirani jezici ne podravaju polimorfizam i nasljeivanje. Jo jedna zanimljiva stvar kod Javascript-a je u tome to se funkcije mogu spremiti unutar varijable. Isto tako jedna funkcija moe primati drugu kao parametar. Primjer funkcije definirane unutar varijable moe se vidjeti u primjeru koda 4.
var neka_varijabla=function(){ alert('ovo je funkcija unutar varijable'); }

Primjer koda 4: Javascript funkcija Ovaj jezik je baziran na prototipovima to se tie rada sa objektima. Ovaj nain rada funkcionira na principu kloniranja objekata kada se oni nasljeuju, tj. izrauje se prototip naslijeenog objekta. Javascript pri svojem izvoenju se oslanja na svoju okolinu, najee na internet preglednik. Ovaj jezik na internet stranicama komunicira sa DOM-om (eng. Document Object Model). DOM je platformski neovisan standard za prezentiranje strukture HTML ili XML dokumenta.

Slika 13: DOM HTML Struktura6 Poto se Javascript kod moe izvravati u korisnikovom internet pregledniku, a ne preko servera, moe vrlo brzo reagirati na zahtjeve ime se postie bolji osjeaj i brzina koritenja aplikacije. Osim toga javascript ima mogunost detekcije radnji korisnika, koje HTML ne moe. Ovu prednost uvelike iskoritavaju web mail servisi poput Gmail-a i Yahoo Mail-a i to konkretno dajui korisniku da si sam definira i radi kratice (eng. hotkey) i pripadajue dogaaje kojima e bolje i bre koristiti navedene servise. Javascript interpreter izvrava napisani Javascript kod. Prvi Javascript interpreter napisan je od strane Netscape-a pod kodnim imenom SpiderMonkey. Za vrijeme pisanja ovo rada, iz stoera Mozille, najavili su vijest da s verzijom 3.1 njihovog preglednika pod nazivom Firefox, izlazi i novi Javascript intrepreter nazvan TraceMonkey. TraceMonkey bi trebao ubrzati izvravanje Javascript koda i do 37 puta. Na slici 14 prikazana je usporedba brzine izvravanja koda u Firefox-u 3.0 i Firefox-u 3.1 (TraceMonkey).

<http://en.wikipedia.org/wiki/File:JKDOM.SVG>, 21.12.2008.

Slika 14: Usporedni test brzine Firefox-a 3.0 i Firefox-a 3.1 (TraceMonkey / vie je bolje)7

4.2.1 Sigurnost i ogranienja


Poto je Javascript jezik koji se moe izvravati unutar Internet preglednika ili unutar operativnog sistema, postoje veliki rizici od neeljenih napada i virusa. Uitavanjem odreene Internet stranice moe se pokrenuti neeljeni kod koji e se izvriti unutar preglednika, te zatim zahvatiti odreene dijelove operativnog sistema korisnika. Autori Internet preglednika vode velike brige da se to ne dogodi. Oni ograniavaju Javascript kodu domenu izvravanja i to samo na elemente stranice, tj. DOM-a. Jedan od najeih oblika napada koritenjem Javascript jezika je XSS. XSS je kratica koja stoji za preko stranine naredbe (eng. Cross Site Scripting). To je vrsta napada u kojoj napada uspijeva ubaciti u neku zatienu stranicu, npr. Netbanking, Javascript kod koji se kasnije uitava od strane svih posjetitelja te stranice i uzima razliite povjerljive informacije i alje ih nazad napadau.

Jedan od estih problema je i u samim autorima aplikacija. Naime neki autori stavljaju provjere za lozinke ili neke druge stvari u sam Javascript kod, to je loe jer se svaki javascript
7

<http://www.lifehacker.com.au/tips/2008/11/11/why_tracemonkey_is_going_to_blow_your_web_browsing_mi nd-2.html>, 23.12.2008.

kod moe na samoj stranici modificirati i prilagoditi po elji. Dakako za to je potrebno veliko razumijevanje i znanje u Javascript programiranje. Jedan od primjera loe implementacije Javascript koda je na Erste Netbanking servisu. Naime autori ovog servisa koristili su Javascript kod za neke provjere korisnikih akcija za koje nisu trebali. Na primjer, ako korisnik u Internet preglednik ukuca adresu

https://netbanking.erstebank.hr/RB/"

a nije prijaviljen na servis, otvara mu se stranica za

prijavu. Ako korisnik iskljui Javascript na svom pregledniku i ponovo ukuca adresu, tada e se pojaviti unutar servisa i dobiti e izbornik kao da je prijavljen na servis. Dakako niti jedna opcija iz izbornika nee raditi. Ova tzv. "rupa u kodu" otkrivana je u manje od minute. Koliko bi tek rupa bilo otkriveno nakon promatranja navedenog servisa neko due vrijeme, sigurno puno. Ovaj nain rada esto koriste hakeri da bi probili razliite servise i uzeli to vie podataka iz njih. Dakle ukoliko autori koriste razliite tehnologije moraju znati njihove mane jer se one esto mogu iskoristite od strane napadaa i posljedice mogu biti velike. Jedna od glavnih mana Javascript-a je to se izvrava drugaije unutar svakog preglednika i ne postoje sve funkcije u svakom pregledniku. Na primjer varijabla "pageX", ukoliko je preglednik Internet Explorer, e sadravati X koordinatu mia. Ista ova varijabla pak ne postoji u Firefox-u, u njemu se koristiti "clientX" varijabla kako bi dobili X koordinatu mia. Kako bi se programerima olakao rad s Javascript-om, razvijeni su razliiti razvojni okviri koji provjeravaju koji internet preglednik koristi korisnik i time prilagoavaju Javascript kodove kako bi radili isto na svim preglednicima. Popis poznatijih Javascript razvojnih okvira naveden je u tablici 7.

NAZIV script.aculo.us Prototype Moo Tools

INFO LINK http://script.aculo.us/ http://www.prototypejs.org/ http://www.mootools.net/

ExtJS http://extjs.com/ jQuery http://jquery.com/ Dojo http://dojotoolkit.org/ GWT (Google Web Toolkit) http://code.google.com/webtoolkit/ Yahoo! UI http://developer.yahoo.com/yui/ Rico http://openrico.org/rico/home.page Tabela 6: Najpopularniji Javascript razvojni okviri Svaki od ovih razvojnih okvira ima Javascript sintaksu, osim GWT-a i ExtJS-a koji imaju Java sintaksu. Njihova prvenstvena namjena je kompatibilnost i jednostavnost pisanja. U primjeru koda 5 prikazana j usporedba "istog" Javascript koda i koda pisanog koritenjem Prototype razvojnog okvira.
//Dohvaanje HTML objekta //standardni JS kod var htmlObjekt=document.getElementById('naziv objekta'); //prototype kod var htmlObjekt=$('naziv_objekta'); //Sakrivanje HTML objekta htmlObjekt.style.display='none'; //standardni JS kod htmlObjekt.hide(); //prototype kod

Primjer koda 5: Usporedba "istog" Javascript koda i koda pisanog preko Prototype razvojnog okvira Na razvoj tzv. Web 2.0 najvie je utjecalo koritenje Javascript kodova za ubrzavanje i jednostavnije koritenje web aplikacija. Jedna tehnika je praktiki obiljeia nastanak Web-a 2.0, a to je AJAX.

4.2.2. AJAX
AJAX je sinonim za asinkrono koritenje Javascript-a i XML-a (eng "Asynchronous JavaScript And XML"). To nije programski jezik ve tehnika izrade dinaminih i bogatih internet stranica (eng. "Rich Internet Application"). Ovom tehnologijom mogue je prihvaati podatke, asinkrono sa trenutno otvorenom stranicom, s web servera, bez da se bilo to promijeni

na trenutnoj stranici, ili jednostavnije reeno, prihvaanje podataka bez osvjeavanja Internet preglednika. Ovo je mogue koritenjem objekta koji se zove XMLHttpRequest i nalazi se u gotovo svakom Internet pregledniku.

Slika 15: Princip rada AJAX-a

Glavne prednosti koritenja AJAX-a su u tome to je preko AJAX-a mogue jednostavno promijeniti samo jedan element na stranici, bez da se osvjeavaju svi ostali, stare, elementi. Osim toga, omoguena je i puno vea interaktivnost izmeu korisnika i same Internet stranice. Glavni nedostak je to nije mogue staviti bookmark na stranicu, jer se ne mijenja adresa stranice, ve samo sadraj, a bookmark je vezan samo uz adresu. Takoer nije podrana povijest pregledavanja stranice (eng. browsing history). Internet pretraivai, poput Google-a, ne mogu indeksirati, tj. pretraivati, sadraj stranice koji se dobiva preko AJAX-a. Dakle prilikom same izrade Internet aplikacije mora se paziti o prednostima i nedostacima svake od koritenih tehnologija, kao i o njihovim snagama i manama. Tek onda mogue je izgraditi siguran i kvalitetan proizvod.

2. UVOD U OOP
2.1 Programske paradigme
Danas su u programiranju dominantne dvije programske paradigme. Prva od njih i povijesno gledajui najstarija je imperativna (ili proceduralna) paradigma. Druga koja je danas vjerojatno najzastupljenija te koja se najee spominje je objektno orijentirana programska paradigma. Uz dvije gore navedene paradigme poprilino su zastupljene i funkcijska

paradigma, te danas sve popularnija konceptualno orijentirana paradigma (eng. Concept oriented paradigm). Imperativna (tj. proceduralna) programska paradigma je jednostavna program se sastoji od niza deklaracija, naredbi pridruivanja te poziva predefiniranih kao i vlastitih potprograma. Potprogrami omoguuju smisleno strukturiranje programa. Ovo je prirodan i vrlo pristupaan nain programiranja i stoga je razumljivo da je upravo takav pristup koriten u prvim popularnim programskim jezicima poput Fortrana ili C-a. Problem sa ovakvim pristupom programiranju je sve vea kompleksnost dananjih programa: to je program vei - tee ga je odravati. Temelj funkcijskog programiranja te funkcijske programske paradigme lei u izrazima i evaluacijama. Ta dva pojma se mogu smatrati centralnim objektima promatranja u funkcijskom programiranju. Program se sastoji on niza izraza i evaluacija, a nakon svake evaluacije smo blie rjeenju (potrebno je obaviti jo evaluacija) ili smo doli do konanog rjeenja. Prilikom evaluacije se primjenjuju razne tehnike poput rekurzije i ugnjeivanja funkcija. Ovakav programski model je pogodan za efikasan opis raznih matematikih izraza te algoritima. Poto veina takvih izraza koristi liste i skupove, funkcijski jezici su najee orijentirani na rad sa listama. Jedan od najpoznatijih te najstarijih programskih jezika koji podravaju funkcijsko programiranje je LISP. LISP je funkcijski jezik, ali u njemu je mogue koristiti i drukije programske paradigme, na primjer objektnu. Neki od ostalih poznatih programskih jezika koji su funkcijski ili podravaju funkcijsko programiranje su: ML, Erlang, Logo, Python,... Konceptualno orijentirana paradigma generalizira objektno-orijentirano programiranje i ostale programske tehnike. Temelji se na skupu svojstava i koristi novu programsku strukturu koncept. Koncepti su u konceptualno orijentiranom programiranju ekvivalentni objektima u objektno orijentirnom programiranju. U daljem tekstu neemo se dodatno osvrtati na ovu paradigmu jer ona nije predmet naeg prouavanja. Kod objektno orijentiranog programiranja (OOP) program se sastoji od skupa objekata koji meusobno komuniciraju. Objekt je programski entitet koji je sposoban primati, obraivati i slati poruke (poruke su programski najee realizirane obinim funkcijskim pozivima i callback funkcijama). Objektno orijentirani model je izuzetno pogodan za opisivanje dananjih sustava koji se najee sastoje od jasno odvojenih, samostalnih cjelina koje meusobno

komuniciraju i razmjenjuju obraene podatke. Jedan od takvih primjera koji se najee navodi je grafiko korisniko suelje (GUI). Primjeri objektno orijentiranih jezika su C++, C#, Eiffel, Java,.. Povijesni razvoj objektno orijentiranog programiranja see u 60-te godine prolog stoljea. Objekti kao entiteti programa predstavljeni su prvi put u programskom jeziku Simula 67, kojeg su dizajnirali Ole-Johan Dahl i Kristen Nygaard na Norvekom Raunarskom centru u Oslu. Programskim jezikom Simula 67 uvedeni su pojmovi objekata, razreda, podrazreda, virtualnih metoda,... 70-tih godina razvijen je programski jezik Smalltalk pod utjecajem Simulae ali dizajniran kao potpuno dinamiki sustav u kojemu je razrede mogue kreirati i modificirati dinamiki za razliku od statikog naina u Simulli 67. Popularnost objektno orijentirane paradigme porasla je naglo s razvojem grafikih korisnikih suelja, te razvojem programskog jezika C++. Dodatan rast popularnoosti dogodio se u 90-tima pri razvoju raunalnih igara. Primjeri igara su svima dobro poznate Doom III, Starcraft, Diablo, Warcraft III i World of Warcraft. Rast popularnosti objektno orijentirane paradigme nastavio se sve do danas, iako je konceptualna paradigma sve popularnija, ona ne umanjava znaaj objektno orijentirane paradigme.

2.2 Osnovni koncepti objektno orijentiranog programiranja


Osnovni temelji objektno orijentirane paradigme su prije svega objekt i razred te metode, nasljeivanje, enkapsulacija, polimorfizam, apstrakcija, i suelja. Konceptom objektnog programiranja uvodi se mogunosti definiranja novih korisnikih tipova razreda. Razredi su temelj objektno orijentiranog programiranja. Ideja uvoenja objekata u programiranje dola je analiziranjem naina na koji funkcionira stvarni svijet. Promatanjem svijeta oko sebe doi emo do zakljuka da se mnoge stvari mogu vrlo jednostavno modellirati pomou objekata.

Sjetimo se slikara koji izrauje svoje umjetniko djelo. On prvo gleda objekte koje e staviti na platno, zatim kako e se oni ponaati u skladu s drugim objektima. Razmislimo to je slikar koji je htio naslikati sliku s jabukama morao napraviti (osim to je morao kupiti kist, boje i platno). Prvo je razmiljao o osnovnim svojstvima jabuka (boja, oblik, teina) i na temelju osnovnih svojstava naslikao svaku od jabuka napravio je objekte na temelju razmiljanja, stvarne objekte sa zadovoljavajuim svojstvima. Svatko tko pogleda prepoznat e da je to jabuka,tonije 6 jabuka (6 objekata). Postoji 6 objekata razreda jabuka.

Kada smo na primjeru iz svijeta oko nas objasnili razliku izmeu objekta i razreda definirajmo ih formalno. Objekt je naziv za skup svojstava koja moemo objediniti u smislenu cjelinu. Razred je skup pravila koja propisuju od ega je pojedini objekt sagraen te kakva su njegova svojstva. Vrlo je vano uoiti razliku izmeu razreda i objekta: razred je samo opis, a objekt je stvarna, konkretna realizacija napravljena na temelju razreda.

Objekti meusobno razmjenjuju informacije i trae jedan od drugoga usluge. Pritom okolina objekta nita ne mora znati o njegovom unutarnjem ustrojstvu. Svaki objekt ima javno suenje kojim se definira njegova suradnja s okolinom. Ono odreuje koje informacije objekt moe dati, te u kojem formatu. Takoer su definirane i sve usluge koje objekt moe pruiti. Interno se objekt sastoji od niza drugih objekata i interakcija meu njima. Nain na koji se reprezentacija objekta ostvaruje jest implementacija objekta. Ona je najee skrivena od okoline kako bi se osigurala konzistentnost objekta. Razred se, dakle, sastoji od opisa javnog suelja i od implementacije. Kada je razred jednom definiran moe se pomou njega konstruirati neogranien broj objekata (sjetimo se slike s jabukama razred jabuka (zamiljena svojstva jabuka) i stvarnih jabuka na slici- objekti). Kada se objekt stvori potrebno mu je dati poetni oblik. Postupak koji opisuje kakoe se to napraviti dan je u sprecifikaciji razreda. Funkcija koja inicijalizira objekt naziva se konstruktor. Kada objekt vie nije potreban posebna funkcija razreda pod nazivom destruktor uredno e unititi objekt. Osnovni koncepti objektno orijentirane paradigme su detaljno objanjeni u sljedeim poglavljima pa ih se nee ovdje definirati.

Proceduralno programiranje (npr. u C-u ili Pascalu) zasniva se na promatranju programa kao niza jednostavnih programskih odsjeaka - procedura i/ili funkcija. Svaka funkcija je konstruirana tako da obavlja jedan manji zadatak, a cijeli se program sastoji od niza funkcija koje sudjeluju u rjeavanju zadataka. U proceduralno strukturiranim jezicima dodaje se niz osnovnih jezinih konstrukcija, kao to su petlje, grananja i pozivi procedura. U potpuno objektno orijentiranom jeziku (npr. Java) sve se operacije odvijaju kroz objekte i njihove metode. Objekt je uveden u programiranje promatranjem naina na koji funkcionira stvarni svijet. Mnoge stvari oko nas se mogu jednostavno opisati pomou objekta. Da bi se razumjeli osnovni koncepti objektno orijentiranog programiranja, potrebno je prvo odgovoriti na nekoliko pitanja. 1. to je objekt?

Objekt je naziv za skup svojstava koje moemo objedniti u smislenu cjelinu. Npr. Geometrijski lik je objekt koji ima svojstva: broj stranica, duljinu pojedine stranice, povrinu, opseg.

2. to je razred? Razred je definicija objekta, pravila koja propisuju od ega je objekt sagraen, te kakva su njegova svojstva. Vano: razlika izmeu objekta i razreda! Razred je samo opis, dok je objekt konkretna realizacija napravljena na temelju razreda.

3. to je enkapsulacija? Enkapsulacija je odvajanje suelja objekta i same implementacije objekta. Implementacija objekta skrivena iza suelja. Okolina (drugi objekti) moraju samo znati to objekt radi, a ne i kako radi. Svrha enkapsulacije je da omogui jednostavne promjene oko implementacije objekta, bez mijenjanja suelja. Druga svrha je da se sprijei druge objekte da postave neku vrijednost unutar objekta na nevaeu vrijednost i time dovedu objekt u nedefinirano stanje (npr. postavljanje duljine stranice geometrijskog lika na vrijednost -2 ne bi imalo smisla).

4. to je nasljeivanje? Nasljeivanje je svojstvo definiranja razreda na temelju razreda koji su ve definirani. Novi razred "nasljeuje" sve metode i atribute ve definiranog razreda, te dodaje neke nove. Npr. razred Kvadrat bi mogo naslijediti razred Geometrijski lik. 5. to je polimorfizam? Polimorfizam je svojstvo da se razliiti tipova podataka upotrebljavaju koristei ista suelja. Polimorfizam omoguuje metodama razreda koji nasljeuju da pregaze metode u razredu kojeg nasljeuju. Npr. ako razred Kvadrat nasljeuje razred Geometrijski lik, u razredu Kvadrat bi se "pregazile" metode za raunanje opsega i povrine.

You might also like