38
1 Uvod Vrlo je teško ustanoviti odakle početi s objašnjavanjem termina i suštine programiranja. Pretpostavljam da znate makar neke osnove matematike, i naravno koristiti računar... Dosta vremena ćemo posvetiti objašnjavanju koncepata i terminologije. Terminologija je možda i najbitnija jer ćete kasnije lakše razgovarati o datim konceptima i brže ćete učiti ostale programske jezike, "povezivati kockice"... Komunikacija Mi ljudi za sebe tvrdimo da smo inteligentna bića. Jedan od dokaza za to je i mnoštvo naših načina komunikacije. Komunikacija podrazumijeva između razmjenu informacija dva ili više učesnika (ne moraju biti ljudi), koristeći zajedničke znakove i pravila. U ovo se ubrajaju vizuelne metode (znakovni jezici, grimase, kolutanje očima), audio metode (govor, muzika), fizičke (kad vas neko udari jer ste nepristojni npr.). Danas u svijetu postoji više od 5.000 jezika, od kojih većina nažalost lagano izumire. Ljudi pričaju i sa robotima, ako ništa gledali ste futurističke filmove. Ako se nas ljude pita, to je . idealan način za komuniciranje Međutim, , nemaju inteligenciju kao živa bića. mašine su u suštini vrlo glupe Mašine nemaju mozak, tijelo, uši, glasne žice... Sve im to moramo obezbijediti, da bi bile "inteligentne". Neki od tih organa su predstavljeni kompjuterom, mehaničkim dijelovima, mikrofonom, zvučnikom itd. Kompjuter je mozak mašine, on upravlja svime. Na njega su povezani svi ostali uređaji (organi). Nama ljudima (većini, neki ljudi ne misle nikako), ali misli dolaze same od sebe kompjuterima ne. I to im moramo "ručno" unijeti... Te kompjuterske misli su ustvari naše , koje se skupno nazivaju . naredbe program Ovdje smo da naučimo neke od načina za komuniciranje s kompjuterima. Naime, ljudi su razvili na stotine koje se koriste za pisanje programskih jezika kompjuterskih programa. Ovi jezici su slični našim jezicima, imaju svoju , i . sintaksu gramatiku pravopis

Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

UvodVrlo je teško ustanoviti odakle početi s objašnjavanjem termina i suštine programiranja. Pretpostavljam da znate makar neke osnove matematike, i naravno koristiti računar...

Dosta vremena ćemo posvetiti objašnjavanju koncepata i terminologije. Terminologija je možda i najbitnija jer ćete kasnije lakše razgovarati o datim konceptima i brže ćete učiti ostale programske jezike, "povezivati kockice"...

KomunikacijaMi ljudi za sebe tvrdimo da smo inteligentna bića. Jedan od dokaza za to je i mnoštvo naših načina komunikacije. Komunikacija podrazumijeva između razmjenu informacijadva ili više učesnika (ne moraju biti ljudi), koristeći zajedničke znakove i pravila.U ovo se ubrajaju vizuelne metode (znakovni jezici, grimase, kolutanje očima), audio metode (govor, muzika), fizičke (kad vas neko udari jer ste nepristojni npr.).Danas u svijetu postoji više od 5.000 jezika, od kojih većina nažalost lagano izumire.

Ljudi pričaju i sa robotima, ako ništa gledali ste futurističke filmove.Ako se nas ljude pita, to je .idealan način za komuniciranjeMeđutim, , nemaju inteligenciju kao živa bića.mašine su u suštini vrlo glupe

Mašine nemaju mozak, tijelo, uši, glasne žice... Sve im to moramo obezbijediti, da bi bile "inteligentne". Neki od tih organa su predstavljeni kompjuterom, mehaničkim dijelovima, mikrofonom, zvučnikom itd.

Kompjuter je mozak mašine, on upravlja svime. Na njega su povezani svi ostali uređaji (organi).Nama ljudima (većini, neki ljudi ne misle nikako), ali misli dolaze same od sebekompjuterima ne. I to im moramo "ručno" unijeti... Te kompjuterske misli su ustvari naše

, koje se skupno nazivaju .naredbe program

Ovdje smo da naučimo neke od načina za komuniciranje s kompjuterima.Naime, ljudi su razvili na stotine koje se koriste za pisanje programskih jezikakompjuterskih programa.Ovi jezici su slični našim jezicima, imaju svoju , i .sintaksu gramatiku pravopis

Page 2: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

ApstrakcijeKroz život, svjesno ili nesvjesno, naučili smo koristiti apstrakcije. Apstrakcija je ustvari

, uopćavanje nečeg konkretnog. U bitna su nam generalizovanje datom kontekstu samo datog objekta/stvari/koncepta. Naprimjer kada kažemo automobil, neka svojstva

podrazumijevamo nešto sa 4 točka, motorom itd.To je apstraktni automobil, njegova takoreći definicija, dok je konkretan automobil npr. komšijin Pežo(v) 307, iz 2001. godine.

U fizici i hemiji imamo apstrakciju atoma. Zatim se uvodi apstrakcija molekule, koja se sastoje od više atoma. Kada se govori o molekulama, znamo da su "ispod" atomi, ali nas u datom kontekstu to ne zanima! Kontekst predstavlja skup okolnosti i činjenica, još jedna vrlo bitna stvar kada se govori o apstrakcijama.

U matematici imamo apstrakciju broja. Kada kažemo broj obično mislimo na cijeli broj. Ali ne kažemo koji broj!?Dakle, samo znamo da mislimo na broj.neki

ParadigmeJedan od značajnijih problema koje p.j. pokušavaju riješiti je .kompleksnostKako programi postaju veći, to su komplikovaniji za razumjeti.Zato danas imamo nekoliko paradigmi (pristupa, načina) za razvijanje programa, od kojih su najpoznatije:

proceduralnofunkcionalnoobjektno orijentisanologičko

Dosta jezika danas je miks dvije ili više ovih paradigmi.Ove paradigme o problemima po svom nekom usmjeravaju naš način razmišljanjašablonu/fazonu.

Npr. kod proceduralnog/imperativnog načina razmišljanja "u mjestu".mijenjamo varijableOvdje moramo pamtiti/zamisliti koja je vrijednost neke varijable , što je u datom trenutkuvećini ljudi izazovan zadatak.

Kod funkcionalnog/matematičkog načina razmišljanja pravimo a stare ne nove varijablediramo! To nam pomaže kod razumijevanja određenog dijela koda, ne moramo pamtiti u glavi stanje "cijelog svijeta" i na šta utiče promjena date varijable. Ali, otom potom...

