You are on page 1of 21

SEMINARSKI RAD PRINCIPI PROGRAMIRANJA

TEMA: Java i programski jezici

Mentor: Prof.dr Zoran Avramovi

Student: Ognjen Danilovi Br.Indeksa:96-11/RPI

Sadraj:
Uvod u Javu ............................................................................................................................................. 3 Osnovni pojmovi ..................................................................................................................................... 6 Podjela programskih jezika ..................................................................................................................... 8 Generacije programskih jezika ................................................................................................................ 9 Programski jezici prve generacije ....................................................................................................... 9 Programski jezici druge generacije ................................................................................................... 10 Programski jezici tree generacije .................................................................................................... 12 Programski jezici etvrte generacije ................................................................................................. 13 Programski jezici pete generacije ..................................................................................................... 15 Stringovi ................................................................................................................................................ 16 Nizovi..................................................................................................................................................... 17 Literatura .............................................................................................................................................. 21

Uvod u Javu
Java je : programski jezik vrlo velika biblioteka programskih rutina izvrna okolina za izvodenje programa Java biblioteka programskih rutina sastoji se od hiljada klasa. Postoje klase za rad s datotekama, klase za rad s 3D grafikom, klase za pristup bazama podataka, animaciju web stranica, itd. Moglo bi se reci da se u bibliotekama nalazi veci dio onoga to ce vam ikada zatrebati u programiranju.Java jezik zajedno s ogromnim bibliotekama namijenjen je profesionalnim programerima.tavie Java biblioteke se stalno proiruju i mijenjaju . Program se pie u notaciji koja se naziva programski jezik. Svako racunar (procesor) ima svoj programski jezik koji nazivamo mainski jezik (machine code). Taj jezik je dizajnirans fokusom na elementarne operacije koje se obavljaju nad hardverom racunala. Radi se ojednostavnim operacijama poput pisanja ili citanja iz memorije, aritmetickim operacijama nad registrima procesora, itd. Iako je teoretski svaki program moguce napisati koristeci mainski jezik to je vrlo teko ak i za jednostavne programe.U praksi se gotovo sve programiranje izvodi u jezicima koji su prilagodeni programeru.Takvi jezici se nazivaju jezici visokog nivoa. Pitanje je ta racunar radi s programom napisanim u jeziku visokog nivoa. Najceci nacin je koristiti racunalni program koji nazivamo prevodilac (compiler). Prevodilac prevodi program napisan u jeziku visokog nivoa u program sastavljen od strojnog jezika. Prevedeni program onda moemo pokrenuti na racunalu.U slucaju Java jezika koriten je malo drukciji pristup u kojem se u procesu pisanja Java koda do transformacije u racunaru razumljiv kod koriste dva programa.Prvo se program koji je programer napisao u Javi, pomocu prevodioca prevodi u bytecode program.Bytecode je slican strojnom jeziku, ali je neovisan o bilo kojem racunalu. Bytecode program nije vie citljiv od strane programera.Njega cita i izvrava program koji se naziva Java virtual machine.Prednosti pristupa u dva koraka jest da se tako proizvode programi koji se ipak izvravaju zadovoljavajucom brzinom te se Java okolina moe brzo realizirati na bilo kojem racunalu.Originalni Java program koji pie programer i kojeg prevodi prevodilac naziva se izvorni kod. Bytecode koji proizvodi prevodilac i interpretira Java virtual machine naziva se objektni kod. Instalacija Java okoline se u najkracim crtama obavlja na slijedeci nacin: Pokreni Java 2 SDK installer (datoteka j2sdk-1_***-win.exe), odaberi mjesto instalacije i instaliraj. Dodaj u PATH varijablu operativnog sustava mjesto instalacije (npr. C:\jdk1.4.2\bin). Nacin dodavanja je ovisan koritenom operativnom sustavu. Provjeri (ukloni) CLASSPATH varijablu (-classpath command-line prekidac je bolji nacin). Detaljniji (aktualniji) opis instalacije moe se naci na stranicama java.sun.com. U Javi program iste funkcionalnosti kao C program koji ispisuje "Hello World!" izgleda ovako:
3

