Programiranje in programski jeziki - studentski.netstudentski.net/get/ulj_fri_ri3_pr1_sno_zapiski_predavanj_01.pdf · - Programski jezik Java o razvojno okolje, ki ga bomo uporabljali

Embed Size (px)

Citation preview

  • copyleft Anchy R

    1.Programiranje in programski jeziki Programiranje in programski jeziki Kazalo:

    - Kaj je raunalniki program- tiri generacije programskih jezikov

    o znailnosti visokonivojskih programskih jezikov 3. generacije- Programski jezik Java

    o razvojno okolje, ki ga bomo uporabljali pri svojem delu- Primer preprostega programa

    o vsak program napiemo kot razredo metoda main()o pravila za pisanje imen, lepopisna pravila, komentarjio primer slui kot ogrodje kateregakoli programao postopek priprave in izvajanja programa

    Kaj je raunalniki program- zaporedje ukazov, ki naj jih izvede raunalnik- ukazi morajo biti zapisani v nekem programskem jeziku

    tiri generacije programskih jezikov- strojni jezik jezik 1. generacije

    o vsi ukazi in podatki morajo biti zapisani z ustrezno kombinacijo niel in enico neprimeren za loveka

    - zbirni jezik jezik 2. generacijeo vpeljava mnemonikov (imen) za ukaze in podatkeo e vedno zahteva programiranje na nizkem nivoju

    - visokonivojski programski jeziki 3. generacijeo bliji loveku: uporaba posameznih besed iz naravnega jezika (npr. if else; do

    while; print ipd.)o postopkovni: opisati je treba postopek, kako pridemo do reitveo algoritem: z nizom navodil podan postopek za reevanje problemao za opis postopka zadostujejo 3 osnovni programski konstrukti:

    zaporedje ali sekvenca izbira ali selekcija ponavljanje ali iteracija

    o prevajalnik prevede izvorni program v obliko, ki se lahko izvede na raunalnikuo primeri visokonivojskih programskih jezikov: Java, Pascal, Oberon, C, C++, Fortan,

    Cobol, Basic, o sintaksa: pravila za pisanje programov (slovnica)o sintaktino pravilnost preverja prevajalniko logine napake odkrijemo ele med izvajanjem

    - visokonivojski programski jezik 4. generacijeo nepostopkovni: opisati je treba KAJ elimo dobiti kot rezultat, ne pa KAKO

    pridemo do njegao uporabni predvsem za reevanje specifinih problemovo primeri: SQL, Prolog, Mantis

    Stran 1

  • copyleft Anchy R

    - namen predmeta je spoznati osnove programiranja v eni izmed visokonivojskih programskih jezikov 3. generacije

    Programski jezik Java- objektno usmerjen programski jezik 3. generacije

    o razvilo ga je podjetje Sun Microsystems JavaTM Platform Standard edition (J2SETM), verzija 5.0 http:// java.sun.com/

    - splono namenski programski jezik, uporaben za vse vrste aplikacij- glavne prednosti Jave:

    o objektna usmerjenosto neodvisnost od platformeo primernost za razvoj spletnih aplikacijo varnosto relativna enostavnost (v primerjavi s C++)

    - razvojno okoljeo potrebujemo razvojni komplet (JDK Java Development Kit) in preprost

    urejevalnik besedil, npr. Notepad (Belenica)o po namestitvi JDK znotraj izbrane mape dobimo ve podmap

    bin orodja JDK (npr. prevajalnik) demo demonstracijski programi include datoteke za povezavo z izvorno strojno kodo jre izvajalno okolje lib knjinice

    o nastavitev sistemske poti do podmape bin (sistemska spremenljivka PATH)o nastavitev sistemske poti do podmap s prevedenimi programi (sistemska

    spremenljivka CLASSPATH)- kompleksna razvojna orodja

    o NetBeans, Eclipse, JBuilder, JDeveloper, JCreator itd.

    Primer preprostega programapublic class Prvi{

    public static void main (String [] args){

    System.out.println ("Nas prvi program.");}

    }

    Program izpie niz med obema dvojnima narekovajema.- publicclassPrvi

    o deklarira razred z imenom Prvio public je doloilo za nain dostopa do razreda (ang. access modifier)

    dostop je moen iz vseh razredov- class je rezervirana beseda, ki oznauje zaetek deklaracije razreda- ime razreda doloi programer v skladu z naslednjimi pravili:

    o prieti se mora s rko, podrtajem ali znakom za dolaro vsebuje lahko rke, tevilke, podrtaje in znake za dolaro ne sme biti enako nobeni izmed rezerviranih besedo ne sme biti true, false ali null

    Stran 2

  • copyleft Anchy R

    - zgoraj nateta pravila veljajo za vsa imena v Javi- Java razlikuje med velikimi in malimi rkami

    o Prvi in prvi sta razlini imenio priporoila za imena razredov:

    ime razreda naj se zane z veliko zaetnico (npr. Avtomobil) e je ime sestavljeno iz ve besed, se vsaka beseda zane z veliko zaetnico

    (npr. RedniStudent) ne uporabljamo podrtajev (ime Redni_Student je nezaeleno)

    - public static void main (String [] args)o glava metode main

    izvajanje vsakega programa se zane z metodo main, ki je obvezna poleg metode main lahko program vsebuje e druge metode

    o public in static sta doloili za nain dostopa static pomeni, da metoda lahko obstaja samostojno, ne da bi bila vezana

    na posamezne objekte nekega razreda (metoda je enaka (nespremenljiva)) statine metode so v pomnilniku shranjene samo enkrat vsi objekti uporabljajo isti izvod metode

    o void je rezervirana beseda, ki pove, da metoda main ne vrne nobene vrednostio (String [] args) je deklaracija argumentov (parametrov)

    argumenti so podatki, ki jih metoda potrebuje za svoje delo navedemo ji ob klicu metode, npr. sestej (5,10); ali sestej (a,b); tudi e metoda main ne potrebuje argumentov morajo biti deklarirani String pove, kaknega tipa so argumenti: nizi znakov args je skupno ime za vse argumente oglata oklepaja oznaujeta, da argumenti tvorijo tabelo nizov

    - System.out.println ("Nas prvi program.");o stavek, ki izpie niz "Nas prvi program."o na koncu vsakega stavka je podpijeo nije zaporedje znakov med dvema dvojnima narekovajemao println je ime metode za izpiso metoda println pripada objektu out, ki spada v razred Systemo tipina notacija za klicanje metod: ..

    - zaviti oklepaji {}o oznaujejo zaetek in konec posameznih blokovo nastopajo vedno v parih

    prvi par: zaetek in konec deklaracije razreda Prvi drugi par: zaetek in konec deklaracije metode main

    - lepopisna pravilao v Javi ni posebnih pravil glede presledkov, zamikov, skokov v novo vrstico ipd.o zaradi bolje itljivosti upotevamo naslednja pravila:

    zaetni in konni oklepaj sta eden pod drugim vsak blok zamaknemo desno za nekaj presledkov vse stavke, ki pripadajo istemu bloku, piemo enega pod drugim

    - komentarjio zaradi bolje dokumentacije programao tri vrste komentarjev:

    vrstini komentar: preostanek vrstice, ki sledi // je komentar

    Stran 3

  • copyleft Anchy R

    bloni komentar: tekst med /* in */ javadoc komentar: tekst med /** in */

    - zakljuna ugotovitevo eprav e ne razumemo v celoti pomena vseh sestavnih delov, smo spoznali lupino,

    ki predstavlja ogrodje vsakega programapublic class {

    public static void main (String [] args){

    //stavki ki se izvedejo}

    }

    - postopek poprave in izvajanja programao program napiemo z urejevalnikom besedil, npr. Notepad

    izvorni program moramo shraniti kot navadno besedilo datoteka z izvornim programom mora imeti podaljek java npr. Prvi.java

    o program prevedemo z ukazom javac Prvi.java obstajati mora pot do prevajalnika; npr. path=c:\java\bin e se datoteka z izvornim programom nahaja v drugi mapi (poddirektoriju),

    moramo pred imenom datoteke navesti e pot npr. javac c:\mojiProgrami\Prvi.java

    program se prevede v vmesno kodo (ang. bytecode), ki je sestavljena iz mnoice virtualnih, od platforme neodvisnih ukazov

    vmesna koda je shranjena na datoteki s podaljkom class, npr. Prvi.classo izvajanje programa sproimo z ukazom java Prvi

    virtualni ukazi se izvedejo na t.i. virtualnem raunalniku (JVM- Java Virtual Machine)

    uporaba vmesne kode omogoa platformno neodvisnost, vendar upoasni izvajanje, ker je treba med izvajanjem interpretirati virtualne ukaze

    o napake sintaktine napake odkrije prevajalnik

    vmesna koda se generira ele, ko odpravimo vse sintaktine napake logine napake se pojavijo med izvajanjem

    kljub temu, da je program sintaktino pravilen, ne dela tako, kot smo si zamislili

    postopnost pri razvoju omogoa sprotno odpravo napak

    Stran 4

  • copyleft Anchy R

    2.Osnovni podatkovni tipiOsnovni podatkovni tipi Kazalo:

    - Pojem podatkovnega tipao zakaj je pomemben

    - Osem osnovnih podatkovnih tipovo za tiste vrste podatkov, ki se najpogosteje uporabljajoo glavne znailnosti vsakega tipao operacije, ki jih lahko izvajamo

    - Deklaracije spremenljivko podatki, ki jih obdelujemo, so shranjeni v spremenljivkaho uporabo vsake spremenljivke moramo prej napovedati: deklaracija

    Pojem podatkovnega tipa- vsak podatek pripada tono doloenemu tipu- tip podatka doloa:

    o zalogo vrednosti, ki jih lahko podatek zavzameo operacije, ki jih lahko izvajamo med podatkom

    Osem osnovnih podatkovnih tipov- v Javi imamo 8 osnovnih podatkovnih tipov

    o numerini tipi (za predstavitev tevil): za cela tevila: byte,short,long,int

    vsako tevilo je predstavljeno z ustrezno kombinacijo enic in niel e imamo na voljo n bitov, lahko zapiemo 2n razlinih tevil glavni problem: mnoica celih tevil je omejena (eprav je v

    matematiki neskonna)tip bitov minimalna vrednost maksimalna vrednostbyte 8 128 127short 16 32768 32767int 32 2 147 483 648 2 147 483 647long 64 9 223 372 036 854 775 808 9 223 372 036 854 775 807

    najpogosteje operacijeoperator opis primer+ setevanje 32+3, rezultat je 35- odtevanje 32-3, rezultat je 29* mnoenje 32*3, rezultat je 96/ deljenje 32/3, rezultat je 10% ostanek 32%3, rezultat je 2

    pozor: rezultat celotevilskih operacij je vedno tipa int ali long, etudi so operandi (podatki) samo tipa byte ali short

    posebne aritmetine operacije: bitni operatorjioperator opis primer za tevili 1027 in 102

    & bitni IN 00011011 & 00000010 = 00000010 = 102

    Stran 5

  • copyleft Anchy R

    | bitni ALI 00011011 | 00000010 = 00011011 = 1027^ ekskluzivni ALI 00011011 ^ 00000010 = 00011001 = 1025~ bitna negacija ~00011011 = 11100100 = 1028

    >00000010 = 00000110 = 106

    11100100>>00000010 = 11111001 = 107>>> pomik v desno z vstavljanjem

    niel00011011>>>00000010 = 00000110 = 106

    11100100>>>00000010 = 101073741817

    za realna tevila: float,double predstavitev s pomino vejico (ang. floating point) zapis vsakega tevila je sestavljen iz treh delov

    predznak: prvi bit (0 pozitivno tevilo; 1 negativno tevilo)

    mantisa: za zapis decimalnih mest karakteristika: za zapis eksponenta

    primer: 3135,698435 0,135698 10= glavni problem: zaradi omenjenega tevila bitov za predstavitev

    mantise ni mo predstaviti vseh decimalk (zaokroitvena napaka)tip bitov minimalna vrednost maksimalna vrednost tevilo tonih

    decimalnih mestfloat 32 451,4 10 383,4 10 6 do 7double 64 3244,9 10 3081,8 10 14 do 15

    raunanje z realnimi tevili na voljo so operatorji +, -, * in /

    pretvorbe med numerinimi tipi pri setevanju (mnoenju, deljenju, odtevanju) dveh tevil

    istega tipa je tip rezultata enak tipu obeh podatkov pri setevanju (mnoenju, deljenju, odtevanju) dveh tevil

    razlinega tipa je rezultat enak vijemu od obeh tipov; pretvorba se izvri avtomatsko

    primer: e setejemo tipaint in float, je rezultat tipa float pretvorba iz vijega tipa v niji se lahko izvri na zahtevo

    programerja (ang. type casting)o za logine vrednosti: boolean

    tip boolean zavzame lahko samo 2 vrednosti

    true (resnino, da, 1) false (neresnino, ne, 0)

    nad podatki tipa boolean lahko izvajamo logine operacije konjunkcija (IN, AND): &&

    rezultat je true, e imata oba operanda vrednost true disjunkcija (ALI, OR): ||

    rezultat je true, e ima vsaj eden od operandov vrednost true negacija (NOT): !

    Stran 6

  • copyleft Anchy R

    e ima operand vrednost true, postane false in obratno kratkostino ovrednotenje konjunkcije in disjunkcije

    recimo, da sta p in q dva pogoja, ki sta lahko izpolnjena ali ne p && q: e ima p vrednost false, potem vrednosti q sploh ni treba

    izraunati, saj je rezultat v vsakem primeru false p || q: e ima p vrednost true, potem vrednosti q ni treba

    izraunati, saj je rezultat v vsakem primeru true prednosti kratkostinega ovrednotenja

    hitreje izvajanje enostavneje programiranje: if(x!=0 && y/x>10)

    polno ovrednotenje konjunkcije in disjunkcije namesto operatorjev && in || uporabimo & in | operatorja & in | imata dva pomena

    pri celih tevilih pomenita bitni IN oziroma ALI pri loginih vrednostih pomenita polno ovrednoten logini IN

    oziroma ALI rezultat, ki ga dobimo pri primerjanju dveh vrednosti jeboolean primerjalni operatorji so prikazani v spodnji tabeli:

    operator opis primer za true primer za false< manje kot 55 5>7

    =7== enako 5==5 5==6!= ni enako 8!=6 5!=5o za znake: char

    tip char slui za predstavitev posameznih znakov znak zapiemo med dvojnima narekovajema, npr. 'a', 'A', '$',

    ':', '?'

    neizpisljive znake zapiemo s pomojo ubenih sekvenc (ang. escape sequence)

    ubena sekvenca opis ubena sekvenca opis\t tab \r carriage return\n new line \" dvojni narekovaj\f form feed \' enojni narekovaj

    interna predstavitev znakov Java uporablja kodno shemo Unicode v pomnilniku je vsak znak predstavljen s 16-bitno kodo kodo lahko interpretiramo tudi kot celo tevilo, sestavljeno iz 16

    niel in enic primer: koda znaka A je 0000 0000 0100 0001 ali 160041 vsak znak lahko tako zapiemo na 2 naina:

    o med dvema enojnima narekovajema: 'A'o z njegovo estnajstiko kodo: '\u0041'o \u je ubena sekvenca, ki napove numerino kodo

    Stran 7

  • copyleft Anchy R

    znake lahko primerjamo med sabo s primerjalnimi operatorji pozor: nizi znakov so tipa String, posamezni znaki so tipa char

    Deklaracije spremenljivk- spremenljivka: lokacija (celica) v pomnilniku, v kateri shranimo neko vrednost- vse spremenljivke morajo biti deklarirane- ob deklaraciji navedemo:

    o tip spremenljivkeo ime spremenljivkeo zaetno vrednost (neobvezno)o podpije

    - primer:o int vsota; //brez inicializacije o double produkt = 234.5; //z inicializacijo

    *inicializacija=zaetna vrednost (spremenljivke)

    Stran 8

  • copyleft Anchy R

    3.Stavki programskega jezika JavaStavki programskega jezika Java Kazalo:

    - Prireditveni staveko v spremenljivko shranimo neko vrednosto raunanje izrazov in prioriteta operatorjev

    - Izbirni stavki (if in switch, pogojni operator)o izbiramo med ve razlinimi monostmi za nadaljevanje programa

    - Ponavljalni stavki (dowhile, while, for)o omogoajo, da se del programa vekrat ponovi

    - Stavka break in continue- Kraji zapis prireditvenih stavkov- Program za izpis monih potez lovca na ahovnici

    Prireditveni stavek- splona oblika: = ;- izraz (ang. expression) je raunska formula ali predpis, na podlagi katerega izraunamo

    neko vrednost. Ta vrednost se shrani v spremenljivko, ki je navedena na levi strani- skladnost tipov: tip izraza se mora ujemati s tipom spremenljivke- izrazi z numerinimi operandi razlinih tipov

    o avtomatina pretvorba v tip najvijega operandao pretvorbo v niji tip mora eksplicitno zahtevati programer (ang. type casting)

    - izrazi z numerinimi operandi razlinih tipovint a=10;short b=5;int rez1;float rez2;short rez3;byte rez4, rez5;

    rez1 = a*b; // 50 tipa intrez2 = a*b; // 50.0 tipa floatrez3 = (short) (a*b); // 50 tipa shortrez4 = (byte) (a*b); // 50 tipa byte

    //napaka zaradi prekoraitve obsega rez5 = (byte) (rez4*b); //-6 tipa byte

    - prioriteta operatorjevo operacije se izvajajo od leve proti desni v skladu s spodaj navedeno prioriteto

    operaterjevo vrstni red lahko spremenimo s pomojo oklepajev

    PRIORITETA OPERATORJI SIMBOLInajvija unarni operatorji

    mnoenje, deljenjesetevanje, odtevanjepomikprimerjanjeenakost, neenakostbitni IN

    - ! ~* / %+ -> >>>> < >=

  • copyleft Anchy R

    najnija

    bitni ekskluzivni ALIbitni ALIlogini INlogini ALIpogojniprirejanje

    ^|&&| |? :=

    Opomba: Manjkajo e nekateri operatorji, ki jih bomo spoznali kasneje

    Izbirni stavki- omogoajo, da izmed ve razlinih zaporedij stavkov izberemo tisto, ki naj se izvede

    o stavek if oziroma ifelse stavek if: izbira na podlagi pogoja, ki ima lahko vrednost true ali false ogledali si bomo tri primere (za if oziroma ifelse):

    izbira v primeru enega samega zaporedja stavkovif (){// stavki, ki se izvrijo, e je pogoj true}

    izbira med dvema razlinima zaporedjema stavkov (z dodatkom else)

    if (){ // stavki, ki se izvrijo, e je true}else{ // stavki, ki se izvrijo, e je false}

    izbira med ve razlinimi zaporedji stavkov (gnezdenje stavkov if)if (){ // stavki, ki se izvrijo, e je true}else{ // stavki, ki se izvrijo, e je true}else{ // stavki, ki se izvrijo, e nobeden izmed prej natetih pogojev ni izpolnjen}

    o stavek switch izbira poteka na podlagi vrednosti nekega izraza (spremenljivke)

    izraz (spremenljivka) mora biti celotevilski ali tipa char vsako zaporedje stavkov "oznaimo" z eno izmed monih vrednosti izvede se tisto zaporedje, pri katerem se "oznaka" ujema z vrednostjo

    izraza primeren je takrat:

    kadar poteka izbira na podlagi ene same celotevilske ali znakovne spremenljivke

    kadar je tevilo razlinih vrednosti omejeno

    Stran 10

  • copyleft Anchy R

    primer uporabe stavka switch:switch (ocena) // vsebuje oceno od 1 do 10{ case 6:

    System.out.println ("zadostno");break;

    case 7:System.out.println ("dobro");

    break; case 8;

    System.out.println ("prav dobro");break;

    case 9;System.out.println ("prav dobro");break;

    case 10;System.out.println ("odlino");break;

    default:System.out.println ("nezadostno");

    }

    splona oblikaswitch (){ case :

    // zaporedje stavkov, ki ustreza vrednosti break;

    case :// zaporedje stavkov, ki ustreza vrednosti break;

    default:

    // zaporedje znakov, ki se izvri, e vrednost izraza ne ustreza nobeni konstanti}

    o pogojni operator (? :) pogojni operator (ang. conditional operator) omogoa izbiro med dvema

    izrazoma splona oblika: ? : e je pogoj izpolnjen, vrne vrednost, ki jo doloa izraz1, v

    nasprotnem primeru pa vrne vrednost, ki jo doloa izraz2 primer:

    vecji = (a>b) ? a : b;

    //je isto kot:

    if(a>b)veji=a;elseveji=b;

    Ponavljalni stavki- s stavki za ponavljanje doseemo, da se doloeno zaporedje ukazov vekrat ponovi (zanka)

    o stavek do while

    Stran 11

  • copyleft Anchy R

    reitev za izraun vsote s=1+2+3+4++200public class Vsota1{

    public static void main (String args []){

    int s=0; //zaetna vrednost vsoteint i=1; //prvi len, zaetna vrednost tevca

    do{

    s=s+i; //pritevanje lenai=i+1; //naslednji len, poveanje tevca

    } while (i

  • copyleft Anchy R

    reitev za izraun vsote s=1+2+3+4++200public class Vsota2{ public static void main(String[] args) { int s=0; // zaetna vrednost vsote int i=1; // prvi len, zaetna vrednost tevca while (i

  • copyleft Anchy R

    nato se preveri pogoj za ponavljanje e je pogoj izpolnjen, se izvri jedro zanke na koncu jedra se povea/zmanja tevec sledi ponovno preverjanje pogoja za ponavljanje itd.

    stavek for se obnaa podobno kot stavek while pogoj na zaetku mono je, da se jedro zanke ne izvri niti enkrat

    kadar tevilo iteracij ni vnaprej znano, ne moremo uporabljati stavka for v kombinaciji s stavkom break

    reitev za izraun vsote s=1+2+3+4++200public class Vsota3{ public static void main(String[] args) { int s=0; for (int i=1; i

  • copyleft Anchy R

    }}

    - stavek continueo preskok preostalih stavkov v jedru zankeo e vedno ostanemo v zanki

    for(){

    // nekaj stavkovif() continue;// e nekaj stavkov

    }

    Kraji zapis prireditvenih stavkov (uporaba blinjic)- pogosto sreamo prireditvene stavke naslednje oblike:

    o s=s+i;o i=i+1;

    - za zgornja stavka obstaja kraji zapis:o s+=i;o i+=1;

    o operator += zdruuje operaciji setevanja in prirejanja vrednosti- podobne blinjice so definirane tudi za ostale aritmetine operacije

    o s=i; je isto kot s=si;o s*=i; je isto kot s=s*i;o s/=i; je isto kot s=s/i;

    - za pritevanje in odtevanje enice lahko uporabljamo unarna operatorja ++ in o i++; je isto kot i+=1; ali i=i+1;o i; je isto kot i=1; ali i=i1;

    - operatorja ++ in lahko uporabljamo v prefiksni ali postfiksni oblikio prefiksna oblika ++i: vrednost i se najprej povea, ele nato uporabi

    b=4; c=++b; // c dobi vrednost 5

    o postfiksna oblika i++: vrednost i se najprej izvri, ele nato poveab=4; c=b++; // c dobi vrednost 4

    o v obeh zgornjih primerih dobi b vrednost 5

    Program za izpis monih potez lovca na ahovnici- recimo, da se lovec nahaja v tretji vrstici in drugi koloni ahovnice- napisati elimo program, ki bo izpisal vse mone poteze v naslednji obliki

    BCB*BCBC*B*BCBCBB*BCBCBC B belo polje*B*BCBCB C rno poljeBCB*BCBC * - mona potezaCBCB*BCBBCBCB*BCCBCBCB*B

    - program bomo razvijali postopomao zaetni poloaj doloata spremenljivki zacVrstica in zacKolonao izpis ahovnice poteka v zanki: ob vsakem prehodu izpiemo eno vrsticoo tudi izpis vrstice poteka v zanki: ob vsakem prehodu izpiemo eno polje

    int zacVrstica=3, zacKolona=2;int v,k;

    Stran 15

  • copyleft Anchy R

    for (v=1; v

  • copyleft Anchy R

    4.MetodeMetode Kazalo:

    - Kaj so metode, zakaj jih uporabljamo, kako jih deklariramo- Primeri metod

    o metoda brez argumentovo metoda z argumenti (parametri)

    vloga parametrov, formalni in dejanski parametri klicanje metod prenos parametrov

    o metode, ki vraajo vrednost- Rekurzija: metoda klie samo sebe

    o izraun n-tega Fibonaccijevega tevilao primerjava rekurzivne in iterativne reitve

    - Zgledi: perfektna tevila, izraun vsote tevilske vrste- Oblikovanje izpisa in branje podatkov

    Kaj so metode, zakaj jih uporabljamo, kako jih deklariramo- zaporedje stavkov, ki ima svoje ime

    o ime omogoa, da to zaporedje pokliemo z razlinih mest v programu- uporaba

    o ko se zaporedje stavkov ponovi na ve razlinih mestiho ko je treba sprogramirati nek zaokroen (pod) problemo ko se treba sprogramirati operacijo, ki jo izvaja nek objekt

    Primeri metod- metoda brez argumentov

    o vrste metod metode, ki ne vraajo vrednosti (procedure)

    poudarek je na postopku klic take metode je samostojen stavek

    metode, ki vraajo vrednosti (funkcije) pudarek je na vrednosti klic take metode je sestavni del izraza v Javi lahko klic funkcije tudi samostojen stavek

    deklaracije metode glava metode: prva vrstica, s katero damo metodi ime odprt zaviti oklepaj telo metode: stavki, vkljuno z deklaracijami lokalnih spremenljivk zaprt zaviti oklepaj

    glava metode doloila glede na nain dostopa (ang. access modifiers)

    zaenkrat public static tip rezultata

    Stran 17

  • copyleft Anchy R

    ime metode seznam argumentov (med dvema okroglima oklepajema)

    lahko je prazen za vsak argument navedemo njegov tip in ime argumenti so med seboj loeni z vejicami

    metoda za izpis naslova fakultete (metoda brez argumentov)class NaslovFRI{ public static void main(String[] args) { naslov(); }

    public static void naslov() { System.out.print("Fakulteta za raunalnitvo"); System.out.println(" in informatiko"); System.out.println(); System.out.println("Traka 25"); System.out.println("1000 Ljubljana"); }}

    izpie:Fakulteta za raunalnitvo in informatiko

    Trzaka 251000 Ljubljana

    - metoda z argumentio vloga parametrov, formalni in dejanski parametri

    z argumenti posredujemo metodam podatke, ki jih le-te potrebujejo za svoje delo

    primer 1: metoda za rezervacijo mize v restavraciji smiselni argumenti: datum, ura, tevilo oseb posledica: z isto metodo lahko izvrimo katerokoli

    rezervacijo primer 2: izraun obresti pri enoletni vezavi

    s miselna argumenta: glavnica, obrestna mera (v %) posledica: z isto metodo lahko izraunamo obresti za

    poljubno glavnico in poljubno obrestno mero formalni in dejanski parametri

    formalni parametri: argumenti/parametri, ki jih navedemo od deklaraciji

    sluijo samo za opis postopka postopek se izvri nad dejanskimi parametri (argumenti) dejanske parametre navedemo ob klicu metode

    primer metode z dvema argumentoma: izraun stanja po enoletni vezavi sredstev

    public static void poEnemLetu (double glavnica, double obrMera){ double novoStanje;

    Stran 18

  • copyleft Anchy R

    novoStanje = glavnica + glavnica * obrMera/100; System.out.println ("Po enem letu dobimo " + novoStanje);}

    klic metode poEnemLetu poEnemLetu (100000, 9.5); double gl = 100000.0, obr = 9.5;

    poEnemLetu (gl, obr);o klicanje metod

    ob klicu metode navedemo ime metode

    za metode iz drugih razredov je treba navesti tudi ime razreda dejanske parametre (v oklepaju)

    formalni in dejanski parametri se morajo ujemati v tipu tevilu vrstnem redu (istoleni parametri se zamenjajo)

    dejanski parameter je lahko konstanta spremenljivka izraz

    navedene spremenljivke se prenaajo po vrednosti, objekti pa po referencio prenos parametrov po vrednosti

    metoda dobi kopijo dejanskega parametrapublic class PrenosPoVrednosti{ public static void main(String[] args) { int x=10; spremeniX(x); System.out.println(x); // izpie 10 } public static void spremeniX(int x) { x+=2; System.out.println(x); // izpie 12 }}

    - metode, ki vraajo vrednosti (funkcije)o metoda lahko vrne vrednost kakrnegakoli tipa

    enostavnega tipa tipa razred

    o deklaracija metode, ki vraa vrednost v glavi mora biti naveden tip rezultata v telesu mora biti prisoten stavek return

    o stavek return doloa vrednost, ki naj jo metoda vrne obiajno zadnji stavek v metodi

    Stran 19

  • copyleft Anchy R

    splona oblika: returno primer metode, ki vraa vrednost

    izraun stanja po enoletni vezavi sredstevpublic static double poEnemLetu(double glavnica, double obrMera){ double novoStanje; novoStanje = glavnica + glavnica * obrMera / 100; return novoStanje; // namesto izpisa vrne vrednost}

    klic metode poEnemLetu ns=poEnemLetu(100000,9.5); double gl=100000,obr=9.5;

    System.out.print(Novo stanje: +poEnemLetu(gl,obr));

    - rekurzija: metoda klie samo sebeo o rekurziji govorimo takrat, kadar metoda klie samo sebe

    uporaba rekurzije je smiselna takrat, kadar je problem definiran rekurzivno primer: izraun n-tega Fibonaccijevega tevila

    fibn = fibn-1 + fibn-2 n>1fib0 = 0,fib1 = 1

    public static int fib(int n){ if (n

  • copyleft Anchy R

    { int x=1,y=0; // zadnje in predzadnje Fibonaccijevo tevilo int z; //zaasna pomona spremenljivka (izraun x-sa) for (int i=2; i

  • copyleft Anchy R

    21 +=+ jj kk

    ))1(*(*

    11

    2

    1

    =++

    +jj

    jj kk

    xclenclen

    *iz prosojnic:k+=2;clen=-clen*x*x/(k*(k-1));

    - zaetna vrednost lena in pomone spremenljivke kclen0 = x k0 = 1

    - doloitev zaetnih vrednosti: prvi len upotevamo v inicializacijidouble clen=x, vsota=clen;int k=1;

    - preverjanje doseene natannostio s pritevanjem lenov prenehamo, ko absolutna vrednost lena postane manja od

    510

    o funkcijo, ki vrne absolutno vrednost, dobimo v razredu Mathdouble clen=x, vsota=clen;int k=1;while (Math.abs(clen)>=1e-5){

    k+=2;clen=-clen*x*x/(k*(k-1));vsota+=clen;

    }return vsota;

    primer, ki ga je pokazal na predavanjihpublic class MatFunkcije{ static double eps=0.00001;

    public static double sinus(double x) { double vsota, clen; int k; clen=x; k=1; vsota=clen; while (Math.abs(clen)/Math.abs(vsota)>eps) { k+=2; // k=k+2; clen=-clen*x*x/(k*(k-1)); vsota+=clen; // vsota=vsota+clen; } return vsota; }}

    vaja: Napiite program, ki izpie vrednosti kotne funkcije sinus za vse kote od 0 do 360 stopinj z intervalom 30 stopinjKot sinus0 xx30 xx60 xx

    reitev:

    Stran 22

  • copyleft Anchy R

    public class Tabela{ public static void main(String[] args) { int kot; System.out.println("Kot Sinus"); System.out.println("--------------------------"); for (kot=0; kot

  • copyleft Anchy R

    metoda za branje realnih tevil: preberiDouble() metoda za branje nizov: preberiString()

    primer uporabeint st;String bes;double re;

    st = BranjePodatkov.preberiInt ();bes = BranjePodatkov.preberiString ();re = BranjePodatkov.preberiDouble ();

    vaja:Napiite program, ki prebere 5 primerov krogov in izpie koliko krogov je v celoti znotraj kvadrata, koliko krogov seka kvadrat in koliko krogov je izven kvadrata s stranico a=10. Sredie vseh krogov je v teiu kvadrata.1. primer:public class prva{ static final int N=5; // tevilo krogov ti dve sta konstanti (z veliko!!!!!!!!!!!!!!) ;-) static final int A=10; // stranica kvadrata

    public static void main(String[] args) { double premer; int v=0,izven=0,seka=0; for (int i=1;i

  • copyleft Anchy R

    {v++;

    }else if(d

  • copyleft Anchy R

    break;}case 6:{

    st6++;}

    }}System.out.println(st1+" "+st2+" "+st3+" "+st4+" "+st5+" "+st6);

    }}

    Stran 26

  • copyleft Anchy R

    5.Razredi in objektiRazredi in objekti Kazalo:

    - Osnovni koncepti OOP: razred, objekt, atribut, metoda- Programiranje razredov

    o deklaracije atributovo deklaracije metodo deklaracije konstruktorjev

    - Kreiranje objektovo operator new: generira objekt med izvajanjem programao predstavitev objekta v pomnilniku

    - Pisanje konstruktorjevo vekratno definirane metode

    Osnovni koncepti OOP:razred, objekt, atribut, metoda- programske komponente so objekti (ang. objects), ki so podobni objektom iz realnega

    sveta.- vsi objekti iste vrste tvorijo razred (ang. class)- primer 1:

    o razred Avtomobil zdruuje vse avtomobileo moj avto je objekt, ki spada v razred Avtomobil

    - primer 2:o razred Pes predstavlja vse pseo psica Lajka je eden izmed objektov, ki sestavljajo razred Pes

    - vsak objekt je konkreten primerek (ang. instance) nekega razreda- vsak objekt vsebuje atribute (ang. attributes) in metode (ang. methods)

    o z atributi so opisane lastnosti in trenutno stanje nekega objektao z metodami so doloene operacije, ki jih ta objekt lahko izvaja

    - primer za objekt, ki spada v razred Avtomobilo atributi: znamka, model, leto izdelave, barva, prostornina motorja, ali trenutno vozi,

    s kakno hitrostjo, v kateri prestavio metode: vonja naprej, vonja nazaj, polnjenje rezervoarja, pranje avtomobila,

    ugotavljanje trenutnega stanja (npr. trenutna hitrost, koliina goriva v rezervoarju ipd.)

    - vsi objekti nekega razreda imajo iste atribute, toda drugane vrednosti atributov- razlika med razredom in objektom je kot razlika med abstraktnim in konkretnim

    o razred je abstrakten opis atributov in metodo objekt je konkreten primerek nekega razreda s tono doloenimi vrednostmi

    atributov in tono doloenimi metodami- enkapsulacija (ang. encapsulation)

    o atributi in metode so vgrajeni v objekt tako, da se le-ta obnaa navzven kot rna katla

    o za uporabnika ni pomembno, kako so realizirane posamezne metode, ampak zadostuje, da pozna vmesnik (ang. interface)

    o primer: za natakanje goriva ni treba vedeti, kje je rezervoar; zadostuje, da vemo, kje je odprtina

    Stran 27

  • copyleft Anchy R

    Programiranje/kreiranje razredov- deklaracija razreda

    o glava razredao deklaracije atributovo deklaracije metodo deklaracija konstruktorjev

    - glava razredao doloilo za nain dostopa (ang. access modifier)

    neobvezno najvekrat public, mono e private, final ali abstract

    o rezervirana beseda classo ime razreda (doloi programer)

    - deklaracija atributovo atribute obiajno deklariramo kot spremenljivke, ki so lokalne razredu, zato

    uporabimo dostopno doloilo privateo z doloilom private doseemo, da se razred oziroma njegovi objekti obnaajo kot

    "rne katle" atributi niso vidni navzven, ampak so dostopni samo preko metod, ki so

    deklarirane v razredu posledica: potrebujemo metode, ki vpisujejo vrednosti atributov v

    posamezne objekte oziroma vraajo vrednosti atributov doloenega objektao koncept skrivanja informacij (ang. information hiding) je zelo pomemben koncept

    objektno usmerjenega programiranja onemogoa, da bi kdo od zunaj neposredno posegal v stanje objekta

    o primer deklaracije atributov za razred Delavecpublic class Delavec{ private int matStev; private String priimek; private String ime; private int stUr;}

    - deklaracije metodo metode obiajno deklariramo kot publico dostopno doloilo static izpustimo

    statine metode so v pomnilniku shranjene samo enkrat statine metode ne morejo posegati v atribute posameznih objektov lahko se kliejo tudi takrat, ko ne obstaja noben objekt

    - primer deklaracije metod za razred Delaveco zaradi skrivanja informacij potrebujemo metode za vpis in branje vrednosti

    posameznih atributov:vpisiMatSt (int st) vrniMatSt ()vpisiPriimek (String p) vrniPriimek ()vpisiIme (String i) vrniIme ()vpisiStUr (int u) vrniStUr ()

    o dodamo e druge metode, odvisno od problema, ki da elimo sprogramirati, npr.izracunajBrutoOD (int cenaUre)izpisiVse ()

    Stran 28

  • copyleft Anchy R

    Kreiranje objektov- deklaracija razreda ne kreira nobenega objekta, ampak predstavlja samo abstrakten opis

    strukture objektov- kreiranje objektov poteka v dveh korakih

    o najprej moramo objekt deklarirati (podobno kot spremenljivko)o nato objekt generiramo s pomojo operatorja new in posebne metode, ki ji reemo

    konstruktor (ang. constructor method)primer:public class Delavec1{ // atributi private int matStev; private String priimek; private String ime; private int stUr; // konstruktor Delavec1(int ms, String p, String i) { matStev=ms; priimek=p; ime=i; } // metode public void vpisiMatSt(int st) { matStev=st; } public void vpisiPriimek(String p) { priimek=p; } public void vpisiIme(String i) { ime=i; } public void vpisiStUr(int u) { stUr=u; } public int vrniMatSt() { return matStev; } public String vrniPriimek() { return priimek; } public String vrniIme() { return ime; } public int vrniStUr() { return stUr; } public int izracunajBrutoOD(int cenaUre) { return stUr*cenaUre; }

    Stran 29

  • copyleft Anchy R

    public void izpisiVse() { System.out.println("Maticna stevilka: "+matStev); System.out.println("Priimek in ime: "+priimek+' '+ime); System.out.println("Stevilo ur: "+stUr); }}

    - primer: kreiranje objekta d, ki spada v razred DelavecDelavec d; // deklaracija objektad = new Delavec (); // generiranje objekta

    - oba koraka lahko zdruimo:Delavec d = new Delavec ();

    - operator newo dodeli prostor za objekto spremenljivka d dobi naslov tiste lokacije v pomnilniku, kjer se nahaja objekto d = new Delavec (); je prireditveni stavek, ki vpie naslov objekta v

    spremenljivko d- razlika v primerjavi z navadnimi spremenljivkami

    o za navadne spremenljivke se prostor dodeli e med prevajanjem (ob deklaraciji), za objekte pa ele ob klicu konstruktorja

    o navadne spremenljivke hranijo vrednost (tj. nek podatek), imena objektov pa vsebujejo naslove

    o razlikovati moramo med vrednostjo spremenljivke (naslovom) in vrednostjo objekta

    - sklicevanje na atribute objektao navedemo ime objekta, piko in ime atributao primeri za objekt d tipa Delavec:

    d.matStd.priimekd.imed.stUr

    - uporaba metod, ki pripadajo objektu (ang. instance methods)o metode nekega objekta pokliemo tako, da navedemo

    ime objekta piko

    Stran 30

  • copyleft Anchy R

    ime metode dejanske parametre (v oklepaju)

    o primer za objekt d tipa Delavec: d.vpisiIme("Janez);

    Pisanje konstruktorjev- konstruktor

    o metoda, ki se izvede ob kreiranju objektao ime konstruktorja je enako imenu razredao v Javi je konstruktor avtomatsko na razpolagoo programer lahko napie svoj lasten konstruktor (ali celo ve konstruktorjev)o konstruktor lahko pokliemo samo z operatorjem new (ne moremo ga klicati

    samostojno, kot druge metode)- standarden konstruktor nastavi zaetne vrednosti atributov

    o numerini atributi dobijo vrednost 0o atributi tipa char dobijo vrednost Unicode '\u0000'o atributi tipa boolean dobijo vrednost falseo atributi objektnega tipa dobijo vrednost null

    *opomba(program Delavec.java mora biti v isti mapi!!!)public class PreizkusDelavec{

    public static void main (String[] args) { // kreiranje objekta

    Delavec d=new Delavec();

    // vpis vrednosti atributovd.vpisiMatSt(234);d.vpisiPriimek("Novak");d.vpisiIme("Janez");d.vpisiStUr(182);

    //izpis vsebine objekta s pomojo posameznih metodSystem.out.println("Matina tevilka: "+d.vrniMatSt());System.out.println("Priimek in ime: "+d.vrniPriimek()+"

    "+d.vrniIme());System.out.println("tevilo ur: "+d.vrniStUr());

    //izpis vsebine objekta s pomojo metode izpisivse()d.izpisivse();

    //izpis bruto osebnega dohodkaSystem.out.println("Bruto OD: "+d.izracunajBrutoOD(1500));

    }}

    - namesto standardnega konstruktorja lahko napiemo svojegao vzpostavimo lahko drugane zaetne vrednosti atributovo ob kreiranju objekta lahko izvrimo e druge nalogeo konstruktorju lahko dodamo svoje argumenteo standarden konstruktor ni ve na razpolago

    - primer lastnega konstruktorja za objekte tipa Delaveco ob generiranju objekta se vzpostavijo prave vrednosti atributov matina tevilka,

    priimek in ime

    Stran 31

  • copyleft Anchy R

    o tevilo ur se vnaa naknadno s pomojo metode vpisiStUrDelavec (int ms, String p, String i){ matStev = ms; priimek = p; ime = i;}

    - vekratno definiranje metod (ang. overloading)o deklariramo ve metod z enakim imenom, a druganimi parametri

    iz klica metode je razvidno, katera metoda se bo v resnici izvedla izvede se tista metoda, pri kateri se dejanski parametri ujemajo s formaln

    o primer: metoda za izraun obrestipublic static double obresti (double g, double om){

    return g*om;}public static double obresti (double g, int om){

    return g*om/100;}

    ob klicu obresti (1000.,0.08) se izvede prva, ob klicu obresti (1000.,8) pa druga metoda

    o vekratno definiranje konstruktorjev omogoa, da inicializiramo objekt na razline naine

    o primer: kreiranje objektov tipa Delavec konstruktor Delavec() inicializira objekt tako, da vsebuje matino tevilko

    9999 konstruktor Delavec(intms) inicializira objekt tako, da vsebuje tevilko

    ms konstruktor Delavec(intms,Stringp,Stringi) inicializira objekt

    tako, da vsebuje matino tevilko, priimek in ime, ki so posredovani z argumenti ms,pini

    public class Delavec2{// zgled z vec konstruktorji // atributi private int matStev; private String priimek; private String ime; private int stUr; // konstruktorji Delavec2() { matStev=9999; } Delavec2(int ms) { matStev=ms; } Delavec2(int ms, String p, String i) { matStev=ms; priimek=p; ime=i; }

    Stran 32

  • copyleft Anchy R

    // metode public void vpisiMatSt(int st) { matStev=st; } public void vpisiPriimek(String p) { priimek=p; } public void vpisiIme(String i) { ime=i; } public void vpisiStUr(int u) { stUr=u; } public int vrniMatSt() { return matStev; } public String vrniPriimek() { return priimek; } public String vrniIme() { return ime; } public int vrniStUr() { return stUr; } public int izracunajBrutoOD(int cenaUre) { return stUr*cenaUre; } public void izpisiVse() { System.out.println("Maticna stevilka: "+matStev); System.out.println("Priimek in ime: "+priimek+' '+ime); System.out.println("Stevilo ur: "+stUr); }

    Stran 33

  • copyleft Anchy R

    6.Organizacija programa in dostopnost deklaracijOrganizacija programa in dostopnost deklaracij Kazalo:

    - Obmoje veljavnosti deklaracij spremenljivko lokalne in globalne spremenljivke

    - Dostopno doloilo statico spremenljivke objekta in spremenljivke razredao metode objekta in metode razredao referenca this v metodah objekta

    - Dostopno doloilo final- Dostopna doloila public, private in protected- Uporaba vnaprej deklariranih razredov

    o Matho Character

    Obmoje veljavnosti deklaracij spremenljivk- deklaracija spremenljivke velja:

    o od mesta, kjer je bila spremenljivka deklariranao do konca bloka, v katerem smo jo deklarirali

    - primer: gnezdenje blokov{ // zunanji blok int spr1 = 10; { // notranji blok int spr2 = 20; // obstajata spr1 in spr2 int spr1 = 34; //napaka } // spr1 e vedno obstaja, spr2 pa ne }

    - lokalne in globalne spremenljivkeo globalne spremenljivke

    deklarirane so na ravni razreda dostopne so vsem metodam v razredu

    o lokalne spremenljivke deklarirane so znotraj posameznih metod dostopne so samo v metodi, kjer so deklarirane

    o globalne spremenljivke so lahko statine ali vezane na posamezne objekte, odvisno od dostopnega doloila static

    statine spremenljivke: obstaja ena sama spremenljivka za celoten razred, zato jim reemo tudi spremenljivke razreda (ang. Class variables)

    spremenljivke objekta: vsakemu objektu pripada svoja spremenljivka, ki vsebuje vrednost atributa tistega objekta (ang. instance variables)

    o primer: Razred, ki opisuje zgradbo objektovpublic class Primer1{ private double atr1; // vsak objekt ima 2 atributa, ki sta globalni private int atr2; // spremenljivki, dostopni v celem razredu

    Stran 34

  • copyleft Anchy R

    public void metoda1() { int spr3=1; // lokalni spremenljivki, int spr4=25; // dostopni v metodi metoda1() // obstajajo atr1, atr2, spr3 in spr4 } public int metoda2() { double spr5=500.0; // lokalna spremenljivka // obstajajo atr1, atr2=10 in spr5 }}

    o primer: Razred, ki predstavlja aplikacijopublic class Primer2{

    static double spr1=2.5; // globalni spremenljivkistatic int spr2=10; // dostopni v celem razredupublic static void main (String args []){

    int spr3=1; // lokalni spremenljivkiint spr2=25; // dostopni v metodi main ()

    // obstajajo spr1=2.5, spr2=25 in spr3=1

    }public static void xy (){

    double spr4=500.0; //lokalna spremenljivka// obstajajo spr1=2.5, spr2=10 in

    spr4=500.0}

    }

    Dostopno doloilo static- statine spremenljivke in spremenljivke objekta

    o statine spremenljivke (ang. class variables) tipine so za razrede, ki predstavljajo aplikacije, vendar lahko nastopajo tudi

    v razredih, ki opisujejo zgradbo objektov deklarirane so z rezervirano besedo static obstaja samo ena kopija spremenljivke to kopijo uporabljajo vse metode in vsi objekti spremenljivka obstaja tudi v primeru, ko nismo kreirali nobenega objekta sprememba vrednosti je dostopna vsem objektom in metodam v razredu

    o spremenljivke objekta (ang. instance variables) nastopajo v razredih, ki opisujejo zgradbo objektov pri deklaraciji ne smemo uporabiti dostopnega doloila static vsak objekt ima svojo kopijo spremenljivke (tj. svojo vrednost atributa) sprememba vrednosti se odraa samo znotraj objekta

    - statine metode in metode objektao dostopno doloilo static pri metodah

    statine metode ali metode razreda (ang. class methods) metode objekta (ang. instance methods)

    o statine metode / metode razreda

    Stran 35

  • copyleft Anchy R

    tipine so za razrede, ki predstavljajo aplikacije, in razrede, ki sluijo kot knjinice podprogramov (npr. razred Math)

    deklariramo jih z dostopnim doloilom static v pomnilniku so shranjene samo enkrat niso vezane na posamezne objekte, ampak so skupne za celoten razred uporabljamo jih tudi takrat, ko ne obstaja noben objekt ne morejo posegati v atribute posameznih objektov metoda main() mora biti obvezno statina e deklariramo statino metodo v razredu, ki je namenjen generiranju

    objektov, potem je ta skupna (tj. enaka) za vse objekte- metode razreda in metode objekta

    o metode objekta vezane so na posamezne objekte (tj. primerke nekega razreda)

    predstavljamo si lahko, da ima vsak objekt svoje metode v resnici so tudi metode, ki pripadajo objektom istega tipa, shranjene

    v pomnilniku samo enkrat; s posebnim mehanizmom doseemo, da se izvede prava metoda (dinamino povezovanje)

    tipine so za razrede, ki so namenjeni generiranju objektov omogoajo dostop do posameznih atributov v objektu pri njihovi deklaraciji ne smemo uporabiti dostopnega doloila static ob klicu metode objekta je treba obvezno navesti tudi ime objekta, ki mu

    metoda pripada . () . . ()

    - referenca thiso implicitno prisotna v vsaki metodi objektao predstavlja naslov objekta, na katerega se nanaa klic metodeo ta naslov omogoa, da dostopamo do spremenljivk pravega objektao pred vsakim takim sklicevanjem na spremenljivko objekta dejansko stoji referenca

    this

    o referenco this avtomatsko vstavi prevajalnik, lahko pa jo vkljui e programerpublic void izpisiVse (){

    System.out.println ("Maticna stevilka: " +this.matStev);System.out.println ("Priimek in ime: " +this.priimek+ ' '+this.ime);System.out.println ("Stevilo ur: "+this.stUr);

    }

    Dostopno doloilo final- kadar elimo prepreiti spremembo neke deklaracije

    o pri spremenljivkah: vrednost spremenljivke se ne more ve spremenitio pri metodah: metode ni mo redefinirati (je dokonna)o pri razredih: razreda ni mo raziriti (vse metode so dokonne)

    - deklaracije konstanto konstante deklariramo na enak nain kot spremenljivke, le da dodamo rezervirano

    besedo finalo velja dogovor, da imena konstant piemo z velikimi rkami (static final double

    PI=3.14159;)o konstanti moramo prirediti vrednost ob deklaraciji; kasneje to ni ve mogoe

    Stran 36

  • copyleft Anchy R

    o prednost uporabe konstant bolja itljivost programa enostavneje vzdrevanje

    Dostopna doloila public,privateinprotected- doloajo nain dostopa do posameznih atributov in metod v razredu

    dostopno doloilo dovoljen dostopbrez dostopnega doloila iz kateregakoli razreda v istem paketupublic iz kateregakoli razreda glede na paketprivate samo znotraj razredaprotected iz kateregakoli razreda v istem paketu in iz

    kateregakoli podrazreda ne glede na paket

    Vnaprej deklarirani razredi- v Javi obstaja priblino 500 vnaprej deklariranih razredov

    o ti razredi so shranjeni v obliki paketovo paket si lahko predstavljamo kot skupino sorodnih razredov, ki so shranjeni v isti

    mapi (poddirektoriju)o paket java.lang vsebuje osnovne razrede, ki se najve uporabljajo

    - uporaba vnaprej deklariranih razredovo nekateri paketi, kot npr. java.lang, so na razpolago avtomatskoo uporabo ostalih paketov ali razredov je treba napovedati s stavkom import, ki mora

    biti naveden na zaetku programa import java.util.* napove uporabo vseh razredov iz paketa java.util import java.util.Date napove uporabo razreda Date iz paketa

    java.util

    - razred Matho vsebuje matematine konstante in metode

    deklariran je v paketu java.lang klicanje konstant (PI, E): Math. klicanje metod: Math. ()

    abs (x) absolutna vrednost xsin (x), cos (x), tan (x) trigonometrine funkcije sinus, kosinus in

    tangensasin (x), acos (x); atan (x) obratne trigonometrine funkcijeround (x) zaokroevanje na najblije celo tevilosqrt (x) kvadratni koren iz xrandom () nakljuno tevilo med 0.0 in 1.0exp (x), log (x) eksponentna in logaritemska funkcija

    - razred Charactero vsebuje koristne metode za delo z znaki

    deklariran je v paketu java.lang klicanje metod: Character. ()

    isUpperCase () Preveri, ali je znak velika rkatoUpperCase () Pretvori malo rko v velikoisLowerCase () Preveri, ali je znak mala rkatoLowerCase () Pretvori veliko rko v malo

    Stran 37

  • copyleft Anchy R

    isDigit () Preveri,ali je znak tevilka ('0' '9')isLetter () Preveri, ali je znak rkaisLetterOrDigit ()

    Preveri, ali je znak rka ali tevilka

    isWhiteSpace () Preveri, ali je znak presledek, tab, newline, carriage return ali form feedpublic class DemoCharacter{ public static void main(String[] args) throws Exception { char znak;

    do { System.out.println("Vtipkaj znak: "); znak=(char)System.in.read(); System.in.read(); System.in.read(); // tipka Enter

    if (Character.isLetterOrDigit(znak)) { System.out.println(znak+" je crka ali stevilka."); if (Character.isLetter(znak)) { if (Character.isUpperCase(znak)) System.out.println(znak+" je velika crka."); else System.out.println(znak+" je mala crka."); } else System.out.println(znak+" je stevilka."); } else if (Character.isWhitespace(znak)) System.out.println(znak+" je \"whitespace\"."); else System.out.println(znak+" je locilo ali poseben znak."); } while (znak!='#'); }}

    Stran 38

  • copyleft Anchy R

    7.TabeleTabele Kazalo:

    - Koncept tabele- Kreiranje tabele

    o deklaracija in dodelitev prostorao vpis vrednostio atribut length

    - Nekatere operacije nad tabeloo iskanje elementao dodajanje v urejeno tabeloo urejanje (sortiranje)

    - Dvodimenzionalne - Vedimenzionalne tabele- Primeri

    o razdalje med tokamio mnoenje matrik

    - Tabele objektov

    Koncept tabele- tabela je sestavljena podatkovna struktura, ki zdruuje ve elementov istega tipa

    o elementi so lahko enostavnega tipa, npr. int,double,charo elementi so lahko objekti, ki pripadajo istemu razreduo tabela kot celota ima svoje imeo vsak element tabele ima svoj indeks (zaporedno tevilko)

    v javi teejo indeksi od 0 dalje- primer: osebni dohodki delavca v preteklem letu

    o namesto 12 samostojnih spremenljivk od1, od2, od12 vpeljemo tabeloo tabeli damo ime od, od posameznih elementov pa dostopamo s pomojo indeksovo od [0] je prvi element, od [1] je drugi element itd.

    - ponazoritev tabele odod [0] od [1] od [2] od [3] od [11]

    - uporaba tabel olaja nekatere operacije, npr. izraun vsote osebnih dohodkovo e bi imeli 12 samostojnih spremenljivk:

    vsota = od1 + od2 + od3 + od4 + od5 + +od10 + od11 + od12

    o z uporabo tabele od:vsota = 0;for (int i=0; i

  • copyleft Anchy R

    o nato dodelimo prostor z operaterjem new namesto konstruktorja navedemo tip elementov in v oglatem oklepaju

    njihovo tevilo- primer: kreiranje tabele oddouble [] od; //tip in ime tabeleod = new double [12]; // navedemo tevilo elementov

    - oba koraka zdruimo:double [] od = new double [12];

    - vpisovanje vrednosti v tabeloo ob kreiranju tabela ne vsebuje pravih vrednosti

    po izvritvi double [] od; dobi od vrednost null po dodelitvi prostora z od = new double [12]; dobijo vsi elementi

    vrednost 0 elementi tipa char dobijo ob inicializaciji vrednost '\0000', elementi tipa

    boolean pa vrednost falseo za inicializacijo lahko uporabimo seznam vrednosti

    double [] od = {220815.80, 201234.50, 199410.80, };

    v zavitem oklepaju natejemo vrednosti, loene z vejico operatorja new in tevila elementov ni treba navesti tevilo elementov, za katere se dodeli prostor, je enako tevilu vrednosti, ki

    jih navedemo v seznamuo vrednost lahko priredimo vsakemu elementu posebej

    primer: od [4] = 215876.40; stavek double [] od = {220815.80, 201234.50, 199410.80, }; ima

    enak uinek kot stavkiod [0] = 220815.80;od [1] = 201234.50;od [2] = 199410.80;

    o najvekrat uporabimo zankofor (int i=0; i

  • copyleft Anchy R

    zaporedno pregledovanje elementov binarno iskanje (bisekcija)

    binarno iskanje lahko uporabimo samo, e je tabela urejenao zaporedno pregledovanje elementov

    public static int poisci(int[] t, int x){

    int i=0;while (i

  • copyleft Anchy R

    o postopen razvoj programaint[] t=new int[10];int stevilo;for (int i=0; i=j; --k)t[k+1]=t[k];

    vpii tevilot[j]=stevilo;

    - urejanje (sortiranje)o sortiranje tevil

    algoritem za sortiranje z navadnim izbiranjemfor (i=0; i

  • copyleft Anchy R

    pred vstopom v zanko predpostavimo, da je najmanje tevilo a[i] zapomnimo si njegovo vrednost (vMin) in indeks (iMin)

    v zanki pregledamo preostala tevila do konca tabele e naletimo na manje tevilo, popravimo vrednost trenutnega

    minimuma in si zapomnimo njegov indeks po izvritvi zanke vsebuje vMin vrednost, iMin pa indeks

    najmanjega tevilaiMin=i; vMin=a[i];for (j=i+1; j

  • copyleft Anchy R

    o za vsako dimenzijo posebej specificiramo tevilo elementovo vsak element ima toliko indeksov, kolikor je dimenzijo za obdelavo vseh elementov potrebujemo toliko zank, kolikor je dimenzij

    - primer: tridimenzionalna tabela celih tevilint [] [] [] a = new int [4] [6] [3];for (int i = 0; i < a.length; ++i) for (int j = 0; j < a [i].length; ++j) for (int k = 0; k < a [i] [j].length; ++k) a [i] [j] [k] = BranjePodatkov.preberiInt ();

    Primeri- razdalje med tokami

    o izraunati elimo razdalje med n tokami v dvodimenzionalnem prostoru vsaka toka je predstavljena z dvema koordinatama

    ( , )i i iT x y ( , )j j jT x y

    razdalje raunamo po Pitagorovem izreku

    2 2 2,i j i j

    ij

    dx x x dy y yr dx dy

    = = = +

    predstavitev podatkov v raunalniku uporabimo globalne spremenljivke

    static final int ST_TOCK=5;static double[] x=new double[ST_TOCK];static double[] y=new double[ST_TOCK];static double[][] r=new double[ST_TOCK][ST_TOCK];

    o postopen razvoj programapublic class Razdalje1{

    static final int ST_TOCK=5;static double[] x=new double[ST_TOCK];static double[] y=new double[ST_TOCK];static double[][] r=new double[ST_TOCK][ST_TOCK];public static void main(String[] args){

    PreberiKoordinate();IzracunajRazdalje();IzpisiRazdalje();

    }// tu deklariramo metode PreberiKoordinate,// IzracunajRazdalje in IzpisiRazdalje

    }

    o branje koordinatpublic static void PreberiKoordinate(){

    for (int i=0; i

  • copyleft Anchy R

    tabela je simetrina: vrednost r[i][j] je enaka vrednosti r[j][i] zadostuje, da izraunamo samo vrednosti elementov pod diagonalo

    public static void IzracunajRazdalje(){

    double dx,dy;for (int i=0; i

  • copyleft Anchy R

    formula za izraun enega elementa: cij = aik * bkj k = 0, 1, 2, , n 1c00 = a00 * b00 + a01 * b10 + a02 * b20 + + a0,n-1 * bn-1,0c01 = a00 * b01 + a01 * b11 + a02 * b21 + + a0,n-1 * bn-1,1c02 = a00 * b02 + a01 * b12 + a02 * b22 + + a0,n-1 * bn-1,2 itd

    o podatkovne struktureint [] [] a={{2,6,5,5}, {3,8,6,3}, {1,5,0,2}};int [] [] b={{3,2}, {2,4}, {1,5}, {2,2}};int [] [] c=new int [a.length] [b [0].length];

    o izraunati moramo vse elemente matrike Cfor (i = 0; i

  • copyleft Anchy R

    sortiranje tabele glede na setevek osebnih dohodkov izpis vrstnega reda glede na zasluek v preteklem letu

    - razred Delavec4o deklaracije atributov

    private int matStev;private String priimek;private String ime;private double[] od;

    o deklaracije metod metode za vpis vrednosti posameznih atributov metode, ki vraajo vrednosti posameznih atributov metoda za izraun vsote osebnih dohodkov

    public double vrniVsotoOd(){double vsota=0;for (int i=0; i

  • copyleft Anchy R

    {System.out.print(td[i].vrniMatSt());System.out.print(" "+td[i].vrniPriimek()+" "+

    td[i].vrniIme());System.out.println(" "+td[i].vrniVsotoOd());

    }}

    o sortiranje tabelestatic void sortiraj(Delavec4[] a){

    int i,j,iMin;Delavec4 vMin;for (i=0; i

  • Osnove programiranja 1

    8.NiziNizi Kazalo:

    - Koncept nizao tabela, katere elementi so znaki

    - Razred Stringo nespremenljivost nizovo primerjanje nizov: metodi equals() in compareTo()o pregled ostalih metodo primer: program za ugibanje pregovorao pretvorba nizov, ki predstavljajo tevila, v numerine vrednosti

    - Razred StringBuffero omogoa spreminjanje vsebine nizovo pregled metod

    - Argumenti metode main()

    Koncept niza- niz je zaporedje znakov (npr. beseda ali celo ve besed skupaj)- v Javi lahko nize predstavimo kot objekte razreda String- razred String je definiran v paketu Java.lang

    Razred String- nespremenljivost nizov

    o deklaracija niza String niz;

    niz = new String ("Dober dan"); String niz = new String ("Dober dan"); String niz = "Dober dan"; v vseh treh primerih se generira niz z vrednostjo "Dober dan" spremenljivka niz vsebuje naslov tega niza

    o spreminjanje vrednosti upotevati je treba, da spremenljivke tipa String vsebujejo

    naslove, ne pa vrednosti objektov primer:

    String pozdrav = "Dober dan";pozdrav = "Hello";

    stavek pozdrav = "Hello"; generira nov niz (tj. nov objekt), katerega naslov se shrani v pozdrav

    niz "Doberdan" ostane v pomnilniku, vendar ni ve dostopen

    prostor, ki ga zaseda, se sprosti avtomatsko s pomojo programa za ienje pomnilnika (ang. garbagge collector)

    Stran 49

  • Osnove programiranja 1

    nizi torej nikoli ne spremenijo vrednosti; namesto tega se kreirajo novi objekti, katerih naslovi se shranijo v spremenljivke tipa String

    - primerjanje nizov: metodi equals() in compareTo()o primerjanje dveh spremenljivk tipa String pomeni dejansko primerjanje

    naslovov dveh nizovString niz1 = "Dober dan";String niz2 = "Dober dan";//rezultat primerjave (niz1 == niz2) je false

    o primerjanje je mono z metodo equals ()if (niz1.equals (niz2)) System.out.println ("Niza sta enaka");if (niz2.equals (niz1)) System.out.println ("Niza sta enaka");if (niz1.equals ("Dober dan")) System.out.println ("Niza sta enaka");

    v vseh treh stavkih if je vrednost pogoja trueo ostale metode za primerjanje nizov

    metoda equalsIgnoreCase() je podobna equals(), le da ne razlikuje med velikimi in malimi rkami

    String niz1 ="Dober dan";String niz2 ="DOBER dan";

    rezultat primerjave (niz1.equals (niz2)) je falserezultat primerjave (niz1.equalsIgnoreCase (niz2)) je true

    metoda compareTo () vrne celo tevilo e sta oba niza enaka, vrne 0 e je niz, iz katerega je bila metoda poklicana, veji, vrne

    pozitivno vrednost e je niz, iz katerega je bila metoda poklicana, manji, vrne

    negativno vrednost metoda compareTo () deluje tako, da primerja kode

    posameznih znakovo primer uporabe metode compareTo ()

    String niz1= "Marko";String niz2 = "Martin";System.out.println (niz1.compareTo (niz2)); // -9System.out.println (niz2.compareTo (niz1)); // 9System.out.println (niz1.compareTo ("Marko"); // 0

    metoda primerja istolene pare znakov, dokler ne naleti na dva razlina znaka

    na prvih treh mestih (znaki 'M', 'a' in 'r') se oba niza ujemata

    razlika nastopi na etrtem mestu, kjer je koda znak 'k' za 9 manja od kode znaka 't'

    v praksi (npr. pri urejanju nizov po abecedi) nas ne zanima tona vrednost, ki jo vrne metoda compareTo()

    zadostuje, da vemo, ali je vrednost negativna ali pozitivna- pregled ostalih metod (prikazali jih bomo ob predpostavki, da smo deklarirali

    spremenljivko String niz = "Dobro jutro";)o toUpperCase ()

    pretvori vse male rke v nizu v velike

    Stran 50

  • Osnove programiranja 1

    klicu niz.toUpperCase () vrne vrednost "DOBRO JUTRO"o toLowerCase ()o indexOf (zn)

    vrne pozicijo znaka zn znotraj nekega niza (indeksi teejo od 0 dalje)

    e niz ne vsebuje znaka zn, vrne -1 klic niz.indexOf ('b') vrne vrednost 2 klic niz.indexOf ('v') vrne vrednost -1

    o indexOf (zn, poz)

    ie znak zn od pozicije poz dalje klicniz.indexOf ('o') vrne vrednost 1 klic niz.indexOf ('o', 2) vrne vrednost 4

    o charAt (n)

    vrne znak, ki se nahaja na n-tem mestu v nizu klic niz.charAt (2) vrne vrednost 'b'

    o startsWith (niz1)

    vrne true, e se niz zane s podnizom niz1 klic niz.startsWith ("Dob") vrne true, niz.startsWith

    ("Sl") pa falseo endsWith (niz1)

    vrne true, e se niz kona s podnizom niz1 klicniz.endsWith ("tro")vrnetrue,niz.endsWith

    ("ber")pafalseo replace ()

    zamenja vsa nastopanja znaka zn1 z znakom zn2 klic niz.replace ('o', 'x'); vrne vrednost "Dxbrx jutrx"

    o length ()

    vrne dolino niza (tevilo znakov) klic niz.length () vrne vrednost 11

    o substring (zac, kon)

    vrne podniz, ki se prine na mestu zac in kona na mestu kon1 klic niz.substring (2, 7) vrne vrednost "bro j"

    o toString (arg)

    pretvori v niz argument arg, ki je lahko kateregakoli osnovnega tipa

    ni metoda razreda String int a = 500;

    String niz = Integer.toString (a); //"500" double x = 32.45;

    String niz = Double.toString (x); //"32.45" boolean b = false;

    String niz3 = Boolean.toString (b); //"false"

    o metoda toString() je implicitno prisotna pri konkatenaciji nizov: System.out.print ("Vrednost x je " +x);

    vrednost spremenljivke x se najprej pretvori v niz in nato konkatenira

    - primer: program za ugibanje pregovorao napisati elimo program, ki bo v zanki spraeval za posamezne rke,

    dokler uporabnik ne ugane vseh rk potrebujemo dva niza:

    Stran 51

  • Osnove programiranja 1

    prvi vsebuje besedilo pregovora: iskaniNiz drugi vsebuje zvezdice, presledke in loila: prikazaniNiz

    zvezdice so na tistih mestih, kjer sicer nastopijo rke

    po vsaki vtipkani rki preverimo, ali iskaniNiz vsebuje vtipkano rko e rke ni, samo izpiemo ustrezno sporoilo e rko najdemo, nadomestimo zvezdice pri tistih mestih,

    kjer nastopa vtipkana rka, in ponovno prikaemo prikazaniNiz

    postopek zakljuimo, ko prikazaniNiz ne vsebuje ve nobene zvezdice

    o prva verzija programaString iskaniNiz="Rana ura, zlata ura.";String prikazaniNiz="**** ***, ***** ***.";char crka; // vtipkana crkaint poz; // pozicija vtipkane crke v iskaniNizSystem.out.println(prikazaniNiz);while (prikazaniNiz.indexOf('*') != -1){

    System.out.print("Vtipkaj crko:");crka=(char)System.in.read();System.in.read(); System.in.read(); // Enterpoz=iskaniNiz.indexOf(crka); if (poz == -1)

    System.out.println("Te crke ni, ugibaj ponovno!");else{

    //nadomesti ustrezne zvezdice z vtipkano rko;System.out.println(prikazaniNiz);

    }}

    o nadomesti ustrezne zvezdice z vtipkano rko vtipkana rka lahko nastopa vekrat, zato je potrebna zanka vtipkano rko iemo v iskaniNiz, zvezdico pa zamenjamo na

    isti poziciji v prikazaniNiz novo vrednost prikazaniNiz sestavimo iz 3 delov

    prvi del: znaki pred vtipkano rko drugi del: vtipkana rka tretji del: znaki, ki sledijo vtipkani rki

    naslednjo rko iemo od poz+1 daljedo{

    prikazaniNiz=prikazaniNiz.substring(0,poz)+crka+prikazaniNiz.substring(poz+1,prikazaniNiz.length());poz=iskaniNiz.indexOf(crka,poz+1);

    } while (poz != -1);

    - pretvorba nizov, ki predstavljajo tevila, v numerine vrednostio nize, ki so sestavljeni iz samih cifer (decimalne pike, predznaka), lahko

    pretvorimo v tevila pretvorbo niza v celo tevilo omogoa metoda parseInt () iz

    razreda Integer

    Stran 52

  • Osnove programiranja 1

    String niz = "54872"; int celoStevilo = Integer.parseInt (niz);

    pretvorno niza v realno tevilo omogoa metoda parseDouble () iz razreda Double

    String niz = "54.872"; double realnoStevilo = Double.parseDouble (niz);

    podobne metode so na razpolago v ostalih razredih Byte.pasreByte (niz) Short.parseShort (niz) Long.parseLong (niz) Float.parseFloat (niz)

    Razred StringBuffer- podoben razredu String, le da omogoa spreminjanje nizov in njihove doline

    o niz tipa String je nespremenljiv; interna predstavitev obsega toliko znakov, kot znaa dolina niza

    o niz tipa StringBuffer je shranjen v ti. vmesniku (ang. buffer), katerega dolina (ang. capacity) se dinamino spreminja

    metoda capacity() vrne trenutno kapaciteto metoda length() vrne trenutno dolino niza metoda setLength() omogoa nastavljanje doline niza

    - deklaracija niza: uporabimo lahko 3 konstruktorjeo StringBuffer ()generira niz brez znakov s kapaciteto 16o StringBuffer(String s) generira niz, ki vsebuje znake niza s,

    kapaciteta pa je za 16 veja od doline niza so StringBuffer (int k) generira prazen niz s kapaciteto k

    - spreminjanje vsebine nizao metoda append () omogoa dodajanje na koncu niza

    append (niz2) doda na konec niz2 tipa String append (zn) doda na konec znak zn tipa char metoda je vekratno definirana in sprejme tudi parametre drugih

    tipov, npr. into metoda insert() omogoa vrivanje sredi niza

    insert (poz, niz2) vrine niz2 na pozicijo poz insert (poz, zn) vrine znak zn na pozicijo poz

    o pri dodajanju z metodo append () in vrivanju z metodo insert () se kapaciteta avtomatsko povea

    o metoda delete (zac, kon) brie znake med pozicijama zac in kon-1o metoda deleteCharAt (poz) brie znak na poziciji pozo metoda setCharAt (poz, zn) vpie znak zn na pozicijo pozo metoda replace (zac, kon, niz2) brie znake med pozicijama zac in

    kon-1 ter jih nadomesti z nizom niz2- branje podatkov iz niza

    o metoda charAt (poz) vrne znak, ki se nahaja na poziciji pozo metoda substring (zac, kon) vrne podniz, ki vsebuje znake na

    pozicijah od zac do kon-1- iskanje podatkov v nizu

    o metoda indexOf (niz2) vrne pozicijo, kjer se prine niz2

    Stran 53

  • Osnove programiranja 1

    parameter niz2 je tipa String e niza niz2ne najde, vrne -1

    o metoda indexOf (niz2, poz) ie niz2 od pozicije poz dalje

    Argumenti metode main ()- (String [] args) je deklaracija argumentov

    o argumenti so podatki, ki jih metoda potrebuje za svoje deloo tudi e metoda main ne potrebuje argumentov, morajo biti deklariranio String pove, kaknega tipa so argumenti: nizi znakovo args je skupno ime za vse argumenteo oglata oklepaja oznaujeta, da argumenti tvorijo tabelo nizov

    - argumente navedemo ob zagonu programa iz ukazne vrstice java

    o dodamo tabelo args, v kateri so shranjene vrednosti posameznih argumentov

    o args[0] vsebuje , args [1] vsebuje itd.

    Stran 54

  • Osnove programiranja 1

    9.DedovanjeDedovanje Kazalo:

    - Koncept dedovanjao podrazred podeduje atribute in metode nadrazreda

    - Redefinicija metodo v podrazredu lahko ponovno deklariramo podedovano metodoo pri tem si lahko pomagamo z metodo nadrazreda (super)

    - Uporaba konstruktorjevo konstruktor podrazreda mora poskrbeti za parametre, ki jih zahteva

    konstruktor nadrazreda- Dostopno doloilo protected

    o podrazredom je omogoen neposreden dostop do podedovanih atributov- Metode, ki jih ni mo redefinirati

    o 4 tipi: private, static, final, metode v razredih final- Abstraktni razred in abstraktne metode

    o v abstraktnem razredu specificiramo metodo, ki je e ne moremo sprogramirati

    o vsak podrazred mora to metodo redefinirati s tem doloimo obnaanje podrazredov

    - Dinamino povezovanje metodo med izvajanjem se izbere metoda, ki pripada dejanskemu tipu objekta

    - Razred Object in njegove metodeo univerzalni nadrazred, iz katerega so izpeljani vsi ostalio v vseh razredih so na voljo metode, deklarirane v razredu Object

    - Koncept vmesnika kot nadomestek za vekratno dedovanjeo vsak podrazred lahko deduje samo od enega nadrazreda, implementira pa

    lahko ve vmesnikov

    Koncept dedovanja- mehanizem, ki omogoa, da nek razred podeduje atribute in metode nekega

    drugega razredao osnovni razred (ang. base class): razred, ki slui kot osnova za dedovanjeo izpeljan razred (ang. derived class): razred, ki je bil izpeljan iz osnovnega

    razreda (tj. razred, ki deduje) nadrazred (ang. superclass) podrazred (ang. subclass) star (ang. parent class) otrok (ang. child class)

    o izpeljan razred je poseben primer bolj splonega osnovnega razreda- primer: razreda Student in IzredniStudent

    o razred Student je osnovni razred (nadrazred)o razred IzredniStudent je izpeljan razred (podrazred)

    - razred Student imao 3 atribute: vpisna tevilka, priimek, ime

    Stran 55

  • Osnove programiranja 1

    o 6 metod: 3 za vpis vrednosti, 3 za branje vrednosti vsakega atributa- razred IzredniStudent

    o potrebuje vse atribute in metode razreda Studento zahteva e dodatni atribut znesekSolnineo koncept dedovanja omogoa, da atributov in metod razreda Student ni

    treba e enkrat deklariratio na novo je treba deklarirati le atribut znesekSolnine ter metodi za vpis

    in branje zneska olnine- prednosti dedovanja

    o kraji as razvoja (uporabimo atribute in metode, ki e obstajajo)o manj napak (podedovane metode so e preizkuene in stestirane)o veja razumljivost (programer e razume delovanje podedovanih metod)

    - deklaracija izpeljanega razredao osnovni razred mora e obstajatio uporabimo rezervirano besedo extends

    public class IzredniStudent extends Student

    o deklariramo samo dodatne atributeo deklariramo samo dodatne metode

    - dedovanje poteka samo v eni smeri: otroci vedno podedujejo od starevo nadrazred ima dostop do atributov in metod, ki so bili deklarirani v

    nadrazreduo podrazred ima dostop do atributov in metod, deklariranih v nadrazredu in

    podrazredu

    Redefinicija metod (Redefinicija podedovanih metod (ang. overriding))- e neka podedovana metoda ne ustreza zahtevam podrazreda, jo lahko v

    podrazredu ponovno definiramoo ob redefiniciji moramo metodo deklarirati z enakim imenom in enakim

    seznamom parametrovo objektom nadrazreda pripada metoda, deklarirana v nadrazreduo objektom podrazreda pripada redefinirana metoda, deklarirana v

    podrazredu- razlika med redefinicijo metod (overriding) in vekratnim definiranjem metod

    (overloading)o overriding: nadrazred in podrazred imata metodo z enakim imenom in

    enakim seznamom parametrovo overloading: v istem razredu obstaja ve metod z enakim imenom, a

    razlinim seznamom parametrov- preprost primer redefinicije

    o recimo, da razred Student vsebuje metodo izpisTipa, ki izpie ime razreda

    public void izpisTipa (){ System.out.println ("Student");}

    o razred IzredniStudent to metodo podeduje, vendar ni uporabna, ker bi morala izpisati drugano ime razreda

    o reitev: v razredu IzredniStudent to metodo redefiniramo- uporaba metode nadrazreda v podrazredu

    Stran 56

  • Osnove programiranja 1

    o kljub temu, da smo metodo, ki je deklarirana v nadrazredu, redefinirali, jo lahko e vedno pokliemo

    o uporabimo rezervirano besedo super:super.- primer uporabe super

    o recimo, da razred Student vsebuje metodo izpisiVse(), ki izpie vrednosti vseh atributov

    o v razredu IzredniStudent moramo to metodo redefinirati tako, da bo izpisala tudi atribut znesekSolnine

    o redefinirana metoda je sestavljena iz dveh delov: iz klica super.izpisiVse () iz stavka za izpis zneska olnine

    public void izpisiVse (){ super.izpisiVse (); System.out.println (znesekSolnine);}

    - zakljuek: uporaba super nam pogosto olaja pisanje redefiniranih metodo metoda nadrazreda, ki jo pokliemo s super, opravi tisti del postopka, ki

    je skupen nadrazredu in podrazreduo sprogramirati moramo samo preostali del postopka, ki je specifien za

    podrazred- primerjava med this in super v podrazredu

    o super se nanaa na metodo nadrazreda super.izpisiVse () poklie metodo razreda Student

    o this se nanaa na metodo podrazreda this.izpisiVse () poklie metodo razreda IzredniStudent referenco this obiajno izpustimo

    Uporaba konstruktorjev- ob kreiranju objekta, ki pripada nekemu podrazredu, se dejansko klieta dva

    konstruktorjao konstruktor osnovnega razredao konstruktor podrazredao vedno se najprej izvede konstruktor nadrazreda, nato konstruktor

    podrazredao v naem primeru: najprej konstruktor Student (), nato konstruktor

    IzredniStudent ()

    - splono pravilo pri pisanju lastnih konstruktorjevo konstruktor nadrazreda naj poskrbi za inicializacijo atributov, ki so

    deklarirani v nadrazreduo konstruktor podrazreda naj poskrbi za inicializacijo atributov, ki so

    deklarirani v podrazredu- konstruktorji z argumenti

    o izhodie: kreirati elimo objekt podrazreda, konstruktor nadrazreda pa zahteva argumente

    o podrazred mora poskrbeti, da dobi konstruktor nadrazreda ustrezne argumente

    o obvezno je treba napisati konstruktor podrazreda, ki poklie konstruktor nadrazreda z ustreznimi argumenti

    Stran 57

  • Osnove programiranja 1

    klic konstruktorja nadrazreda se izvede z rezervirano besedo super in ne z imenom konstruktorja

    stavek super (); mora biti prvi stavek v konstruktorju podrazreda (niti deklaracije spremenljivk ne smejo biti pred njim)

    o primer: e konstruktor nadrazreda Student zahteva tri argumente, ga pokliemo s super(63020888, "Novak", "Janez");

    Dostopno doloilo protected- koncept skrivanja informacij (doslej)

    o atributi razreda so deklarirani z dostopnim doloilom privateo metode razreda so deklarirane z dostopnim doloilom publico ostali razredi lahko dostopajo do atributov samo preko metod

    - posledice pri dedovanjuo podrazredi nimajo direktnega dostopa do podedovanih atributovo do njih lahko dostopajo samo preko metod

    - reitev: uporaba dostopnega doloila protectedo vmesna stopnja zaite med public in privateo podrazredom dovoljuje neposreden dostop do atributov (in metod)

    nadrazredao ostalim razredom (ki niso izpeljani iz nadrazreda) dostop do protected

    atributov in metod ni dovoljen

    Metode, ki jih ni mo redefinirati- obstajajo 4 tipi metod, ki jih ni mo redefinirati

    o metode private v podrazredu niso dostopne (se ne podedujejo) v podrazredu lahko e enkrat deklariramo metodo z enakim

    imenom in parametri, vendar to ni redifinicijao metode static

    so metode razreda in niso vezane na posamezne objekte kliemo jih z imenom razreda, ne z imenom objekta:

    .

    metoda je ena sama za osnovni razred in vse naslednikeo metode final

    final pomeni, da je neka komponenta (npr. spremenljivka, metoda ali razred) dokonna

    razlika med static in final static se uporablja, kadar elimo prepreiti redefinicijo

    metod razreda final se uporablja, kadar elimo prepreiti redefinicijo

    metod objektao metode znotraj razredov final

    e je razred deklariran kot final, potem so avtomatino vse njegove metode final

    razred final ne more biti uporabljen kot osnova za dedovanje primer razreda final: razred Math

    Stran 58

  • Osnove programiranja 1

    Abstraktni razred in abstraktne metode- abstraktni razred je nek sploen nadrazred, ki predstavlja osnovo za izpeljavo

    razlinih podrazredovo deklariramo ga izkljuno z namenom, da bomo iz njega izpeljali razline

    metodeo ne moremo generirati objektov tega razreda, ampak samo objekte

    podrazredovo po zgradbi je podoben ostalim razredom (vsebuje atribute in metode) s

    tem da je ena ali ve metod abstraktniho abstraktne razrede in abstraktne metode deklariramo z rezervirano besedo

    abstract, npr.public abstract class Zivalpublic abstract void oglasanje ()

    - abstraktna metoda ima samo glavo brez stavkovo jo, kadar na nivoju nadrazreda ne moremo opisati operacije, ki jo ta

    metoda izvede, vendar elimo dosei, da to metodo vsebujejo vsi podrazredi

    o v podrazredu je treba abstraktno metodo redefiniratio e podrazred ne redefinira abstraktne metode, je tudi podrazred abstrakteno e je razred abstrakten, je prazna metoda vedno abstraktna, etudi

    izpustimo rezervirano besedo abstract- primer: abstraktni razred Zival

    o slui kot osnova za izpeljavo podrazredov Pes,Krava in Kacao vsebuje abstraktno metodo oglasanje (), ki pove kako se ival oglaa

    - vsak objekt podrazreda je istoasno tudi objekt nadrazredao Pes je Zival, Avto je Vozilo ("is a")o obratno ni mono

    - posledica: spremenljivki tipa nadrazred lahko priredimo naslov objekta, ki pripada kateremukoli podrazredu

    o imamo spremenljivko z, ki je deklarirana kot Zivalz;o imamo 3 objekte, ki pripadajo razredom Pes,Krava in Kaca

    Pes p=new Pes ("Luks");Krava kr=new Krava ("Liska");Kaca ka=new Kaca ("Klopotaca");

    o potem so dovoljeni naslednji prireditveni stavki z=p; z=kr; z=ka;o vpraanje: katera metoda se izvede ob klicu z.oglasanje ()

    odgovor: izvede se metoda tistega podrazreda, katerega objekt je trenutno shranjen v spremenljivki z

    Dinamino povezovanje metod- je sposobnost programa, da izbere metodo, ki pripada pravemu podrazredu- metoda se izbere med izvajanjem programa, odvisno od dejanskega tipa objekta- pojem statinega in dinaminega tipa

    o statini tip je naveden ob deklaraciji (spremenljivka z je tipa Zival)o dinamini tip je doloen med izvajanjem programa (spremenljivka z je

    lahko dinaminega tipa Pes,Krava ali Kaca)- dinamini tip spremenljivke z doloa, katera metoda oglasanje () se bo izvedla- tabele objektov, ki pripadajo razlinim podrazredom

    Stran 59

  • Osnove programiranja 1

    o dedovanje omogoa, da v tabeli hranimo objekte, ki pripadajo razlinim podrazredom

    zahteva: vsi objekti v tabeli morajo biti istega tipa tabelo deklariramo kot tabelo objektov, ki pripadajo osnovnemu

    razredu v resnici generiramo objekte, ki pripadajo posameznim

    podrazredom ko so objekti vstavljeni v tabelo, jih lahko obdelujemo v zanki, kot

    da bi bili vsi istega tipa edina omejitev: vsi podrazredi morajo biti izpeljani iz istega

    osnovnega razredao primer: tabela podatkov o ivalih Zival []z=new Zival [10];

    Razred Object in njegove metode- razred Object univerzalni nadrazred

    o je osnovni razred, deklariran v paketu java.lang, iz katerega so (neposredno ali posredno) izpeljani vsi drugi razredi

    vsak razred v Javi (razen razreda Object) je v resnici podrazred e razred ni deklariran kot raziritev nekega nadrazreda, se

    avtomatsko privzame, da je raziritev razreda Objecto vsebuje metode, ki jih avtomatsko podedujejo vsi podrazredi

    - metoda toString ()o pretvori vsebino objekta v niz tipa String, ki vsebuje

    ime razreda, kateremu pripada objekt naslov, kjer je ta objekt shranjen v pomnilnik, npr. @ba34f2

    o pri delu z objekti je priporoljivo to metodo redefinirati vrne naj vrednost atributov kot en sam niz znakov ta niz lahko kasneje izpiemo

    - metoda equals ()o zahteva en argument, ki mora biti istega tipa kot objekt, iz katerega je bila

    metoda poklicana: .equals()o e metode ne redefiniramo, velja, da sta objekta enaka, e imata enak

    naslov (preverja se enakost naslovov, ne enakost vsebine)o primer 1:

    Pes pes1=new Pes ("Fifi");Pes pes2=new Pes ("Fifi");pes1.equals (pes2) vrne false

    o primer 2:StringBuffer niz1=new StringBuffer ("Fifi");StringBuffer niz2=new StringBuffer ("Fifi");niz1.equals (niz2) vrne false

    - redefinicija metode equals ()o e s podedovano metodo equals () nismo zadovoljni, napiemo svojo

    metodo z enakim seznamom argumentov in istim tipom rezultatao za primer 1:

    public boolean equals (Pes p2){

    if (vrniIme().equals (p2.vrniIme())) return true;

    Stran 60

  • Osnove programiranja 1

    else return false;

    }

    o kraje: return vrniIme ().equals (p2.vrniIme())o uporaba this: this.vrniIme().equals (p2.vrniIme())

    - kam vkomponirati redefinirano metodo equals ()o v razred Pes: redefinirana metoda velja samo za pse

    dva psa sta enaka, e imata enako ime za ostale ivali velja, da sta dva objekta enaka, e imata enak

    naslovo v razred Zival: redefinirana metoda velja za vse ivali

    katerikoli dve ivali sta enaki, e imata enako ime- druge metode razreda Object

    o getClass (): vrne objekt tipa Class, ki vsebuje ime razredao hashCode (): izrauna hash kodo (za shranjevanje objektov v razprenih

    tabelah)o nitify (),notifyAll (), wait (): pri delu z nitmi (ang. threads)o clone (): za kopiranje objektao finalize (): metoda, ki se izvede ob unienju objekta

    Koncept vmesnika kot nadomestek za vekratno dedovanje (vmesnik ang. interface)

    - vekratno dedovanjeo podrazred podeduje atribute in metode ve kot enega nadrazredao C++ omogoa vekratno dedovanje, Java pa neo problemi pri vekratnem dedovanju

    kaj narediti, e imajo atributi in metode v nadrazredih eneka imena

    konstruktor katerega nadrazreda naj se klie pri klicu super()- reitev, ki jo ponuja Java: koncept vmesnika- vmesnik je zelo podoben razredu, s to razliko, da

    o vse metode morajo biti abstraktneo vsi atributi (e jih ima), morajo biti static final

    - z vmesnikom predpiemo metode, ki jih mora implementirati podrazred (doloimo obnaanje podrazreda)

    - splono praviloo podrazred lahko deduje samo od enega nadrazredao implementira lahko ve vmesnikov

    - primer deklaracijepublic class Podrazred extends Nadrazredimplements Vmesnik1, Vmesnik2

    - s stalia dedovanja Podrazredo podeduje atribute in metode razreda Nadrazredo dodatno lahko deklarira nove atribute in metodeo redefinira lahko podedovane metode

    - s stalia implementacije vmesnikao v podrazredu moramo deklarirati vse metode, specificirane v vmesnikih

    Vmesnik1 in Vmesnik2

    Stran 61

  • Osnove programiranja 1

    o podrazred lahko uporablja statine spremenljivke iz obeh vmesnikov- primerjava: abstraktni razred vmesnik

    o podobnost: ne moremo generirati objektov, ki bi pripadali abstraktnemu razredu ali vmesniku

    o razlika: v abstraktnem razredu so lahko samo nekatere metode abstraktne, v vmesniku pa morajo biti abstraktne vse metode

    o razlika: atributi abstraktnega razreda so vezani na posamezne objekte, atributi vmesnika pa so statini (vezani na razred) in nespremenljivi

    - kdaj uporabimo abstraktni razredo kadar lahko e na najvijem nivoju sprogramiramo metode, ki so skupne

    razlinim podrazredomo primer: igre s kartami

    metoda meaj() je enaka za vse podrazrede, zato jo lahko sprogramiramo v nadrazredu

    metoda deli() je za vsak podrazred drugana, zato je v nadrazredu abstraktna

    - kdaj uporabimo vmesniko ko vemo, katere operacije mora izvajati podrazred, vendar dovolimo, da

    jih vsak podrazred sprogramira po svojeo primer: glasbeni instrumenti

    v vmesniku predpiemo metodo zaigrajTon(), ki jo lahko vsak instrument realizira po svoje

    Stran 62

  • Osnove programiranja 1

    10.Uvod v delo z grafikoUvod v delo z grafiko Kazalo:

    - Knjinici AWT in Swing- Kreiranje okna

    o okno kot podrazred razreda JFrame- Zapiranje okna

    o dogodkovni model: razredi dogodkov, vmesniki, adapterji, poslualci- Upotevanje karakteristik uporabnikovega raunalnika- Risanje- Pregled metod za risanje

    Knjinici AWT in Swing- dve knjinici (paketa) razredov za programiranje grafinega uporabnikega

    vmesnika (GUI)o ATW (Abstract Window Toolkit)

    stareja (prvotna) knjinica realizacija komponent prepuena ciljni plaformi problem: razlino obnaanje na razlinih platformah

    o Swing noveja knjinica veji nabor komponent GUI enostavneja uporaba manja odvisnost od ciljne platforme enak videz na vseh platformah

    o Swing e vedno uporablja dogodkovno voden nain programiranja, ki ga definira ATW

    v programih kombiniramo uporabo obeh knjinic

    Kreiranje okna- osnovno okno, v katerem riemo, je objekt razreda JFrame

    o v paketu AWT obstaja razred Frameo razred JFrame je raziritev razreda Frameo osnovno okno je ena redkih komponent, ki jih ne narie Swing, ampak

    okenski sistem ciljne platformeo osnovno okno he kontejner (ang, container), ki lahko vsebuje druge

    komponente grafinega uporabnikega vmesnika (gumbi, tekstovna polja)

    - program za kreiranje okna mora vsebovatio napoved uporabe paketa Swing: importjavax.swing.*;o kreiranje objekta tipa JFrame: JFrame okno=new JFrame();o prikaz okna na zaslonu: okno.show();

    - bolja reitevo iz razreda JFrame izpeljemo podrazred, ki natanneje definira lastnosti

    oknao v podrazredu deklariramo konstruktor, ki vsebuje ukaze, kot so npr.

    Stran 63

  • Osnove programiranja 1

    setTitle (); //imesetSize (, ); //velikostsetLocation (, ); //legasetBounds (, , , ); //velikost in legasetResizable (); //spreminjanje velikosti

    - problemo ko okno zapremo, se izvajane programa ne prekineo za prekinitev je potrebno vtipkati CTRL+C

    Zapiranje okna (prekinitev izvajanja programa ob zapiranju okna)- upotevati je treba ATW dogodkovni model

    o dogodek je sprememba v stanju doloene komponente zaradi interakcije s strani uporabnika (npr. klik z miko, pritisk tipke na tipkovnici, vpis podatka v polje za vnos ipd.)

    o vsaka komponenta GUI, s katero je uporabnik v interakciji, mora vsebovati poseben objekt, ki nastopa v vlogi poslualca

    o naloga poslualca je, da prestree doloen dogodek, in izvri primerno akcijo

    - v javi so dogodki razvreni v ve razredovo primeri: KeyEvent,MouseEvent,ActionEvent,WindowEvento za vsak tip dogodka (razred) lahko dodamo ustreznega poslualcao v naem primeru potrebujemo poslualca za dogodke tipa WindowEvent

    - pregled dogodkov, vmesnikov in odzivnih metodtip dogodka vmesnik odzivne metodeActionEvent ActionListener actionPerformed (ActionEvent e)ItemEvent ItemListener itemStateChanged (ItemEvent e)TextEvent TextListener textValueChanged (ActionEvent e)AdjustmentEvent AdjustmentListener adjustmentValueChanged

    (AdjustmentEvent e)ContainerEvent ContainerListener componentAdded (ContainerEvent e)

    componentRemoved (ContainerEvent e)ComponentEvent ComponentListener componentMoved (ComponentEvent e)

    componentHidden (ComponentEvent e)FocusEvent FocusListener focusGained (FocusEvent e)

    focusLost (FocusEvent e)MouseEvent MouseListener

    MouseMotionListener

    mousePressed (MoiseEvent e)mouseReleased (MoiseEvent e)mouseEntered (MoiseEvent e)mouseExited (MoiseEvent e)mouseClicked (MoiseEvent e)mouseDragged (MoiseEvent e)mouseMoved (MoiseEvent e)

    KeyEvent KeyListener keyPressed (KeyEvent e)keyTyped (KeyEvent e)keyReleased (KeyEvent e)

    WindowEvent WindowListener windowActivated (WindowEvent e)windowClosing (WindowEvent e)windowClosed (WindowEvent e)windowDeactivated (WindowEvent e)windowDeiconified (WindowEvent e)windowIconified (WindowEvent e)windowOpened (WindowEvent e)

    - pregled metod za dodajanje poslualcevkomponente (izvori dogodkov) metode za dodajanje poslualcev

    Stran 64

  • Osnove programiranja 1

    JButton, JCheckBox, JComboBox, JToolBar, JTextField, JRadioButton

    addActionListener()

    JScrollBar addAdjustmentListener()Vse Swing komponente addFocusListener(),

    addKeyListener(), addMouseListener(), addMouseMotionListener()

    JButton, JCheckBox, JComboBox, JRadioButton

    addItemListener()

    JWindow, JFrame addWindowListener()JSlider addChangeEvent()

    - deklaracija poslualcao poslualec mora pripadati razredu, v katerem so implementirane metode

    za doloeno vrsto dogodkovo za dogodke tipa WindowEventse ta razred imenuje WindowAdapter in je

    implementacija vmesnika WindowListenero vmesnik WindowListener predpisuje 7 metod, ki ustrezajo posameznim

    dogodkom tipa WindowEventpublic void windowActivated (WindowEvent e)public void windowClosed (WindowEvent e)public void windowClosing (WindowEvent e)public void windowDeactivated (WindowEvent e)public void windowDeiconified (WindowEvent e)public void windowIconified (WindowEvent e)public void windowOpened (WindowEvent e)

    o v razredu WindowAdapter so te metode implementirane tako, da ob dogodku ne izvrijo nobene akcije

    o iz razreda WindowAdapter izpeljemo podrazred, ki redefinira metodo WindowClosing

    class Poslusalec extends WindowAdapter{ Public void windowClosing (WindowEvent e) { System.exit (0); }}

    o v konstruktorju za okno deklariramo poslualcaWindowListener p=new Poslusalec ();add WindowListener (p);

    - uporaba metode setDefaultCloseOperation()o s pomojo metode setDefaultCloseOperation() lahko doloimo

    operacijo, ki se izvede ob zapiranju oknao operacijo podamo kot argument ob klicu metodeo obstajajo vnaprej deklarirane konstante, ki doloajo posamezne operacije

    DO_NOTHING_ON_CLOSE: ne naredi ni HIDE_ON_CLOSE: zapre okno, program tee naprej DISPOSE_ON_CLOSE: zapre okno in unii objekt, ki predstavlja

    okno; program tee naprej EXIT_ON_CLOSE: prekine izvajanje programa

    o e ne doloimo operacije ob zapiranju, se avtomatsko privzame HIDE_ON_CLOSE

    Upotevanje karakteristik uporabnikovega raunalnika

    Stran 65

  • Osnove programiranja 1

    - raz