Page 3: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

 

ProgramiRekli smo da je program koje računar treba izvršiti, u cilju dobijanja nekog niz naredbirezultata.Kako svi ljudi razmišljaju na sebi svojstven način, postoji teoretski beskonačno mnogo rješenja (programa) za jedan te isti problem!

Programi često komuniciraju i sa "vanjskim svijetom".Npr. ako trebamo učitati neki tekstualni fajl i prebrojati sve riječi, taj fajl nije dio programaveć je (en. input) u naš program. Isto vrijedi i za klik miša, unos sa tastature, ulazmikrofona i sl.

Analogno, kada želimo ispisati nešto na ekran, pustiti muziku na zvučnik, to se zove izlaz(en. output) iz našeg programa.

Naravno, da ne bismo "izmišljali toplu vodu" možemo se okoristiti znanjem stečenim kroz ljudsku historiju.Ljudi su nadošli na koncept algoritma, koji predstavlja nedvosmislenu specifikaciju za rješavanje nekog problema.Tj. je niz precizno definisanih koraka za dobijanje nekog rezultata.algoritamLaički rečeno, to je recept za implementaciju neke funkcije.

U toku pisanja koda nekog programa često će nam se pojavljivati .greškeTj. program se izvršava ali ne radi kako bismo željeli. Te greške se nazivaju bagovi (en. bug - buba, insekt).Za program koji ima takve greške kaže se da je .bagovitProces u kojem tražimo greške i ispravljamo ih naziva se debagovanje.

To je to.

Page 4: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

Instalacija JaveAko vam je baš mrsko instalirati Javu, postoje i online verzije

JavaJShell

Zgodne su za probavanje i igranje sa Javom.

Preporučujem da instalirate .Javu 11Samo downloadujte i raspakujte zip npr. u .C:\Java

Idući korak je .dodavanje PATH varijable

Instalacija je malo komplikovanija, ali je dostupna i za 32-bitne i 64-bitne računare.Jave 8Naravno, možete instalirati više verzija Jave, ali samo jednu možete dodati u !PATH

JDK download step 1

Page 5: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Kada se otvori stranica sa prethodne slike kliknite na dugme .download JDK

JDK (Java Development Kit) su alati za razvijanje Java programa: kompajler, debager itd. JDK sadrži JRE (Java Runtime Environment) koji služi za pokretanje Java programa (JVM, Java API klase itd).

Na sljedećoj slici kliknite na "jdk-8u131-windows-x64.exe".To je instalacija za 64-bitni Windows.Ako znate da imate 32-bitni Windows onda skinite tu verziju...

JDK download step 2

Preporučujem da Javu instalirate u folder pod nazivom .C:\Java

Ovo ne morate raditi ali je korisno kada vam treba više verzija Jave.Također, neki programi na Windowsu imaju problema kada putanja sadrži razmak, zato nećemo instalirati u ...Program Files

Napomena: Ne trebate instalirati i JRE!Kada vam dođe prozor za JRE kliknite Cancel! (iksić).Upravo sam vam uštedio 100-tinjak megabajta, nema na čemu... :D

Dakle, kada se završi download, otvorite instalaciju i kliknite Next.

Page 6: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

JDK folder

Zatim kliknite dugme "Change..." i prepravite putanju foldera na .C:\Java\jdk1.8.0_131

JRE će već biti instaliran zajedno sa JDK! Tako da nam ne treba još jedna instalacija...

JRE, nope!

Page 7: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

4

Dodavanje PATH varijabliDio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu.Otvorite na Windowsu (desni klik na My Computer -> Properties). Computer Properties

Otvoriće vam se sljedeći prozor:

Computer Properties

Kliknite na Advanced System Settings. Dobićete sljedeći prozor:

Page 8: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

5

System Properties

Otvorite tab i kliknite .Advanced Environment Variables...

Dodajte 3 sistemske varijable u donji prozor (u System Variables):

Naziv varijable Vrijednost

JAVA_HOME C:\Java\jdk1.8.0_131

JDK_HOME %JAVA_HOME%

JRE_HOME %JAVA_HOME%\jre

Glavno, otvorite varijablu i dodajte na kraj.PATH ;%JAVA_HOME%\bin

Nemojte zaboravit tačkazarez kopirati! :DBez navodnika, naravno! Kliknite Ok, Ok...

To je to! Uspješno ste instalirali Javu! :)Stanje bi trebalo biti otprilike ovako:

Page 9: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

6

System Properties

ProvjeraDa bi provjerili jesmo li uspješno obavili zadatak, otvorićemo Command Prompt (kod Linuxaša se rekne Shell).Otvorite Start, ukucajte i kliknite . Ukucajte .cmd Enter java -version

Ako dobijete poruku 'java' is not recognized as an internal or external nešto nije uredu, provjerite sve korake command, operable program or batch file.

sekcije ponovo!Dodavanje PATH varijabli

Ako dobijete nešto slično sljedećoj slici, sve je OK:

Page 10: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

7

 

Java verzija

Page 11: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

JShellDa bi se igrali sa JShellom morate imati instaliranu Javu verzije 9 ili više.Ispratite .sekciju za instalaciju

Koristićemo JShell program za upoznavanje i igranje s Java jezikom.Otvorite konzolu (bez ikakvog straha! :D), ukucajte i udarite Enter.jshell

Dobićete tzv. interaktivni shell u kojem možete kucati Javu.Zovu ga još i REPL (Read Evaluate Print Loop), jer dobija unos od nas, evaluira ga, isprinta neki odgovor, i ponavlja ukrug.

Izrazi i operatoriZa početak, JShell možemo koristiti kao primitivni kalkulator.Tako ćemo steći osjećaj kako se ponašaju brojevi u Javi, i usput objasniti neke osnovne koncepte i pojmove.Ako ukucamo u REPL broj 5 i pritisnemo Enter, vidjećemo sljedeće:

REPL je razumio i odgovorio nam da je to vrijednost .5

U programiranju se kaže da je broj . u programiranju ima isto značenje kao i u izraz Izrazmatematici.Dakle, misli se na nešto što ima . Nešto što možemo prikazati, s čim možemo vrijednostbaratati.

Ako se opet prisjetimo (dosadne) matematike, sjetićemo se da se simboli , , , itd. + - *