public class Hello { public static void main(String[] args) { System.out.println(_Hello, World!_); Cilj je da se objasni struktura ovako jednostavnih programa. Svaki Java program sadri naredbe (statements). Svaka naredba opisuje neku operaciju koju racunar treba izvriti.Operacija moe biti ispis neke informacije na ekranu, moe biti neka racunska operacija, provjera poloaja mia na ekranu, itd. Raunar jednostavno izvrava naredbu po naredbu. U programu koji je gore napisan nalazi se samo jedna naredba: System.out.println("Hello, World!"); Kad se ta naredba izvri na ekranu ce se pojaviti slijedeci ispis: Hello, World! Java ima razlicite nacine pisanja poruka po ekranu bilo da piemo po prozoru, na web stranicu, itd.U ovome slucaju koristimo jednu Java metodu koja se naziva System.out.println. Rezultat izvravanja bit ce ispis poruke u najjednostavnijem obliku prozora kojeg nazivamo konzola (ili DOS prozor u Windows OS).Konzola doputa samo jednostavan ispis teksta , redak po redak. Razmotrimo naredbu koja ispisuje poruku: System.out.println(_Hello, World!_); . Gdje su tu objekti ? Poznavalac Java jezika vidjet ce dva objekta. Prvi je objekt System.Out a drugi sami niz znakova _Hello, World!_. Java cijelo vrijeme radi s objektima.U Javabiblioteci definirano je mnogo vrsta razlicitih objekata koje moemo koristiti u svojimprogramima.Moemo i kreirati objekte prema naim potrebama.Npr. piemo program koji ce pratiti koji su studenti prijavljeni na koji predmet. Tada cemo napisati takav program koji ce pokretanjem: za svakog studenta kreirati jedan objekt student. za svaki predmet takoder jedan objekt predmet . Svaki objekt student sadravat ce odredene podatke poput osobnih podataka studenta i liste upisanih predmeta.Objekt predmet moe sadravati naziv predmeta i druge podatke vezane za predmet.U isto vrijeme kad definiramo izgled objekata trebamo i definirati koje ce se operacije izvravati nad tim objektima. to se tice objekta student, bit ce nam potrebne operacije kreiranja objekta student, auriranja liste predmeta koje je student upisao, operacije ispisa podataka o studentu na ekran, itd. Te operacije koje se izvravaju nad objektom nazivaju se metode. Svaki objekt pripada klasi (class) koja specificira od kojih podataka se objekt sastoji i koje metode posjeduje.Npr. svi nizovi znakova pripadaju klasi koja se naziva String. KlaseString i System.Out definirane su u klasama koje pripadaju Java bibliotekama. Moemokreirati i svoje klase npr. klasu Student i klasu Predmet. Koji je odnos klasa-objekt Kaemoda je objekt dinstanca od klase. Jednostavno, klasa je opis objekta napisan u kodu. Moemo jepromatrati kao kalup ili skicu prema kojoj se u tijeku izvravanja programa kreiraju objekti. Program moe kreirati vie objekata ,instanci iste klase. Java biblioteka je u potpunosti sastavljana od definicija klasa. Ako napiemo bilo koji program u Javi i on ce se sastojati od klasa. Vecina klasa definira tipove objekata. Postoje samo nekoliko klasa kojima se ne definira objekt vec su sastavljene samo od samostalnih metoda. Ipak nije sve u Javi objekt. Najjednostavniji tipovi podataka poput cjelobrojnih i brojeva u pokretnom zarezu tretiraju se neto drugacije. takvi podaci nazivaju se primitivni tipovi podataka.

Kako prevesti i pokrenuti Java program? Prvo morate biti pristupiti racunalo na koje je instalirana podrka za Javu odnosno Java SDK. A. Ukucajte program i pohranite ga u datoteku Hello.java. Moete koristiti bilo koji tekst editor za unos koda, npr. Notepad. Korisno je imati i neki sofisticiraniji Java editor npr. JedPlus ili Eclipse. Takvi editori nam mogu omoguciti korisne funkcije poput sintaksnog naglaavanja ili automatskog uvlacenja teksta. Moguce je iz takvih editora pozvati i operacije prevodenja i izvravanja. Ako se va program sastoji od samo jedne klase potrebno ga je pohraniti u datoteku koja ima isti naziv kao i klasa uz dodanu ekstenziju .java. kako se na jednostavni program sastoji od samo jedne klase nazvane Hello, datoteku moramo nazvati Hello.java. B. Otvori DOS prozor i postavi trenutni direktorij na direktorij gdje je datoteka s programom. Sve naredbe koje slijede tipkaju se u ovaj prozor. Poruke prevodioca i sve to ce program ispisati odvija se takoder u ovome prozoru. Postoje i drugi nacini koje cemo obraditi na laboratorijskim vjebama, ali ovo je opti nacin koji radi na svim racunarima. U ovome trenutku bit ce otvorena dva prozora. Jedan s editorom (npr. Notepad), a drugi s DOS prozorom koji slui za interakciju s Java sustavom. U tom DOS prozoru prevodimo i izvravamo program. C. Koritenje JDK za prevodenje programa u Hello.java datoteci. Za prevodenje programa treba utipkati: javac Hello.java Ako dobijete poruku da sistem ne moe naci javac (Java prevodilac) znaci da ili nije pravilno postavljena PATH varijabla sistema ili nije instaliran JDK. Ako nema greaka u programu prevodilac ce proizvesti bytecode verziju vaeg programa u datoteci nazvanoj Hello.class. Ako prevodilac nade greke poput tipkanja Class umjesto class ili izostavljanja znaka ; na kraju naredbe, odbit ce prevodenje i izvijestiti o pronadenim grekama. To nazivamo grekom prevodenja (compiler error). Najcece je poruka o greci takva da je jednostavno naci mjesto u kodu gdje smo ucinili pogreku. Ponekad iz poruke nije jasno odakle potjece greka i tada je potrebno paljivo pregledati kod. Pocetnici cesto pogrijee traeci greku ba u liniji gdje je to prevodilac javio. Medutim, greka se moe nalaziti i negdje prije! Ako postoje greke kod prevodenja potrebno ih je otkloniti u editoru. Nakon otklanjanja greaka ne zaboravite snimiti datoteku. D. Koritenje JDK za pokretanje prevedene verzije programa koja se nalazi u Hello.class datoteci. Nakon to je prevodilac proizveo bytecode verziju programa Hello.class, moete ga pokrenuti u Java Virtual machine tipkanjem:java Hello Ne tipkajte .class ekstenziju. JDK pretpostavlja da ste mislili na Hello.class. Ovaj se program nakon toga treba izvriti i ispisati poruku u DOS prozoru. Ako elite modificirati ispis programa ili dodati jo koju naredbu opet se trebate vratiti u prozor tekst editora, napraviti modifikacije i nakon toga u DOS prozoru ponoviti postupak prevodenja i izvravanja. U tijeku izvodenja programa moe nastati greka. Takva greka naziva se runtime greka (run-time error) ili greka u izvravanju (execution error). U nekim slucajevima JVM nece moci izvriti program do kraja. Tada ce ispisati poruku o greci s podatkom gdje je program doao u izvodenju prije nego to je prekinut.

Osnovni pojmovi
Raunar moe izvriti samo one poslove za koje je dobio detaljne upute (instrukcije, naredbe) kako ih obaviti.Raunar razumije i moe izvrti samo one instrukcije koje su napisane u njemu razumljivom jeziku, strojnom jeziku, iskazanom binarnim brojem, tj. nulama i jedinicama.Za pisanje instrukcija u strojnom jeziku potrebno je temeljito poznavati granu raunala (procesora) i koristiti brojane kdove jer se instrukcije strojnog jezika izravno odnose na pojedine dijelove procesora i vrijede samo za taj procesor.Svaki tip procesora ima sebi svojstven strojni jezik koji nije primjenjiv na drugoj vrsti raunala. Program je niz instrukcija napisanih odrenenim redoslijedom, ijim izvrenjem se izvrava neki zadatak. Da bi se pojednostavilo pisanje programskih instrukcija u binarnom kdu, uveden je mnemoniki oblik pisanja instrukcija. Mnemoniki oblik instrukcije jest znakovni prikaz (niz slova, brojaka i specijalnih znakova) koji podsjea na radnju koja e se izvriti tom instrukcijom. Imena operacija i instrukcija esto su kratice engleskih rijei (npr. ADD, INC, PUSH, PULL). Svakoj instrukciji u mnemonikom obliku pripada jedna instrukcija u binarnom obliku. Za instrukcije napisane u binarnom odnosno mnemonikom obliku kae se da su napisane u niem simbolikom jeziku. Objedinjavanjem vie instrukcija strojnog jezika (nieg oblika) u jednu novu instrukciju (vii oblik instrukcije) postie se pisanjem u simbolikom jeziku vieg nivoa. Vii simboliki jezici omoguuju pisanje programa zapisom slinom prirodnom jeziku i matematikom zapisu. Programer (ovjek koji pie program) najee ne mora znati gotovo nita ili vrlo malo o grani raunara ime je pisanje programa olakano. Jedna od najveih prednosti viih simbolikih jezika jest da se jedan te isti program moe primijeniti na razliitim tipovima raunala (procesora). Programiranje predstavlja postupak pisanja programa u nekom od simbolikih jezika. Za vie simbolike jezike uvrijeen je naziv (vii) programski jezici. Programski jezik je set instrukcija koje raunalo razumije i koje moe interpretirati. Nain koritenja instrukcija u programu i njihovo slaganje propisano je pravilima (gramatika jezika) odabranog programskog jezika, a naziva se sintaksa. Ukoliko se ne zadovolji propisana sintaksa, program nije ispravan i nije ga mogue prevesti u jezik razumljiv raunaru, a samim time ni izvriti.Znaenje programa, tj. programskih izraza definirano je semantikom programskog jezika.Sintaktike pogreke otkriva program prevoditelj pomou kojeg se izvorni oblik programa prevodi u izvedbeni (izvrni), tj. strojni.Logiku ispravnost programa raunalo ne otkriva niti javlja, nju mora provjeriti odnosno osigurati programer. Izvorni program ili izvorni kd predstavlja niz instrukcija napisanih u nekom od programskih jezika. Izvedbeni ili izvrni program predstavlja datoteku koja sadri instrukcije strojnog jezika. Prevoenje je postupak kojim se programi pisani u nekom od programskih jezika (simbolikih jezika) prevode uz pomo programskih prevoditelja na jezik koji raunar razumije, a to je jezik nula i jedinica (strojni jezik).Prema nainu prevonenja (sloenosti i djelotvornosti) instrukcija izvornog programa u strojni jezik, programi prevoditelji se dijela na:
6

interpretere, kompajlere. Interpreteri su programi koji svaku naredbu izvornog programa prevode u strojni jezik u trenutku izvonenja programa naredbu po naredbu. Kompajleri (kompilator,engl. compiler) su programi koji prevode izvorni program u strojni program samo jednom, i to za vrijeme postupka prevonenj koji se pomou linkera transformira u izvrni program. Linker je program koji uzima jedan ili vie objektnih programa generiranih od strane kompajlera i spaja ih u jedan izvrni program koji se moe samostalno pozvati i izvriti po potrebi. Linkeri mogu uzimati i gotove objekte iz programskih biblioteka (engl. library) koji su napisani od strane drugih programera. Debugger je program koji pomae pri otklanjanju pogreaka u programu, moe testirati i provjeriti pravilnost rada programa.Postupakotklanjanja pogreaka naziva se debugging. Cilj programiranja je pomou raunala od ulaznih podataka dobiti izlazne rezultate obrade. Problemi (zadaci) koje programiranjem treba rijeiti esto nisu jednostavni da bi se odmah moglo pristupiti pisanju programa, pa se postupak programiranja rastavlja na vie koraka (faza programiranja): 1. Postavka zadatka potrebno je jasno definirati to je cilj zadatka, analizirati postojee informacije, opisati sve podatke, predvidjeti sve mogue sluajeve koji se mogu javiti kod rjeavanja zadatka; 2. Analiza zadatka analiziraju se ulazni i izlazni podaci, definiraju veze izmenu podataka, daje se precizan opis zadatka koji rezultira izradom matematiog modela koji se moe realizirati na raunaru; 3. Razrada algoritma definira se nain na koji se od poetnih, ulaznih podataka dolazi do traenih, izlaznih. Ukoliko je zadatak opsean treba ga rastaviti na vie dijelova. Svaki zadatak moe se rijeiti na vie naina, zato bi trebalo proanalizirati sve naine i odabrati optimalan. Pri tome treba voditi rauna broju potrebnih operacija i memorijskih resursa da bi se algoritam uspjeno izvrio; 4. Pisanje programa ovisno o zadatku koji treba rijeti i raspoloivoj opremi bira se programski jezik koji je najbolji izbor u konkretnom sluaju; 5. Faza prevonenja, izvravanja i testiranja programa program treba ispraviti od eventualnih sintaktikih pogreaka, prevesti na oblik razumljiv raunalu (strojni jezik) pomou programa prevoditelja. Da bi se program izvravao, potrebno je formirati izvrnu verziju programa. esto su faze prevonenja i izrade izvrnog oblika programa objedinjene. Izvrnu verziju programa treba testirati, tj. provjeriti da li program rjeava postavljeni zadatak.U toj fazi treba otkriti to vie skrivenih greaka. Po potrebi treba se vratiti na prethodne faze; 6. Izrada dokumentacije u dokumentaciji programa treba opisati to program radi, dati uputstva kako se koristi, detaljnije opisati algoritam ukoliko se radi o sloenijem zadatku; 7. Odravanje programa koritenjem programa mogu se uoiti neke pogreke koje nisu otkrivene tijekom testiranja, a potrebno ih je otkloniti. Ponekad treba izvriti i neke promjene u programu uslijed nastupanja novih okolnosti. Ova faza podrazumijeva i proirivanje programa dodavanjem novih funkcija odnosno modula. Pod pojmom algotitam podrazumijeva se nain (uputa, postupak, metoda) kojim
7

raunalo rjeava neki zadatak, tj. niz instrukcija ijim se izvrenjem rjeava neki problem.Pri pisanju algoritama esto se koriste pomagala koja olakavaju njihovu izradu kao npr. dijagrami tijeka, pseudokd (algoritam zapisan rijeima), biblioteke esto koritenih algoritama i sl.a. Prevonenjem nastaje objektni program.

Podjela programskih jezika


Mnogo je kriterija po kojima se moe izvriti podjela programskih jezika.U ovom radu bit e izvojene samo neke od podjela i to na osnovi sljedeih kriterija: Podjela prema razini: Programski jezici niske razine (nii programski jezici) Raunarski jezik Asembler Programski jezici visoke razine (vii programski jezici) Oni jezici ije se naredbe ne mogu izravno prevesti u ralinarski jezik Podjela sa aspekta istorijskog razvoja (generacijska podjela): Programski jezici prve generacije Programski jezici druge generacije Programski jezici tree generacije Programski jezici etvrte generacije Programski jezici pete generacije Podjela prema namjeni: Jezici za rjeavanje numerikih i naunih problema (FORTRAN, ALGOL, APL, MATLAB) Jezici za rjeavanje poslovnih problema i obradu podataka (COBOL, PL/I, ABAP) Jezici za uenje programiranja (LOGO, BASIC, Pascal) Jezici za pisanje sistemskih programa (Ada, C, C#, Modula-2) Jezici za sisteme umjetne inteligencije (LISP, Prolog) Jezici za rad s bazama podataka (SQL, PL/SQL, Clarion), itd. Razvojem programskih jezika gubi se smisao ove podjele, jer se dananji programski jezici mogu ravnopravno koristiti u svim podrujima odnosno smatraju se vienamjenskim.

Podjela sa aspekta strukturiranosti: Nestrukturirani (BASIC, FORTRAN) Strukturirani (Pascal, Ada, C) Podjela prema nainu rjeavanja problema: Proceduralni (FORTRAN, COBOL, Pascal, C)
8

Neproceduralni (Prolog, SQL) Podjela prema metodologiji (paradigmi) programiranja: Imperativno (proceduralno) programiranje (FORTRAN, ALGOL, Pascal,C++) Deklarativno (logiko) programiranje (Prolog, Datalog) Objektno orijentirano programiranje (Simula, Visual C++, C#, Java) Funkcionalno programiranje (LISP, Haskell, ML, Scheme)

Generacije programskih jezika


Usporedno s razvitkom informatike, razvijali su se i programski jezici. Iako nisu jednoznano odreene, smatra se da je do danas razvijeno pet generacija programskih jezika. Iz godine u godinu razvijaju se novi jezici. Godine 1985. postojalo je oko 150 programskih jezika, 1990. godine broj je narastao na 300, 2008. godine bilo ih je oko 700.Koliko ih je danas? Teko da se moe dati precizan odgovor na to pitanje jer svakim danom je sve vie nadogradnja ve postojeih programskih jezika, otkrivaju se novi jezici, a raste i broj kompanija koje se bave razvojem i proizvodnjom programskih jezika i alata.

Slika 1. Razvoj programskih jezika


Izvor: http://infographicality.com/prelucrate/Electronics%20Technology/Evolution%20of%20Programming%20Languag es%20www.infographicality.com.jpg (26.3.2013.)

Programski jezici prve generacije

Pod jezicima prve generacije podrazumijevaju se raunarski(mainski)jezici.Raunarski jezik (engl.machine language, machine code) jedini je jezik kojeg raunar razumije, jedini programi pisani u raunarskom jeziku mogu se bez dodatnog prevoenja izvriti na raunaru. Svi se ostali oblici programa pisani u nekim drugim programskim jezicima moraju prevesti u raunarski jeziku.Raunarski jezik binarni je oblik programa, to znai da se instrukcije piu u binarnom brojevnom sustavu (znamenke 0 i 1). Raunarski jezik direktno je vezan za raunar odnosno procesor, program napisan u strojnom jeziku za jednu vrstu raunala (procesora) nije primjenjiv na drugoj vrsti raunara. Prema prof. Grundleru (v. Grundler, 2000., str. 334) za pisanje programa u strojnom jeziku osim binarnog moe se koristiti i heksadecimalni sustav, pa ak i mnemoniki oblik zapisa.

Slika 2. Primjer raunarskog (mainskog) jezika


Izvor: http://www.egradiva.net/moduli/programirljive_naprave/01_jeziki/02_datoteka.html (27.3.2013.)

Prednosti pisanja programa u raunarskom jeziku su brzina izvonenja programa te djelotvorno iskoritenje memorije.Nedostaci su sloenost postupka izrade programa (dugaki, nepregledni programi, pisanje podlono grekama koje je teko otkriti, pisanje programa traje dugo), ogranienost programa za jedan tip procesora (programi se ne mogu prenijeti na raunar drugaijeg tipa), programer mora dobro poznavati granu raunara (pisanje programa namijenjeno je usko specijaliziranim strunjacima).

Programski jezici druge generacije


Jezici druge generacije su asembleri (engl. assembly language, assembly code), to su najnii programski jezici, najblii binarnom strojnom kdu. Instrukcije asemblera su skraenice koje se sastoje od nekoliko slova (mnemonici) i brojeva. Slovne skraenice najee dolaze od engleskih naziva pojedine instrukcije (npr. MOV je instrukcija za premjetanje podataka, skraenica dolazi od engl. rijei move). Pisanje programa u asembleru daleko je jednostavnije, ali prije izvoenja zahtijeva prevoenje u raunarski jezik.Program za prevonenje naziva se asembler (engl. assembler). U poetku je svakoj asemblerskoj (mnemonikoj) instrukciji
10

odgovarala tono jedna instrukcija u binarnom raunarskom jeziku.Kasnije je jednoj asemblerskoj instrukciji odgovaralo vie raunarskih instrukcija, a omogueno je i izdvajanje dijelova kda, koji se esto ponavlja, u potprograme (makroasemblerski jezici) (v. Trifunov, 2011.). U programskom jeziku asembler postoji mogunost pisanja komentara koji olakavaju snalaenje u programu, a program za prevoenje asembler zanemaruje ih pri prevonenju u raunarski jezik

Slika 3. Primjer programa napisanog u asembleru


Izvor: http://ece.wpi.edu/~wrm/Courses/EE2801/Labs/tasm/tasm2.gif (27.3.2013.)

Iako je pisanje programa u programskom jeziku asembler daleko jednostavnije od pisanja u strojnom jeziku, ipak je to i dalje mukotrpan posao koji zahtijeva puno vremena. Traenje i ispravljanje greaka pri razvoju programa takoer je jo uvijek zahtjevan i dugotrajan proces. Svaki tip raunara ima sebi svojstven programski jezik asembler koji nije primjenjiv na drugom tipu raunala. Programer i dalje mora imati punu kontrolu nad svim komponentama raunara. Prednost programa pisanih u jeziku asembler je to se brzo izvravaju i zauzimaju malo memorije u odnosu na programe pisane u drugim programskim jezicima (v. Gudelj, 2011.). Jezici prve (strojni jezik) i druge (asembler) generacije spadaju u programske jezike nie razine (nii programski jezici, engl. low level languages).

11

Programski jezici tree generacije


Krajem 50-tih odnosno poetkom 60-tih godina prolog stoljea pojavili su se prvi jezici visoke razine, tzv. vii programski jezici (engl. high level languages, HLL).

Slika 4. Kronologija razvoja najznaajnih viih programskih jezika


Izvor: http://users.skynet.be/averkeyn/computer/histlang.html (28.3.2013.)

12

Razvojem jezika tree generacije postignuta je neovisnost o tipu raunalra (procesora) na kojem se izvodi program.Teoretski, program napisan jezikom tree generacije moe se koristiti na bilo kojem raunaru (uz minimalnu izmjenu) koje ima za njega pripadajui kompajler.Programiranje je olakano ne samo time to su instrukcije ovih jezika vie nalik govornom jeziku, nego i injenicom da programer vie ne treba poznavati grau raunara.Opte, to je programski jezik na viem nivou, to je manje potrebno znati o tehnikim detaljima specifinim za pojedini raunar.Svaka naredba vieg jezika prevodi se u vie naredbi raunarskom jezika.Pojava interpretera kao alternativa kompajlerima jo je jedna od karakteristika jezika tree generacije. Kao rezultat rada interpretera ne postoji izvrni oblik programa ve postupak prevoenja nastupa svaki puta kada se program pokree (naredba po naredba se prevodi i nakon prevonenja izvodi). Meu prvim jezicima tree generacije bili su FORTRAN (Formula Translator), ALGOL (Algorithmic Language), COBOL (Common Business Oriented Language), BASIC (Beginner's All-purpose Symbolic Instruction Code), Pascal (nazvan prema francuskom matematiaru Blais Pascalu), PL/I (Programing Language I) i C jezik.

Programski jezici etvrte generacije


Jezici etvrte generacije (engl. fourth generation languages, 4th generation languages, 4GL) pojavili su se poetkom 1980-tih godina. Ovi programski jezici potpuno su prilagoneni krajnim korisnicima, njima se slue programeri za ubrzanje procesa programiranja, ali ih koriste i ostali korisnici koji ne trebaju biti vjeti u programiranju, ali trebaju dobro poznavati procese. Odnos korisnika i raunara je dijaloki, raunar odgovara na postavljana pitanja i upuuje korisnika na izbornik (men). Jezici su razvijeni za tano odreenu namjenu (engl. application specific languages), lako se ue. Svojom strukturom, jezici etvrte generacije sloeniji su od jezika tree generacije, ali omoguuju korisnicima da izvre kompleksne strukture koristei se ralativno manjim brojem instrukcija. Jedna instrukcija jezika etvrte generacije moe zamijeniti nekoliko instrukcija programskog jezika tree generacije. Program pisan u jeziku etvrte generacije razvija se interaktivno, to znai da se instrukcije u programu ureuju (jezino i logii testiraju) u tijeku pisanja programa odnosno prije njegovog zavretka. etvrta generacija jezika ne pretpostavlja samo klasino programiranje u nekom od novih programskih jezika, ve se dio programiranja moe izvesti i uz pomo programskih alata za automatsko programiranje (npr. RAD, CASE alati) (v. Pavli, 2009., str. 252). QBE (Query-By-Example) smatra se prvim jezikom ove generacije, slijede Visual Basic i Visual C++ kao najpoznatiji predstavnici te generacije programskih jezika, meu prvim jezicima su koji omoguuju programiranje pomou grafikih simbola, tj. ikona. Svakim danom na tritu softwarea pojavljuje se sve vie alata za vizualno (grafiko) programiranje (programiranje ne provodi utipkavanjem tekstualnih instrukcija programskog jezika ve slaganjem grafikih elemenata) kao npr. Caspio, Tersus, Limnor. SQL (Structured Query Language) najpopularniji programski jezik za kreiranje, dohvat, auriranje i brisanje podataka iz baze podataka. Pojavom Interneta na vanosti
13

dobiva objektno orijentirani programski jezik opte namjene Java.

Osnovne skupine programskih alata 4GL su (v. Grbavac, 2010., str. 311): Upitni jezici za bazu podataka (SQL, PL/SQL, Clarion, Thin@) Jezici za programiranje vrlo visoke razine (AME, NOMAD) Jezici za podrku u odluivanju (Multiplan, VisiCalc) Generatori aplikacija (ADS, DELPHI, Mapper, Ramis II, Focus, CASE alati) Generatori izvjetaja (SRG, GIS, Easytrieve Plus) Jezici i alati za grafiku obradu podataka (Havard graphics, LabView, G jezik, TCL/TK, AutoCad)

Slika 5. Zastupljenost koritenje programskih alata i jezika za baze podataka (IT-Careernet Statistics)
Izvor: http://www.wst.nu/statistics/programminglanguages.htm (29.3.2013.)

14

Programski jezici pete generacije


Jezike pete generacije (engl. fifth generation languages, 5th generation languages, 5GL) neki autori nazivaju jezicima umjetne inteligencije jer se najee koriste u istraivanju umjetne inteligencije. Raunar rjeava odreeni problem bez programera koji je zaduen jedino da definira problem i pod kojim uslovima problem treba biti rijeen, ali ne treba znati kojim algoritmom ili rutinama e se to izvesti. Podruja primjene jezika 5GL su u projektiranju ekspertnih sistema, sistema baza znanja,mainskom odluivanja, procesiranja prirodnih jezika, umjetne inteligencije, neuronskih mrea Najpoznatiji predstavnici su jezici:LISP, Prolog, OPS5, Mercury.

Tano odrediti problem koji se eli rijeiti. Programi se obicno piu da bi izvrili odredeni zadatak, ali zadatak ne mora biti uvijek jasan sam po sebi. Potrebno je prikupiti dodatne podatke da bi se zadatak mogao tano odrediti. Jasno odredivanje problema otklanja mogucnosti nesporazuma i olakava postupak razvoja programa. Odrediti ulaze koje ce program traiti i izlaze koje ce program stvarati. Ulazi i izlazi programa moraju biti odredeni da bi se program dobro uklopio s drugim djelovima razvojnog postupka u jedinstvenu cjelinu. Rastaviti program na klase i pripadajuce metode. Odrediti jednu ili vie klasa i njihovo djelovanje, medusobno i sa vanjskim svijetom. Za svako medudjelovanje odrediti zasebnu metodu. Razviti algoritme koji ce biti primjenjeni u pojedinim metodama. Algoritam je opis postupka korak po korak do konacnog rjeenja problema. Potrebno je pronaci logican nacin za podjelu vecih problema na manje sve dok se citav zadatak ne podijeli na niz malih, jednostavnih i lako razumljivih zadataka. Nakon toga, ti mali zadaci se ponovo rastavljaju dok se ne dode dijelova koji se mogu iskazati Java naredbama. Ovaj postupak se najcece izvodi koritenjem pseudokoda. Prevodenje algoritma u Java naredbe. Ako je rastavljanje problema dobro obavljeno, ovaj korak se svodi na jednostavno zamjenjivanje pseudokoda odgovarajucim Java naredbama. Testiranje konacnog Java programa. Najdui i najvaniji dio razvojnog postupka. Dijelove programa je potrebno, ako je moguce, prvo testirati pojedinacno, a zatim i program u cjelini. Potrebno je provjeriti da program ispravno radi sa svim dozvoljenim vrstama ulaznih podataka. Cesto se dogada da se program pisan i testiran samo na uobicajenom ulaznom skupu rui ili daje netane rezultate samo zbog koritenja razlicitog ulaznog skupa. Ako program sadri grananja potrebno je provjeriti sva moguca grananja da bi se provjerilo ispravnost rada programa u svim mogucim uslovima.

Postupak razvoja Java programa

15

Stringovi
Osnovna razlika izmedu primitivnih tipova i String tipa je u tome to su vrijednosti tipa String objekti. Prisjetimo se da su potprogrami skupovi programskih naredbi s imenom. Svi Java potprogrami su smjeteni u klasama ili u objektima. Standardne klase u Javi sadravaju unaprijed odredene potprograme koji se mogu koristiti. Vrijednost tipa String, koja je objekt, ima potprograme koji se mogu koristiti za rad s tim stringom. Svi ti potprogrami se mogu pozivati bez znanja o tome kako oni rade, to je i bit tih potprograma: koritenje bez znanja o tome to se dogada unutra. Klase u Javi imaju dvije razlicite namjene. Prvo, klasa okuplja varijable i potprograme sadrane u toj klasi. Te varijable i potprogrami zovu se staticki clanovi klase. Najbolji primjer toga je main metoda u klasi koja odreduje program. Dijelovi definicije klase koji odreduju staticne clanove oznaceni su rezerviranom rijeci "static" kao i main metoda u programu. Druga uloga klase je opisivanje objekata. Klasa jednog objekta odreduje koji potprogrami i varijable su sadrani u tom objektu. Gledano sa strane opisivanja tipova vrijednosti podataka, klasa je tip, a objekt vrijednost toga tipa. Na primjer, String je ime klase koja je ukljucena kao uobicajeni dio Java jezika, zapravo tip, a "Hello World!" je vrijednost tipa String.

Konstruktori i inicijalizacija objekata Objektni tipovi (npr. String, Integer) se u Javi jako razlikuju od primitivnih tipova (npr. int). Jednostavno deklariranje varijable ciji je tip zadan klasom ne znaci odmah i kreiranje objekta te klase. Objekti moraju biti izricito konstruirani. Za racunar, postupak konstruiranja objekta znaci pronalaenje slobodne memorije za spremanje objekta i punjenje varijabli instance tog objekta. Programera obicno ne zanima gdje ce u memoriji objekt biti spremljen, ali je poeljno da ima bar nekakav nadzor nad pocetnim vrijednostima spremljenim u varijable instance objekta. Varijabli instance moe biti pridijeljena neka pocetna vrijednost pri deklaraciji, kao i svim drugim varijablama. Za primjer razmotrimo klasu ParKocki. Objekt ove klase predstavlja par kocki. Sadravat ce dvije varijable dinstance koje predstavljaju brojeve na gornjoj strani kocki i metodu instance za bacanje kocki:
public class ParKocki { public int kocka1 = 3; // broj na public int kocka2 = 4; // broj na public void baci() { // bacanje kocke se simulira tako // slucajna broja izmedu 1 i 6 kocka1 = (int)(Math.random()*6) + kocka2 = (int)(Math.random()*6) + } } // kraj klase ParKocki prvoj kocki drugoj kocki da se odaberu dva 1; 1;

Pocetne vrijednosti varijabli kocka1 i kocka2 su postavljene na 3 i 4. Ove pocetne vrijednosti postavljaju se svaki put kad se kreira objekt tipa ParKocki. Svaki put kad se kreira novi objekt,
16

on dobija svoje vlastite varijable instance sa pridjeljenim vrijednostima: "kocka1 = 3"i "kocka2 = 4". Razmotrimo izmjenjenu klasu ParKocki: public class ParKocki { public int kocka1 = (int)(Math.random()*6) + 1; public int kocka2 = (int)(Math.random()*6) + 1; public void baci() { kocka1 = (int)(Math.random()*6) + 1; kocka2 = (int)(Math.random()*6) + 1; } } // kraj klase ParKocki U ovom primjeru, pocetne vrijednosti kocki su odredene sluajnim brojem, kao da je na igraci stol ubacen novi par kocki. Budui se inicijalizacija provodi za svaki novi objekt, za svaki novi par kocki ce biti odreden novi skup pocetnih vrijednosti. Razliciti parovi kocki mogu imati razlicite pocetne vrijednosti. Pri inicijalizaciji static varijabli situacija je drukcija, jer postoji samo jedna kopija static varijable cija inicijalizacija se vri samo jednom, pri prvom ucitavanju klase. Ako se varijabli dinstance ne pridjeli pocetna vrijednost, automatski ce joj biti pridijeljena default vrijednost.Varijablama instance numerickog tipa (int, double, ...) se pridjeljuje pocetna vrijednost 0, logickim varijablama (boolean) se pridjeljuje vrijednost false, a char varijablama se pridjeljuje Unicode znak brojcane vrijednosti 0. Varijable instance takoder mogu biti i tipa objekt. Default pocetna vrijednost za takve varijable je null, to vrijedii za String varijable koje su isto tako objekti.

Nizovi
Rad s nizovima upoznat emo na sljedecim primjerima: Ispisivanje elemenata niza na ekran public class Niz1{ public static void main(String[] args) { int[] list; // deklariranje varijable list tipa niz integera list = new int[] {1, 2, 3, 4, 5}; // pridruzivanje vrijednosti varijabli list for (int i = 0; i < list.length; i++) { System.out.println( list[i] ); // Ispisivanje elementa niza } } }

17

Sumiranje elemenata niza public class Niz2{ public static void main(String[] args) { double[] A = {1., 2., 3., 4., 5.}; // deklariranje varijable A tipa niza double double sum; // The sum of the numbers in A. sum = 0; // Start with 0. for (int i = 0; i < A.length; i++) sum += A[i]; // add A[i] to the sum, for // i = 0, 1, ..., A.length - 1 System.out.println(sum); } } Ispisivanje svih parametara naredbene linije (command-line arguments). Prilikom pokretanja ovog programa potrebno je navesti niz vrijednosti npr. d:>java CLDemo 1 2 3 4 5 public class CLDemo { public static void main(String[] args) { System.out.println("Unjeli ste " + args.length + " command-line parametara."); if (args.length > 0) { System.out.println("Uneseni su parametri:"); for (int i = 0; i < args.length; i++) System.out.println(" " + args[i]); } } // kraj main() metode } // kraj klase CLDemo Pronalaenje nekog elementa niza Definirat emo svoju metodu find. public class Nadji{ // Definiranje metode find za pronalaenje tocno odredenog elementa niza static int find(int[] A, int n) { // Pretrauj niz A dok ne nade vrijednost n. for (int index = 0; index < A.length; index++) { if ( A[index] == n ) return index; // n je pronaden na ovom indeksu! } // Ako je program doao do ove tocke, znaci da n nije pronaden.
18

// Zato vrati vrijednost -1. return -1; } public static void main(String[] args) { int[] list; // deklariranje varijable list tipa niz integera list = new int[] {1, 2, 3, 4, 5}; int i; i = find(list, 3); // poziv metode find // da bi pronali na kojem se mjestu u nizu nalazi vrijednost 3 System.out.println("Element 3 se nalazi u polju, i to s indeksom " + i); } // kraj metode main } // kraj klase Nadji

Rad sa StringBufferom public class Stringovi{ public static void main(String[] args) { char[] tekstualnoPolje={'I','m','e',' ','p','r','e','z','i','m','e'}; // testiraj: System.out.println("tekstualnoPolje = " + tekstualnoPolje); // Dakle, niz karaktera se ne moe ispisati lijepo funkcijom println. // Zato ga treba prevesti u String: String tekst= String.copyValueOf(tekstualnoPolje); // Pogledajmo sad ispis: System.out.println("tekst= " + tekst); // Nova klasa za rad sa stringovima je StringBuffer StringBuffer a = new StringBuffer("Nice String"); System.out.println("StringBuffer a= " + a); // U klasi StringBuffer definirano je vie metoda. Neke od njih su append, // reverse, insert, charAt // pogledajmo primjere: a.append(" again"); System.out.println("Novi StringBuffer a= " + a); a.append(" stop").append(" repeating"); System.out.println("Nakon append je StringBuffer a= " + a); a.reverse(); System.out.println("Obrnuto, StringBuffer a= " + a); // Primjer dodavanja drugih tipova podataka u StringBuffer: StringBuffer buf = new StringBuffer("Broj"); long no=999; buf.append(no); System.out.println("StringBuffer buf = " + buf); boolean x = true; buf.append(x); System.out.println("StringBuffer buf = " + buf);
19

// umetanje karaktera u StringBuffer buf.insert(4," tekst "); System.out.println("StringBuffer buf = " + buf); // promjena karaktera u StringBufferu buf.setCharAt(4,'A'); System.out.println("StringBuffer buf = " + buf); // Ispitivanje karaktera na odredenom mjestu unutar StringBuffera char c = buf.charAt(7); System.out.println("Nadjen je karakter: " + c); // pretvaranje StringBuffera u String String tekst2 = buf.toString(); System.out.println(tekst2); } }

Sortiranje niza
U sljedeoj klasi upotrijebljen je algoritam za sortiranje elemenata niza u rastucem redoslijedu, te se sortiran niz ispisuje : public class SelectionSort { // Definiranje main metode public static void main(String[] args) { // Deklariranje varijabli i postavljanje vrijednosti int[] arr = new int[] {2,3,5,12,1,4,9,7,4}; // niz cjelobrojnih vrijednosti int i = 0, j; // indeksi petlji int iMin; // indeks najmanje vrijednost niza int brojElemenata; // broj elemenata niza int temp; // varijabla za privremeno cuvanje vrijednosti brojElemenata = arr.length; // Sortiranje vrijednosti for ( i = 0; i <= brojElemenata-2; i++ ) { iMin= i; // pretpostavljamo da je prvi element ujedno i najmanji // Pronalaenje najmanje vrijednosti nesortiranog dijela niza for ( j=i+1; j <= brojElemenata-1; j++ ) { if (arr[j] < arr[iMin]) iMin= j; } // iMin sada sadri indeks najmanje vrijednosti u nizu, pa // zamijeni mjesta arr[iMin] sa arr[i] ako iMin!= i. if (i != iMin) { temp = arr[i]; arr[i] = arr[iMin]; arr[iMin] = temp; } } // Ispis sortiranih elemenata for ( i = 0; i < brojElemenata; i++ )
20

System.out.println(arr[i]); } }

Literatura
1.http://www.icsharpcode.net/OpenSource/SD/Download/ 2.http://www.microsoft.com/download/ 3.http://www.etfos.unios.hr/upload/OBAVIJESTI/obavijesti_dodiplomski/823Java_AV.pdf 4.http://adria.fesb.hr/~tmrnjava/vjezbe/java_programiranje/predavanja/P1.pdf

21

You might also like