nazivaju .operatoriPošto smo rekli da je REPL kao kalkulator, da vidimo šta sve možemo uraditi:

jshell>

$1 ==> 5

55

Page 12: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Izgleda da dijeljenje ne radi kako treba... Našli smo grešku! :DAli, nije tako. Java da želimo podijeliti dva broja!podrazumijeva cijelaAko se sjetimo osnovne škole, je ustvari i . :)5 / 2 2 cijelih ostatak 1

Dakle, kada dijelimo dva cijela broja, ustvari radimo "cjelobrojno dijeljenje".

Također, možemo dobiti i ostatak od dijeljenja, pomoću operatora .%

Npr. je .5 % 2 1

Kada želimo koristiti brojeve (sa zarezom), onda moramo poslije broja napisati realnetačku.Tačka se koristi jer se znak zarez koristi za neke druge stvari... Otom potom.Uglavnom, da vidimo kako rade realni brojevi (en. ing point):float

Sada se sve čini onako kako treba. :)

Redoslijed operatora (en. precedence) radi očekivano.Npr. množenje se radi prije sabiranja.Ako želimo baš, baš, biti sigurni da će program raditi kako treba, možemo koristiti zagrade.

jshell>

jshell>

jshell>

jshell>

$2 ==> 4

$3 ==> -3

$4 ==> 21

$5 ==> 2

jshell>

jshell>

jshell>

jshell>

$6 ==> 8.1

$7 ==> 4.4

$8 ==> -11.0

$9 ==> 2.25

+ 2 22 2

- 2 52 5

* 7 37 3

/ 9 49 4

. + .3 0 5 13 0 5 1

. - .7 3 2 97 3 2 9

. * .5 5 -2 05 5 -2 0

. / .9 0 4 09 0 4 0

Page 13: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

VarijablePrimijetite šta REPL ispisuje kao odgovor, poslije svake unesene linije: .$1 ==> 5

Ako ukucamo u REPL vidjećemo sljedeće:$1

Dakle, REPL nam kaže da je varijable jednaka .vrijednost $1 5

Izraz je spremljen u , koju možemo koristiti umjesto broja .5 varijablu $1 5

Šta je to varijabla?Zamislite da imate kutije raznih oblika i dimenzija.Varijabla je baš kao koji vi želite. Npr. kutija u kojoj kutija sa natpisomčuvamo neki broj.

Kreiraćemo novu varijablu pod nazivom , za čuvanje egera (en. "integer" brojJabuka int

je cijeli broj).Ovo je tip varijable (veličina i oblik kutije)! Kasnije ćemo govoriti malo detaljnije o int

tipovima.

Pošto nismo dali vrijednost našoj varijabli, Java nam pomaže tako što postavlja na vrijednost .brojJabuka 0

Obično je to ono što želimo, ali je najbolje postaviti početnu vrijednost , čim eksplicitnouvodimo novu varijablu. Tako odmah znamo koja joj je početna vrijednost i ne moramo razmišljati o tome... :)To radimo ovako:

jshell>

jshell>

$10 ==> 6

* 2

$11 ==> 8

jshell>

$1

$1 ==> 5

jshell>

brojJabuka ==> 0

| created variable brojJabuka : int

+ * 2 2 22 2 2

( + 2 22 2)

brojJabuka;intint

Page 14: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

4

Vrlo jednostavno, nakon naziva varijable slijedi znak jednako i vrijednost, ovdje je to .0

Primijetite da ovaj znak jednakosti već operacija dodjele!nije matematička jednakostTj. kao da kažemo "postavi varijablu na nulu!".brojJabuka

Varijablu možemo izmijeniti, tj. postaviti na novu vrijednost:

Sada je vrijednost promijenjena na . Nakon ove linije, gdje god koristimo 5 brojJabuka

to je kao da napišemo .5

Također, možemo iskoristiti da bismo dobili novu:prethodnu vrijednost varijable

U izrazu , vrijednost odnosi se na brojJabuka + 1 brojJabuka zadnju vrijednost , dakle vrijednost prije ove linije, tj. .varijable 5

Postoji i skraćena verzija za ovo, prikazana na liniji 3, s operatorom .+=

Također imaju skraćene verzije i za oduzimanje, množenje, dijeljenje i modulo: , , -= *=

, respektivno./= %=

Ovo "respektivno" je fancy izraz za "u navedenom redoslijedu". :D

Nazivi varijabliNazivi varijabli i tipova (en. identifiers) ne mogu imati razmake u sebi, ne mogu biti nijedna od rezervisanih riječi kao što je , .class int

Ne mogu biti neki rezervisani znakovi, kao npr. , itd., &

Ne mogu počinjati brojem. Primjeri nevalidnih naziva varijabli (isprobajte u JShellu):

int my variable = 5int int = 5int , = 5

jshell>

brojJabuka ==> 0

| created variable brojJabuka : int

jshell>

brojJabuka ==> 5

| assigned to brojJabuka : int

jshell>

jshell>

brojJabuka ==> 6

$23 ==> 7

brojJabuka = ;int 0int 0

= ;brojJabuka 5brojJabuka 5

= brojJabuka + ;brojJabuka 1brojJabuka 1

+= ;brojJabuka 1brojJabuka 1

Page 15: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

5

 

int 5something = 5

Primjeri validnih naziva varijabli:

int _abc = 5int $xyz = 5int Z = 5int t$df_x = 5

Mogu se koristiti simboli i ali ih treba izbjegavati, pogotovo kao prvi karakter u _ $

nazivu varijable!

Preporučeno je (konvencija, dobra praksa) da varijable počinju malim slovom, da su (svaka iduća riječ počinje velikim slovom), npr. .camelCase myVariable

Konstante (varijable koje se neće mijenjati) se pišu velikim slovima i riječi su razdvojene donjom crticom, npr. .MY_CONST

Page 16: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

TipoviVećina ozbiljnih jezika ima . One koji nemaju slobodno izbjegavajte! ;)tipoveTip je apstrakcija koju dati p.j. razumije. Npr. kada napišemo , ovo "int" je tip int broj

varijable "broj".Tako će kompjuter znati, između ostalog, za tu varijablu.koliko memorije da rezervišePošto smo mu dali tu informaciju, onda nam može i ukazati na greške u programu koji pišemo. Npr. da ne možemo sabirati broj i slovo, kruške i jabuke...Također nas može i usmjeriti, npr. reći nam koje su operacije dostupne nad datim tipom, da ne moramo nagađati.

Da vidimo JShell u akciji:

Dakle, Java nam da dodijelimo broj varijabli koja je tipa (cijeli broj).ne da 4.5 int

To ima smisla itekako, jer bismo izgubili ovo "zarez pet"... :)Ako želimo da budemo pametniji od Jave, i da na silu "utrpamo" u to ide ovako:4.5 int

I šta smo dobili? Samo cijeli dio... Ali, nekad nam ovo baš i treba!Uglavnom, pouka je da trebamo slušati šta nam Java poručuje!To radi za naše dobro, nju nije briga ako je rezultat netačan, ako je to što želimo... :D

Naravno, imamo još puno toga reći o tipovima, tek smo "zagrebali površinu"!Npr. kako da grupišemo podatke? Kompleksni brojevi, podaci o ljudima, proizvodima itd?O tom ćemo pričati u poglavlju o klasama. :)

jshell>

jshell>

broj ==> 6

| Error:

| incompatible types: possible lossy conversion from double to int

| broj = 4.5;

| ^-^

jshell>

4.5;

broj ==> 4

broj = ;int 6int 6

= . ;broj 4 5broj 4 5

= (intbrojbroj )

Page 17: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Stringovi i karakteriPrije nego nastavimo dalje, moramo objasniti i stringove, jer se vrlo često koriste.String (iz en. nit, kanafa) koristi se za predstavljanje teksta, tj. niza karaktera.Karakter (en. je simbol) označava jedan simbol, bio to broj, slovo ili neki simbol, characteremoji...

Stringovi se pišu s :dvostrukim navodnicima

Stringovi se tretiraju specijalno u Javi, pa imamo i operator "sabiranja" nad njima.Npr. možemo "sabrati" 2 stringa, string s brojem i sl:

Ovo sabiranje se naziva (en. je nadovezati/spojiti/naštiklati).konkatenacija concatenateRadi dvosmjerno, možemo sabrati i broj sa stringom, npr. .5 + "hepek.abc"

se piše !String s velikim početnim slovom

String u pozadini koristi actere.char

Kao što smo već rekli, je samo jedan karakter.char

Piše se s :jednostrukim navodnicima

jshell>

"Poyy sviete!"

$1 ==> "Poyy sviete!"

jshell>

jshell>

jshell>

jshell>

jshell>

"Ime" + "Prezime"

$2 ==> "ImePrezime"

"x je " + 5

$3 ==> "x je 5"

"x je " + 5 + ", i kad se pomnoži s " + 3 + " daje " +

$4 ==> "x je 5, i kad se pomnoži s 3 daje 15"

"strin" + g

$5 ==> "string"

s ==> "ABC"

( *55

' '

s = String "ABC"String "ABC"

Page 18: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

 

Dakle, karakter ne može biti prazan, niti može sadržati više karaktera.Za ove namjene koristi se ! :)String

Vrlo važne napomene:

string "1" nije isto kao broj 1karakter '1' nije isto kao broj 1string "1" nije isto kao karakter '1'postoje posebne funkcije za pretvaranje iz jednog tipa u drugi, ali otom potom...

jshell>

jshell>

jshell>

jshell>

a

$9 ==> 'a'

| Error:

| empty character literal

| ''

| ^

ab

| Error:

| unclosed character literal

| 'ab'

| ^

slovoA ==> 'A'

' '

''

' '

slovoA = 'A'charchar

Page 19: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

 

NaredbeNaredbe (en. statements) su kao rečenice u govornom jeziku, i obično su u imperativnom obliku, kao da se obraćamo kompjuteru: uradi ovo, izbriši ono, upiši u fajl itd.Deklaracije varijabli su naredbe, npr. , može se čitati kaoint i = 5;

"napravi varijablu s imenom 'i' i dodijeli joj vrijednost 5! ODMAH!".Iako još nismo objasnili funkcije, neke od njih su također naredbe, npr:

Vrlo duga naredba je funkcija za printanje u konzolu.System.out.println

Do sada je JShell to automatski radio za nas, ispisivao vrijednost zadnjeg izraza, u svom nekom predefinisanom formatu... Ovako mi možemo ispisati šta god želimo. Primijetite da ispisani nema navodnika!String

Navodnici se samo !!! Nisu uključeni u samu vrijednost koriste za pisanje stringovastringa. Isto je i sa karakterima.

Da vidimo još par primjera:

Dakle, možemo proslijediti string direktno, ili varijablu koja je string, svejedno. :)Kraj naredbe se označava s (tačkazarez, en. semicolon).;

jshell>

Hello!

jshell>

jshell>

jshell>

;

x je 5

rezultat ==> "x je 5"

;

x je 5

.out.println(System "Hello!"System "Hello!")

.out.println( + System "x je " 5System "x je " 5)

rezultat = + ;String "x je " 5String "x je " 5

.out.println(rezultatSystemSystem )

Page 20: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

Poyy svijete!Vjerovatno vam je do sada dodijao JShell i kucanje u konzoli... :DSada ćemo vidjeti kako se ustvari pokreću Java programi.Sastoji se iz 2 dijela: kompajliranje i pokretanje (en. run).

Kompajler (en. compiler) je program koji provjerava sintaksu našeg programa, da li se poklapaju tipovi itd. te nam ako ih pronađe.prijavljuje greškeI to sve prije nego smo i pokrenuli naš program! Predobro! :DTako smo sigurni da se bar u programu.neke greške neće pojavitiJavin kompajler se zove (skraćeno od Java compiler).javac

Ulaz u kompajler je izvorni tekst programa (en. source code) koji smo napisali (obični tekstualni fajlovi s nastavkom ), a izlaz su fajlovi koji sadrže izvršni kod, koji se .java

može pokrenuti nekako, izvršiti ( fajlovi)..class

Da vidimo napokon kako izgleda obavezni "Hello World" primjer:

Idući korak je pokretanje programa.Java programi se sastoje od naredbi (kod nezavisan od procesora i bytecode

operativnog sistema), koje su vrlo slične mašinskom kodu (specifičnom za svaki procesor).Izlaz iz kompajlera, fajlovi sadrže te naredbe, i njih izvršava tzv. JVM .class bytecode

(Java Virtuelna Mašina).JVM je ustvari program.java

Kompajliranje i pokretanje Java programa

Page 21: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

 

Kada se pokrene prethodno prikazani program dobićemo sljedeći rezultat u konzoli:

Kompajliranje i pokretanje programaSadržaj programa sačuvajte u fajl . Primijetite da se PoyySvijeteApp.java mora zvati

, s nastavkom !isto kao i klasa .java

Kod mene se ovo sve nalazi u folderu .C:\programiranje

Kucamo sljedeće:

To je to, sada možemo nastaviti dalje.Svaki primjer koji budemo radili možete isprobati, nemojte mi slijepo vjerovati na riječ da fercera. :)

KomentariKomentari su tekst koji ne utiče na rezultat programa.Koriste se samo radi objašnjavanja koda, nekom drugom ili nama kad budemo čitali kasnije.Prva vrsta komentara se piše sa 2 kose crte (en. slash) i vrijedi .// do kraja linijeDruga vrsta je višelinijska (en. multiline) i počinje s a završava s ./* */

* komentar2

*/

argumenti

poruka

out poruka

// komentar1

/*

* komentar2

*/

class PoyySvijeteApp {

argumenti public static void main(String[] ) {

poruka String = "Poyy sviete!";

out porukaSystem. .println( );

}

}

1

2

3

4

5

6

7

8

9

10

11

12

C:\programiranje>

C:\programiranje>

Poyy sviete!

sviete!PoyyPoyy

// komentar1

/*

* komentar2

*/

class PoyySvijeteApp {

public static void main(String[] ) {

String = "Poyy sviete!";

System. .println( );

}

}

PoyySvijeteApp.javajavacjavac

PoyySvijeteAppjavajava

Page 22: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

Uslovno grananje toka programaKompjuteri obično izvršavaju naredbe jednu nakon druge tj. sekvencijalno.Međutim, potrebne su nam i naredbe za .uslovno grananjeTo jest, kada želimo izvršiti nešto samo pod datim .uslovimaU Javi za ovu svrhu imamo 2 naredbe: i .if switch

If naredbaGrananje pomoću naredbe je vrlo jednostavno. Ako je ispunjen onda će se taj if uslovdio koda izvršiti. U suprotnom program nastavlja dalje.

Ovo "uslov ispunjen" može biti DA ili NE, tj. ISTINA (en. true) ili NEISTINA (en. false). Ovaj se naziva po matematičaru George Boole-u.tip podatka Boolean

Ako se sjećate logike iz matematike, tablica istine, "I", "ILI", "NE" i ostalih, TO JE TO! :D

Logička operacija "I" (en. and) se u Javi piše kao &&Logička operacija "ILI" (en. or) se u Javi piše kao ||Logička operacija "NE" (en. negate, not) se u Javi piše kao , i piše se prije uslova !

koji negira, npr. .!small

Primjer:

Prethodni kod će ispisati "Nije toplo", jer uslov , tj. izraz uslovToplo nije ispunjen 21.33

je .> 25 false

Ovo se tretira kao !if else jedna naredbaAko želimo da izvršimo više od jedne naredbe u ili bloku, samo ih okružimo if else

zagradama: .if (uslov) { naredbe1... } else { naredbe2... }

Nakon linije 6 program nastavlja normalno sa svojim izvršenjem.

Slijedi i vizuelni dijagram izvršenja ove naredbe:

temperatura

uslovToplo temperatura

uslovToplo

out

out

temperatura double = 21.33;

uslovToplo temperatura boolean = > 25;

uslovToplo if ( ) // može i "if(temperatura > 25)"

outSystem. .println("Toplo je");

else

outSystem. .println("Nije toplo");

1

2

3

4

5

6

double = 21.33;

boolean = > 25;

if ( ) // može i "if(temperatura > 25)"

System. .println("Toplo je");

else

System. .println("Nije toplo");

Page 23: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Možemo imati i više uslova u jednoj naredbi, tj. niz .if-elseif-elseif-...-else

Ovi uslovi bi trebali biti tj. smisleni.međusobno isključivi

Ako napišete if (broj>5) {/* prvi */} else if (broj>7) {/* to nema puno smisla jer ako broj nije veći od 5, ne može biti drugi */}

veći od 7, nema šansone. :DAko jeste veći od 5, biće izvršen prvi blok, ali drugi blok koda NIKAD NEĆE BITI IZVRŠEN!

Ako postoji grana , ona će biti izvršena . Ako ne else ako nijedan uslov nije ispunjenpostoji i nijedan uslov nije ispunjen, ništa neće biti izvršeno od te cijele if naredbe.else

Switch naredbaGrananje pomoću naredbe može učiniti kod dosta preglednijim.switch-case

Ova naredba se koristi umjesto mnoštva if-else grana, od koje svaka grana provjerava je li nekoj vrijednosti.varijabla jednaka

U Javi možete "switchati" cijele brojeve, karaktere, stringove i enumeracije.

Na liniji 2 ispituje se čemu je , naravno.jednaka vrijednost varijable i redom odozgoPrvi slučaj (en. case) koji bude ispunjen će biti izvršen.Ako je vrijednost varijable broj 5, ispisaće se na ekran "Pet".i

Često ne znamo koliko ima mogućih slučajeva, pa onda trebamo odlučiti šta da uradimo po tom pitanju.Za to nam služi ključna riječ . To je ustvari ona grana u naredbi! ;)default else if

i

i

out

out

out

i int = 5;

i switch ( ) {

case 3:

outSystem. .println("Tri");

break;

case 5:

outSystem. .println("Pet");

break;

default:

outSystem. .println("Ne znam...");

break;

}

1

2

3

4

5

6

7

8

9

10

11

12

int = 5;

switch ( ) {

case 3:

System. .println("Tri");

break;

case 5:

System. .println("Pet");

break;

default:

System. .println("Ne znam...");

break;

}

Page 24: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

 

Page 25: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

Ponavljanje naredbiKada želimo ponavljati izvršiti neki dio koda više puta, najjednostavniji način je copy-paste. Kopiramo ga n-puta i završeno! :D

Međutim, ovo nije fleksibilno kada kasnije želimo da izmijenimo taj djelić koda.Tada moramo izmijeniti sve linije... :/

Zato postoje specijalne naredbe za : i .ponavljanje while for

Zovu se još i "petlje", jer se vrlo lahko zapetljati u njima.

While naredbaU sljedećem primjeru želimo izvršavati kod sve dok je neki ispunjen (en. while je uslov"dok").

Naravno, unutar tog bloka , inače se program uslov se mora mijenjati neće nikad zaustaviti.To se naziva i obično nije poželjna... :)beskonačna petlja

Uslov se ispituje u svakoj petlje. Dakle, svaki put kada se dođe do linije 5 uslov će iteracijise ponovo ispitati. Ako uslov nije zadovoljen, petlja se zaustavlja i program se nastavlja izvršavati na liniji 6. Slijedi i vizuelni dijagram izvršenja ove naredbe:

For naredba

i

i

out i

i i

i int = 0;

i while( < 10) {

out iSystem. .println("Cifra i je: " + );

i i = + 1;

}

1

2

3

4

5

int = 0;

while( < 10) {

System. .println("Cifra i je: " + );

= + 1;

}

Page 26: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

 

For naredbaJava ima i tzv. petlje. To su haman-ha petlje s finijom sintaksom.for while

Sljedeći primjer radi isto kao i prethodni sa petljom.while

Uopćena sintaksa for petlje je sljedeća: .for(inicijalizacije; uslov; koraci)

Vidimo da su dijelovi petlje razdvojeni tačkazarezom.for

Umjesto da deklarišemo varijable prije petlje, zgodno je deklarisati ih u sklopu petlje, jer nam poslije petlje one ne trebaju.Za to nam služi dio .inicijalizacije

Dio je isti kao i kod while petlje.uslov

Dio dolazi , isto kao linija 4 u našoj petlji.koraci na kraju petlje while

Koraci obično iz petlje.utiču na uslov za izlazSlijedi i vizuelni dijagram izvršenja ove naredbe:

i i i i

out i

i i i i for (int = 0; < 10; = + 1) {

out iSystem. .println("Cifra i je: " + );

}

1

2

3

for (int = 0; < 10; = + 1) {

System. .println("Cifra i je: " + );

}

Page 27: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

FunkcijePrvo malo terminologije:

Potprogram (en. subprogram, subroutine) je koji možemo pozvati po .dio programa imenuU nekim jezicima pravi se razlika između (potprogram koji ima rezultat), i funkcije

(nema rezultat).procedureJava ih zove... khm... ... :DmetodeJa ću najčešće koristiti termin "funkcija" ili "metoda", kako kad.

Funkcijama se mogu proslijediti , tj. ulazni podaci koje funkcija može koristiti.argumenti

Slijedi primjer funkcije za sabiranje dva cijela broja:

Definicija funkcije ima sljedeće dijelove:

tip vrijednosti koju . Kod nas je to , jer je rezultat sabiranja dva vraća funkcija int

a također .int int

naziv funkcije, kod nas je to "suma"lista parametara u zagradama, ovdje su to brojevi i : .a b int a, int b

Ako nema parametara onda idu samo zagrade, npr. mojaFunkcija()tijelo funkcije u vitičastim zagradamaključna riječ i funkcijereturn rezultat

Da vidimo u JShellu kako da deklarišemo i pozovemo prethodnu funkciju:

a b

a b

a b int suma(int , int ) {

a breturn + ;

}

1

2

3

jshell>

jshell>

jshell>

jshell>

{

}

| created method suma(int,int)

$6 ==> 5

int suma(int , int ) {

return + ;

}

suma(int a, int bintint )

a + b;returnreturn

( , suma 1 4suma 1 4)

Page 28: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

 

Funkcija se poziva navođenjem njenog imena, i parametara unutar zagrada.Npr. .suma(1, 4)

Pošto poziv funkcije vraća vrijednost , možemo je spasiti u varijablu,int

npr. .int rezultat = suma(1, 4)

Dakle, i poziv funkcije je izraz! Čim ga možemo dodijeliti varijabli. :)

Page 29: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

NizoviKada trebamo zapamtiti više vrijednosti , to radimo pomoću (en. array).istog tipa nizaTip niza se piše kao . Ovo "tip" može biti , ili bilo šta drugo. Uglate tip[] int String

zagrade kažu da se radi o nizu, a ne "običnom" tipu.

Kada kreiramo niz, kažemo , gdje je neki broj, mora biti new tip[velicina] velicina

. Dužina niza je fiksna, ne može se promijeniti!int

Kada pristupamo elementu niza, to radimo preko indeksa, tj. rednog broja u nizu.Prvi element ima indeks , drugi ima indeks itd.0 1

Npr. da bi izmijenili prvi element pišemo .niz[0] = 9;

Ovdje nam odmah naumpadaju petlje koje smo naučili, i koje su vrlo korisne while for

pri radu s nizovima.

Ako želimo npr. spremiti ocjene studenta, za to možemo koristiti niz.Recimo da student ima 12 predmeta.

Vidimo da se ponavlja na 2 mjesta, i označava istu stvar, dužinu niza.12

Naravno, to nije dobra praksa, jer ako trebamo promijeniti dužinu niza, to moramo odraditi na više mjesta.Možemo napraviti novu varijablu u koju ćemo spremiti dužinu niza.Npr. i onda koristiti nju umjesto literala .int BR_OCJENA = 12; 12

Ovako je kod puno fleksibilniji.

Međutim, ne znamo uvijek dužinu niza unaprijed. Šta ako pravimo funkciju koja prima niz?Da proslijedimo uvijek i dužinu niza? To bi bilo vrlo nečitljivo i dosadno.Srećom, nizovi u Javi imaju polje (en. property) koje sadrži dužinu niza i zove se .length

Kada kažemo dobićemo dužinu niza. :)ocjene.length

Tako da smo u primjeru mogli/trebali napisati for(int i = 0; i < ocjene.length; .i++)

ocjene

ocjene

ocjene

i i i

out ocjene i

ocjene int[] ; // nije još inicijaliziran, ne bi ga trebali koristiti!

ocjene = new int[12]; // niz od 12 nula (po defaultu se popuni nulama)

ocjene [0] = 9;

i i i for(int = 0; < 12; ++) {

out ocjene iSystem. .println( [ ]);

}

1

2

3

4

5

6

7

8

int[] ; // nije još inicijaliziran, ne bi ga trebali koristiti!

= new int[12]; // niz od 12 nula (po defaultu se popuni nulama)

[0] = 9;

for(int = 0; < 12; ++) {

System. .println( [ ]);

}

Page 30: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Postoji još jedan zgodan način za inicijalizaciju niza.Ako znamo unaprijed šta niz sadrži, možemo odmah dodijeliti te vrijednosti nizu.Pritome ne moramo ni navoditi dužinu niza, jer će nam kompajler pomoći.

Kad smo već kod "zgoda", imamo i tzv. "poboljšanu for petlju" (en. enhanced for loop). Zove se još i "for-each" petlja.Ona se koristi kada želimo da prođemo kroz sve elemente niza.Ako nam treba i indeks onda moramo koristiti običnu for petlju...

Višedimenzionalni nizoviMožemo imati i , itd. Ne postoji ograničenje na dubinu u koju niz nizova niz nizova nizovaidemo. Nizovi sa 2 ili više dimenzija nazivaju se "višedimenzionalni" (en. multidimensional).

Dvodimenzionalni nizovi se zovu još i "matrice" (en. matrix).Matrice se često koriste u igricama i matematičkim programima.Npr. kad trebamo predstaviti stanje šahovske ploče i sl. to možemo uraditi sa matricom.Ugniježdeni nizovi ne moraju imati istu dužinu.

Recimo da imamo zgradu sa različitim brojem stanova po spratu. Svaki red predstavlja jedan sprat, i u svakom spratu imamo br. stanara za svaki stan. Trebamo ispisati koliko koji sprat ima ukupno stanara:

gradovi

grad gradovi

out grad

// array literal

gradovi String[] = { "Sarajevo", "Tuzla", "Mostar" };

// enhanced for loop

grad gradovi for(String : ) {

out gradSystem. .println( );

}

1

2

3

4

5

6

7

brStanaraPoStanovima

i i brStanaraPoStanovima length i

brStanaraSprata

j j brStanaraPoStanovima i length j

brStanaraSprata brStanaraPoStanovima i j

out i brStanaraSprata

brStanaraPoStanovima int[][] = {

{1, 2, 3, 4}, // prvi red (sprat)

{5, 6, 2} // drugi red (sprat)

};

i i brStanaraPoStanovima length i for (int = 0; < . ; ++ ) {

brStanaraSprata int = 0;

j j brStanaraPoStanovima i length j for(int = 0; < [ ]. ; ++ ) {

brStanaraSprata brStanaraPoStanovima i j+= [ ][ ];

}

out i brStanaraSprataSystem. .println("Br. stanara sprata " + + " je: " +

}

1

2

3

4

5

6

7

8

9

10

11

12

// array literal

String[] = { "Sarajevo", "Tuzla", "Mostar" };

// enhanced for loop

for(String : ) {

System. .println( );

}

int[][] = {

{1, 2, 3, 4}, // prvi red (sprat)

{5, 6, 2} // drugi red (sprat)

};

for (int = 0; < . ; ++ ) {

int = 0;

for(int = 0; < [ ]. ; ++ ) {

+= [ ][ ];

}

System. .println("Br. stanara sprata " + + " je: " +

}

Page 31: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

 

Rezultat:

. stanara sprata je: Br 0 10Br 0 10

. stanara sprata je: Br 1 13Br 1 13

Page 32: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

 

Tipovi, opetRekli smo da ćemo nastaviti malo detaljnije o tipovima. :)Java ima 2 vrste tipova: primitivne i referentne.

Primitivni tipoviPrimitivnih tipova ima 8 i to su , , , , , , i boolean char int long short byte double

.float

Pišu se . Ne možemo definisati nove primitivne tipove u Javi!malim slovima

Primitivni tipovi predstavljaju "sirove podatke", većina referentnih tipova ih koristi u pozadini.

Referentni tipoviU referentne tipove ubrajaju se svi tipovi koji .nisu primitivniZato se negdje nazivaju i "neprimitivnim tipovima"...Ove tipove .možemo definisati i mi samiKonvencija je da se pišu velikim početnim slovom.

Već smo vidjeli par primjera ovog tipa: i nizovi.String

U nastavku ćemo vidjeti kako da definišemo klase, koje spadaju u referentne tipove.

ReferenceVarijable koje imaju referentni tip nazivaju se .referenceVAŽNO: Svaka referenca može imati vrijednost !!!null

Primitivne varijable nikada ne mogu biti .null

Page 33: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

KlaseRecimo da imamo zadatak da napravimo program za praćenje učenika u razredu.Za svakog učenika moramo unijeti ime, prezime i prosječnu ocjenu.Trebamo ispisati sve ove podatke i na kraju naći prosjek razreda.

Kako bismo ovo uradili s do sada naučenim konceptima?Imena možemo staviti npr. u niz .String[] imena

Prezimena možemo staviti npr. u niz .String[] prezimena

Ocjene ćemo staviti npr. u niz .double[] prosjeci

Iako ovaj kod radi kako treba, nekako se ne osjećamo dobro zbog njega... :DIndeksi pršte na sve strane, šta ako je jedan od nizova kraći itd?Također, ovi nizovi nam uopće ne govore da su .dio jedne cjelineNeko ko čita ovaj kod mora se dobro zapitati šta oni predstavljaju.To je možda lahko na ovom (namjerno) malom primjeru, ali u projektima s milionima linija koda, niko nema vremena da "razbija glavu"... :)

Ovo je jedan od razloga zašto se uvodi apstrakcija klase.Klasa je recept za pravljenje . Kaže se još i da je objekat .objekta instanca klaseObjekat je obično skup primitivnih varijabli i drugih objekata.Dakle, koristi se za .logičko grupisanje vrijednostiU prethodnom primjeru trebali bismo grupisati ime, prezime i prosjek. Ova nova apstrakcija tj. klasa bi se zvala . To bi izgledalo ovako:Ucenik

imena

prezimena

prosjeci

zbirProsjeka

i i imena length i

out prezimena i imena i

out prosjeci i

zbirProsjeka prosjeci i

prosjekRazreda zbirProsjeka imena length

out prosjekRazreda

imenaString[] ;

prezimenaString[] ;

prosjecidouble[] ;

zbirProsjeka double = 0;

i i imena length i for(int = 0; < . ; ++) {

out prezimena i imena iSystem. .print("U#enik: " + [ ] + " " + [ ]

out prosjeci iSystem. .println(", prosjek: " + [ ]);

zbirProsjeka prosjeci i+= [ ];

}

prosjekRazreda zbirProsjeka imena lengthdouble = / . ;

out prosjekRazredaSystem. .println("Ukupan prosjek razreda: " + )

1

2

3

4

5

6

7

8

9

10

11

12

String[] ;

String[] ;

double[] ;

double = 0;

for(int = 0; < . ; ++) {

System. .print("U#enik: " + [ ] + " " + [ ]

System. .println(", prosjek: " + [ ]);

+= [ ];

}

double = / . ;

System. .println("Ukupan prosjek razreda: " + )

Page 34: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Kreiranje objektaDa bismo kreirali novi objekat klase , koristimo operator :Ucenik new

Ovaj operator poziva "funkciju" koja kreira novi objekat i naziva se .konstruktorKompajler nam za nas, kasnije ćemo vidjeti kako sami automatski kreira konstruktormožemo definisati konstruktor(e).

Polja klaseVrijednosti unutar klase nazivaju se / (en. fields, properties), u ovom polja klase atributislučaju to su ime, prezime i prosjek.Pošto im nismo dodijelili nikakve početne vrijednosti, Java će ih postaviti na defaultne

:vrijednosti

referentne na nullbrojevne primitivne na 0boolean primitivne na false

Dakle, u ovom trenutku, ime ima vrijednost , prezime ima vrijednost , prosjek null null

vrijednost . Idemo im dati neke smislene vrijednosti:0

Odabir polja se piše navođenjem reference, pa tačka, a zatim naziv polja.

Dok nismo zaboravili, prethodni primjer sada izgleda puno bolje i razumljivije:

ime

prezime

prosjek

class Ucenik {

imeString ;

prezimeString ;

prosjekdouble ;

}

1

2

3

4

5

ucenik

ucenik ime

ucenik prezime

ucenik prosjek

class Ucenik {

String ;

String ;

double ;

}

Ucenik = new Ucenik();

. = "Mujo";

. = "Mujanovi#";

. = 4.3D;

Page 35: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

 

ucenici

zbirProsjeka

u ucenici

out u prezime u ime

out u prosjek

zbirProsjeka u prosjek

prosjekRazreda zbirProsjeka ucenici length

out prosjekRazreda

uceniciUcenik[] ;

zbirProsjeka double = 0;

u ucenici for(Ucenik : ) {

out u prezime u imeSystem. .print("U#enik: " + . + " " + . );

out u prosjekSystem. .println(", prosjek: " + . );

zbirProsjeka u prosjek+= . ;

}

prosjekRazreda zbirProsjeka ucenici lengthdouble = / . ;

out prosjekRazredaSystem. .println("Ukupan prosjek razreda: " + )

1

2

3

4

5

6

7

8

9

10

Ucenik[] ;

double = 0;

for(Ucenik : ) {

System. .print("U#enik: " + . + " " + . );

System. .println(", prosjek: " + . );

+= . ;

}

double = / . ;

System. .println("Ukupan prosjek razreda: " + )

Page 36: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

1

Scope, opsegSvaka varijabla u Javi ima svoj scope.Scope je u kom je ta varijabla tj. može se tu koristiti.dio programa vidljivaScope-ovi mogu biti ugniježdeni.Unutrašnji scope može vidjeti/koristiti varijable iz vanjskog scope.Unutrašnji scope može definisati koja se zove kao varijabla u novu varijablu istovanjskom scope!

Postoje dva najvažnija scope-a a to su: scope klase i scope metode.Scope metode je ugniježden u scope klase.Npr. polja klase se mogu koristiti u metodama, ali varijable definisane u metodi se ne mogu koristiti u klasi:

Na liniji 3. vidimo primjer nedozvoljene operacije. Ako se pitate zašto:

Polja objekta se inicijalizuju čim se pozove konstruktor te klase.Metode se pozivaju tj. ručno, on-demand.na zahtjevZato nam Java ne dozvoljava tu operaciju.Također, kompajler ne zna na koje mislimo, da li ono iz ili iz y bla()

... :)meh()

Primijetite i to da varijabla iz s varijablom iz !!!y bla() nema nikakve veze y meh()

To su dva skroz nezavisna bloka, svaki ima svoj scope.

x

y x

y x

class Abc {

x int = 5;

// int z = y + 2; // ovo nije dozvoljeno

void bla() {

y x int = + 1;

}

void meh() {

y x int = + 3;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

class Abc {

int = 5;

// int z = y + 2; // ovo nije dozvoljeno

void bla() {

int = + 1;

}

void meh() {

int = + 3;

}

}

Page 37: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

2

Neki primjeri nedozvoljenog definisanja varijabli su dati u metodi .ne()

Otkomentarišite liniju po liniju da vidite šta će vam kompajler reći.U metodi dati su neki primjeri dozvoljenog korištenja istoimenih varijabli.da()

x

y

i i i

duzina

duzina

str

str

x x x

static void ne() {

x int = 1;

{

// int x = 1; // nope

}

{

y int = 1;

}

// y++; // ne može se koristiti izvan bloka! (isto je i za if, for, while, switch)

// for(int x = 1; x < 5; x++) { } // x vec definisano na pocetku metode

// while(true) { int x = 1; } // x vec definisano na pocetku metode

i i i for(int = 1; < 5; ++) {

// for(int i = 1; i < 5; i++) { } // i vec definisano u vanjskoj petlji

}

}

duzinaint ;

static void da() {

// zasjenjivanje polja (shadowing)

// pošto metoda ima svoj scope,

// dozvoljeno joj je uvesti novu varijablu istog imena kao polje klase

duzina int = 5;

// razli#iti blokovi

{

str String = "abc";

}

{

str String = "abc"; // yep, nije na istom NIVOU

}

// razli#ite petlje/blokovi

x x x for(int = 1; < 5; ++) { }

static void ne() {

int = 1;

{

// int x = 1; // nope

}

{

int = 1;

}

// y++; // ne može se koristiti izvan bloka! (isto je i za if, for, while, switch)

// for(int x = 1; x < 5; x++) { } // x vec definisano na pocetku metode

// while(true) { int x = 1; } // x vec definisano na pocetku metode

for(int = 1; < 5; ++) {

// for(int i = 1; i < 5; i++) { } // i vec definisano u vanjskoj petlji

}

}

int ;

static void da() {

// zasjenjivanje polja (shadowing)

// pošto metoda ima svoj scope,

// dozvoljeno joj je uvesti novu varijablu istog imena kao polje klase

int = 5;

// razli#iti blokovi

{

String = "abc";

}

{

String = "abc"; // yep, nije na istom NIVOU

}

// razli#ite petlje/blokovi

for(int = 1; < 5; ++) { }

Page 38: Scope, opseg - blog.sake · Dio koji slijedi vezan je više za sam rad operativnog sistema (Windows u našem slučaju) nego za Javu. Otvorite Computer Properties na Windowsu (desni

3

 

x x x x x x for(int = 1; < 5; ++) { } // fercera

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

for(int = 1; < 5; ++) { } // fercera

}