torek, 30. november 2010

Atribut length

V Javi pripada vsaki tabeki atribut length, ki predstavlja dolžino tabele. Dolžina tabele je v bistvu število elementov tabele.

od.length   12 // osebni dohodki
stevci.length 6 // meti kocke

Atribut length omogoča da pišemo bolj proste programe. Pomaga ko želimo napisati neke zanke.

for (int i = 0;  i
   od[i] = BranjePodatkov.preberiDouble();

Primeri: 
program Meti kocke (s tabelo) 


public class MetiKockeSTabelo {
    public static void main(String[]args){
       // deklaracija tabele stevcev
       int[] st = {0,0,0,0,0,0}

       // branje stevila metov
       System.out.println("Stevilo metov: ");
       int n = BranjePodatkov.preberiInt();

      //zanka, v katrei simuliramo mete
      for (int i = 1; i <=n; i++){
           int mer=(int)(Math.random()*6)+1;
          st[met-1]++
     }

     //izpis vrednosti vseh stevcev (vseh elementov tabele st)
      for (int i =0; i
           System.out.print ( st[i] + " ");
    }
}

Tabele

Tabela je sestavljena podatkovna struktura, ki združuje elemente podatkov istega tipa.


Primer 1: Simuliranje metov točke
Namesto šestih samostojnih spremenljivk, ki so predstavljale posamezne števce, raje uporabimo tabelo.


Primer 2:  Če moramo predstaviti podatke o osebnih dohodkih nekega delavca za recimo 12 mesecev predhodnjega leta, namesto 12 samostojnih spremenljivk raje vpeljemo tabelo.

Deklaracija tabele
Imamo dva koraka, ki sta podobna kot pri objektih.
1.) deklaracija spremenljivke, ki predstavlja tabelo
2.) samo deklariranje tabele

Tip spremenljivke je določen s tipom elementov in z ustreznim številom oglastih oklepajev. (Pari predstavljajo število dimenzij tabele. Št. dimenzij je v Javi neomejeno.)

V pomnilniku v 1. koraku dobimo spremenljivko z imenom števci. Njena vrednost je enaka null. (Tabele nismo kreirali.) V drugem koraku se dodeli prostor za tabelo. Vsaka celica predstavlja en števec.

Dostop do posameznih elementov je možen s pomočjo indeksov. Indeks je zaporedna številka elementa v tabeli. Pri Javi velja da se indeksi začenjajo od 0 dalje. (Zadni indeks je za ena manjši, kot je število vseh elementov v tabeli. )

int [] stevci;
stevci = new int [6];

-> koraka lahko združimo : int[]stevci = new int [6];

Vpis vrednosti v tabelo 
Ko tabeli dodelimo prostor (z operatorjem new) v pomnilniku, Java sama vzpostavi začetne vrednosti elementov:
- elementi numeričnega tipa dobijo vrednost 0;
-elementi tipa boolean dobijo vrednost false;
- elementi tipa char dobijo vrednost "\u0000"
- elementi, ki predstavljajo objekte dobijo vrednost null

Prireditveni stavek: vsakemu elementu posebej priredimo vrednost s prireditvenim stavkom.

od[0]= 1218; // januar
od[1] = 1088; // feb
od[2] = 1301; // marec
   .
   .
   .
od[11] 01835; // dec

Za prirejanje vrednosti vsem elementom naenkrat uporabimo zanko:

for (int i = 0;  i < 12; i++) {
  od[i] = BranjePodatkov.preberiDouble();
}

Druga možnost: inicializacija tabele s seznamom vrednosti: ko tabele deklariramo naštejemo vrednosti posameznih atributov.

double[] od = {1218, 1088, 1301, ... , 1835}; // osebni dohodek

int [] stevci = {0,0,0,0,0,0}; // meti kocke

sreda, 24. november 2010

Overloading

Imamo več metod z enakim imenom, a različnim seznamom parametrov. Izvede se tista metoda pri katrei se seznam formalnih parametrov ujema z dejanskimi.
Primer: Za razredDelavec napišemo še 2 konstruktorja. Prvi konstruktor vzpostavi samo vrednost matične številke (zato ima zgolj 1 parameter) Drugi konstruktor vzpostavi vrednosti vseh atributov (4 parametri)

public Delavec(int matSt){
    this.matSt=matSt;
}

public Delavec(int matSt, String priimek, String ime, int stUr){
    this.matSt=matSt;
    this.priimek = priimek
    this.ime = ime;
   this.stUr = stUr;
}

Kreiranje objektov s pomočjo teh dveh konstruktorjev:
// v razredu TestDelavec

Delavec d1=new Delavec (555);
Delavec d2= new Delavec (999, "Kralj", "Lev", 120);

Pisanje lastnih konstruktorjev

Omogoča, da nastavimo ustrezne začetne vrednosti atributov.Ob kreiranju objekta lahko izvedemo še druge operacije.Lahko deklariramo konstruktorje s parametri. Standarden javanski konstruktor potem ni več na razpolago.

Primer lastnega konstruktorja za razred Delavec


Predpostavka: Ko se delavec zaposli poznamo vrednost atributov matSt, priimek in ime, ne poznamo pa št. ur.

{popravki v razredu Delavec}

public Delavec (int matSt, String priimek, String ime) {
   this.matSt = matSt;
   this.priimek = priimek;
   this.ime = ime;
}

Uporaba tega konstruktorja v razredu TestDelavec :
Delavec d = newDelavec (234,"Novak", "Janez");

{popravki v razredu TestDelavec}

public class TestDelavec{
   public static void main
      Delavec d = new Delavec (234, "Novak", "Janez");
      // vpisi vrednosti atributov odpade ; razen za stUr !b

Napišemo lahko več lastnih konstruktorjev. Na ta način lahko objekt inicializiramo na več različnih načinov. Podlaga za pisanje več različnih konstruktorjev je koncept overloading (večkratno definiranje metod) .



Kreiranje objektov

Razred Delavec samo opisuje zgradbo objektov, ne kreira pa nobenega objekta. Kreiranje objektov poteka v dveh korakih. Prvi korak zahteva, da objekt deklariramo kot spremenljivko. Za tip objekta uporabimo kar tip razreda.
Delavec d; // tip objekta je določen z imenom razreda, v katrem je opisana zgradba tega objekta
                 // v drugem koraku dodelimo porostor za objekt in vzpostavimo začetne vrednosti atributov.
d = new Delavec();
// new: operator, ki v pomnilniku dodeli prostor za objekt
// Delavec: konstruktor, ki nastavi začetne vrednosti atributov
// Oba koraka lahko združimo:
// Delavec d = new Delavec();

Konstruktor je posebna metoda, ki se kliče skupaj z operatorjem new. Ime konstruktorja mora biti enako imenu razreda. Če mi ne napišemo lastnega konstruktorja, se uporabai standarden (default) konstruktor, ki je v Javi na razpolago avtomatsko. Glavna naloga konstruktorja je, da nastavi začetne vrednosti atributov, lahko pa izvaja tudi kakšne druge operacije. Konstruktor nikoli ne vrača vrednosti.

Standardni konstruktor dodeli atributom naslednje vrednosti:
- numerični atributi dobijo vrednost 0
- atributi tipa char dobijo vrednost ¨\u0000¨
- atributi tipa boolean dobijo vrednost false
- atributi tipa String dobijo vrednost null  (enako velja za vse atribute objektnega tipa in za tabele)

Imamo 2 vrsti podatkovnih tipov:
-vrednostni tipi : spremenljivka hrani vrednost nekega podatka (byte, short, int, long, float, double, char, boolean)
- sklicni tipi: spremenljivka vsebuje naslov podatka (String, tabele)

Nadaljevanje primera Delavec: Razred TestDelavec, ki uporablja razred Delavec


Naša rešitev obsega 2 razreda: RazredDelavec ki opisuje zgradbo objektov in razred TestDelavec, ki predstavlja aplikacijo, v katrei uporabljamo objekte tipa Delavec (application class)

public class TestDelavec{
   public static void main(String[] args){
   // kreiranje objekta
   Delavec d = new Delavec();
   //vpis vrednosti atributov
    d.vpisiMatSt(234);
    d.vpisiPriimek("Novak");
    d.vpisiIme("Janez");
    d.vpisiStUr(172);
    //izpis vrednosti atributov s pomočjo metod getter
    System.out.println("Maticna stevilka: " + d.vrniMatSt());
    System.out.println("Priimek in ime: " +d.vrniPriimek() + " " + d.vrniIme());
    System.out.println("Stevilo ur: " + d.vrniStUr());

   // izpis vseh atributov na enkrat z metodo izpisiVse
    d.izpisiVse();

   //izpis vsebine objekta s pomočjo metode toString
   System.out.println(d.toString());

   //izpis bruto osebnega dohodka
   System.out.println("Bruto OD:" + d.izracunajBrutoOD(10.5));
    }
}

Sklicevanje na metode in atribute razreda, ki opisuje zgradbo objektov
Splošno pravilo za sklicevanje metod, ki so vezane na objekte:
. ( )

Če bi bili v razredu Delavec atributi matSt, priimek, ime in stUr deklarirani z določilom public, bi jih lahko uporabljali na nasleden način:

d.matSt
d.priimek
d.ime
d.stUr
.

torek, 23. november 2010

Razredi in objekti

Razred: vsi objekti istega tipa tvorijo nek razred.
Objekt: konkreten primerek nekega razreda.

Objekt vsebuje atribute in metode.
Atributi: opisujejo lastnosti objekta in stanje objekta.
Metode: predstavljajo operacije, ki jih objekt lahko izvede.

Razred, ki opisuje izgradbo objektov vsebuje:
- deklaracije atributov
- deklaracije metod  in
- deklaracije konstruktorjev.

Skrivanje detajlov, ki so povezani z realizacijo: objekt se obnaša kot črna škatlja (enkapsulacija)

Primer: Razred delavec; opisuje zgradbo objektov, ki predstavljajo posamezne delavce v nekem podjetju

public class Delavec {
      // deklaracija atributov
     // atribute deklariramo kot spremenljivke, zaradi skrivanja detajlov uporabimo določilo private
     private int matSt;
     private String priimerk;
     private String ime;
     private int stUr;

     // dekaracija metod
    // uporabimo določilo public, tako da so metode dostopne tudi iz ostalih razredov
   // metode, ki so vezane na objekte nimajo določila static
   // v razredih ki opisujejo zgradboobjektov, imamo 3 vrste metod

   // metode setter ; metode , ki predstavljao verdnosti atreibutov
    public void vpisi MatSt (int ms){
             matSt = ms;
    }
    public  void vpisiPriimek(String p){
            priimek = p;
    }
    public void vpisiIme (String ime) {
            this.ime = ime;  // referenca this predstavlja naslov objekta, ki mu pripada ta metoda
    }
    public void vpisiStUr(int stUr){
           this.stUr= stUr;
   }

   // metode getter, ki vračajo vrednosti atributov
   public int vrniMatst(){
        return matSt;
   }
  public String vrniPriimek(){
        return priimek;
   }
   public String vrniIme(){
        return ime;
    }
   public int vrniStUr(){
       return stUr;
   }


 // metode utility; uporabne metode,. ki izvajajo različne koristne operacije
   public double izracunajBrutoOD (double cenaUre){
          return cenaUre* stUr;
   }
   public void izpisiVse(){
        System.out.println("Maticna stevilka: " +matSt);
        System.out.println("Priimek in ime: " + priimek+ " " +ime);
        System.out.println("Stevilo ur:" +stUr);
   }
   public String toString(){
           return matSt+" " +priimek+ " " +ime+ " " + stUr;
  }

nedelja, 7. november 2010

Metode

Uvod:
-def.metode
-zakaj jih uporabljamo
-kako jih deklariramo

Primeri:
-preprosta metoda brez parametrov
-metoda z parametri
-metoda, ki vrača vrednost

Def: Metoda je zaporedje stavkov, ki ima svoje ime. Ime omogoča da to zaporedje stavkov pokličemo z različnih mest v programu.

Uporaba metod: -Če se isto zaporedje stavkov pojavi na različnim mestih v programu potem zadostuje , da ga napišemo zgolj enkrat in kličemo z negovim imenom.
-Da izboljšamo strukturo programa. Program razdelimo na metode tako da vsaka metoda rešuje nek zaokrožen podproblem.
-Pri objektno usmerjenem programiranju (OOP)  z metodami opišemo operacije, ki jih izvajajajo posamezni objekti.

Deklaracije metod:
Metoda ima glavo in telo. Telo je zaporedje stavkov, ki se izvedejo (,ko metodo pokličemo). Glava pa je sestavljena iz več delov. -> ogled na primeru metode main.
public static void main (String[] args)
Glavo sestavljajo različna določila. V našem primeru public in static.
public: metoda je javna, dostopna tudi iz drugih razredov
static: metoda obstaja samostojno, brez povezave z objekti.

Sledi tip rezultata:
void: metoda ne vrača vrednosti. Če metoda vrača vrednost, moramo napisati kakšnega tipa je ta vrednost.

Sledi ime metode:
ime določi programer, začne se z malo črko.

Sledi seznam parametrov ( v oklepaju)
Seznam parametrov je lahko prazen.

Primer 1: Preprosta metoda brez parametrov
Predpopstavka: Pišemo nek program v katerem se na več različnih mestih pojavlja zahteva za izpis naslova fakultete.

public class Primer1 {
    public static void main (String[] args) {
    // razlicni staviki
   // prvo mesto, kjer potrebujemo izpis naslova
     naslov (); // klic metode, z imenom naslov
   // razlicni stavki

   // drugo mesto, kjer potrebujemo izpis naslova
    naslov ();

   // tretje mesto, kjer potrebujemo izpis naslova
     naslov ();
   }

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

Primer 2 :Metoda s parametri
Predpostavka: Želimo napisatinaslov poljubne fakultete
Rešitev je upeljava parametrov. Preko parametrov posredujemo metodi podatke, ki jih potrebuje za svoje delo.
Podatki: - prvi del imena fakultete
- drugi del imena fakultete
- ulica in hišna številka
- poštna številka in pošta

public class Primer2 {
    public static void main  (String [] args) {
          naslov ("Fakulteta za racunalnistvo", "in informatiko", "Trzaska 25", "1000 Ljubljana") ;
          naslov ("Fakulteta za upravo", " ", "Gosarjeva 5", "1000 Ljubljana") ;
          naslov ("Fakulteta za matematiko", "in fiziko", "Jadranska 15", "1000 Ljubljana") ;
    }
    public static void naslov (String ime1, String ime2, String ulica, String posta) {
         System.out.println ( ime1);
         System.out.println ( ime2);
         System.out.println ( ulica);
         System.out.println ( posta);
   }
}

Formalni parametri so tisti, ki jih navedemo v glavi metode. Služijo zgolj za opis postopka, ki ga metoda izvaja.
Dejanski parametri so tisti, ki jih navedemo ob klicu metode. Predtavljajo tiste vrednosti nad katerimi se postopek v resnici izvede.

Ob klicu metode pride do zamenjave formalnih parametrov z dejanskimi. Formalni se morajo ujemati v številu, vrstnem redu in tipu.

Ujemanje v tipu: Tip dejanskega parametra mora biti skladen s tipom formalnega parametra. Skladnost je dosežena: - če sta tipa enaka, - če je tip dejanskega parametra vsebovan v tipu formalnega (pride v poštev pri numeričnih tipih)

Primer3: Metoda s parametri
Želimo računatai obresti pri vezavi na eno leto. Metoda, ki izračuna vrenost depozita po enoletni vezavi.
Kaj so primerni parametri? -glavnica, -obrestna mera

public class Primer3{
    public static void main (String [] args) {
        poEnemLetu (1000, 3.5) ;
        poEnemLetu (100 000, 3.9);
        double gl = BranjePodatkov.preberiDouble();
        double obr = BranjePodatkov.preberiDouble();
        poEnemLetu(gl, obr);
   }
       public static void poEnemLetu (double glavnica, double obrMera) {
            double novoStanje = glavnica + glavnica * obrMera / 100;
            System.out.println(novoStanje);
      }

}

Dejanski parameter je lahko naveden kot: konstanta, spremenljivka ali izraz.

Primer 4: Metoda, ki vrača vrednost

Potrebni sta dve spremenljivki
Naloga: Predelamo metodo iz primera 3 v tako obliko, da bo vračala vrednost

1. spremenljivka: v glavi metode
Napisati moramo ime tipa, ki ga metoda vrne. S tem povemo, kakšnega tipa je vrednost, ki ga metoda vrača.

2. spremeljivka:
Stavek return
Služi za to, da povemo, kaj metoda vrne.

Splošna oblika stavka return:
return [izraz]; // izraz določa vrednost, ki jo metoda vrne.
V Javi vrstni red metod ni pomemben. Metode, ki vračajo vrednost ne kičemo kot samostojni satvek, ampak kot sestavni del izraza. 


Program:
public class Primer4 {
    public static double poEnemLetu (double glavnica, double obrMera) {
         double novoStanje = glavnica + glavnica * obrMera/100;
         return novoStanje;
   }
         //namesto gornjih dveh stavkov imamo lahko zgolj enega : return glavnica + glavnica * obrMera/100;
        public static void main (String [] args) {
            //metodo, ki vrača vrednost, kličemo znotraj izraza
           // klic metode, ki vrača vrednost, ni samostojen stavek, ampak je del izraza
           double novoStanje = poEnemLetu(1000, 3.5);
           System.out.println(novoStanje);
          System.out.println(poEnemLetu(100 000, 3.9));
          System.out.println("Po enem letu varcevalec dobi" + poEnemLetu (1000, 3.9) + "EUR ." ) ;
        }
 }




torek, 2. november 2010

Nekaj tipičnih postopkov

1. Računaje vsote
2.Iskanje minimuma / maximuma
3. gnezdenje zank


RAČUNAJE VSOTE
Vsoto pri pragramiranju računamo v zaniki. Pravilo: Pred vstopom v zanko spremenljivka vsota dobi vrednost 0.

Primer: Napišite program, ki prebere 5 števil in izračuna njihovo vsoto.


public class Vsota{
public static void main(String[] args){
int x;
      int vsota=0;
for (int i=1; i<=5; i=i+1){
System.out.print("Vnesi stevilo: ");
     x=BranjePodatkov.preberiInt();
vsota=vsota+x;
}
System.out.println("Vsota znasa: "+vsota);
}
}

Primer 2 : Iskanje maksimuma števil


public class Maksimum
{
public static void main (String[] args)
{
System.out.print ("Vnesi stevilo vnosov: ");
int n=BranjePodatkov.preberiInt();
int max=Integer.MIN_VALUE; // najmanjše možno celo število
//(-2^30==-2 milijardi)
for (int i=1; i<=n; i=i+1)
{
System.out.print ("Vnesi stevilo: ");
int x=BranjePodatkov.preberiInt();
if (x>max)
max=x;
}

System.out.println( "Maksimum: " + max);
}
}


// izmed 10-tih števil, izpiši največje število

public class Maksimum1 {
public static void main (String[] args){
int x;
int vsota=0;
for (int i=1;i<=10;i++) {
x=BranjePodatkov.preberiInt();
vsota=vsota+ x; //vsota+=x;
}
System.out.println("Vsota je " + vsota); //konkratenacija
}
}

Primer 3: Izpis poštevanke

//Gnezdenje zank->Napišimo program,
//ki izpiše tabelo poštevanke števil od 1 do 10.

public class Postevanka{
public static void main (String [] args){
int p;
for( int i=1; i<=10; i++){
//izpisi i-to vrstico postevanke
for(int j=1; j<=10; j++){
p=i*j;
System.out.printf("°%5d",p);
}
System.out.println();//skok v novo vrstico
}
}
}

GNEZDENJE ZANK

Primer: Program šahovnica / lovec iz učbenika Java skozi primere

//program za gnezdenje zank->Šahovnica/Lovec oz.tekač

public class PotezeLovca{
public static void main (String[] args){
// branje položaja lovca
int zacVr=BranjePodatkov.preberiInt();
int zacSt=BranjePodatkov.preberiInt();

//izpis šahovnice
for (int i=1; i<=8; i++) { // zanka za ispis vrstic (zunanja zanka)
for (int j=1; j<=8; j++) { //zanka za ispis polj v tekoči vrstici (notranja zanka)
//izpis enega polja
if (i+j==zacVr+zacSt|| i-j==zacVr-zacSt)
System.out.print ("*"); //polje je napadeno
else if ((i+j)%2==0)
System.out.print ("B");
else
System.out.print("C");
} //konec notranje zanke ; če je v jedru zanjke en sam stavek oklepaji niso potrebni;
 // izvaja se zgolj stavek if
System.out.println ();
} // zaključek zunanjae zanke; ima več stavkov
}
}

Podatkovni tipi

Vsaka spremenljivka pripada točno določenemu podatkovnemu tipu. Pred uporabo spremenljivke, moramo obvezno določiti njen tip. = spremenljivko deklariramo. Deklaracija spremenljivke zahteva da določimo: - njen tip, - njeno ime in - njeno začetno vrednost.
S tipom določimo katre vrednosti spremenljivka lahko zavzame. Tip določa operacije, ki jih lahko nad spremenljivko izvajamo. (t.j. katere operacije so dostopne/ dovoljene) .

8 OSNOVNIH PODATKOVNIH TIPOV:
Tipi za zela števila : bite, short, long, int
za realna števila: flout, double
za logične vrednosti: boolean
za znake: char

REALIZACIJA VHODNO-IZHODNIH OPERACIJ
Branje in izpis podatkov sta realizirana s pomočjo metod.
Izpis : System /* ime razreda */ . out /* ime objekta, ki mu metoda pripada * / . println (...) // kaj želimo izpisati

Metoda println izpiše podatke in skoči v novo vrstico. Print ravno tako izpiše podatke, a ostane v isti vrstici.

Branje: uporabili bomo razred BranjePodatkov. Vsebuje 3 metode:
- preberiInt() // za branje celih števil
- preberiDouble() // za branje realnih števil
- preberiString() // za branje nizov

Primer:

public class PloscinaZaporedje{

 public static void main (String[]args){
     double a=BranjePodatkov.preberiDouble();
     double b=BranjePodatkov.preberiDouble();
     double c=BranjePodatkov.preberiDouble();
     if (a+b>c && a+c>b && b+c>a) {
       double s=(a+b+c)/2;
       double p= Math.sqrt(s*(s-a)*(s-b)*(s-c));
       System.out.println(p);
     }
   }
}

Primer 2 : 
public class PloscinaIzbira {
   public static void main (String[]args){
     double a=BranjePodatkov.preberiDouble();
     double b=BranjePodatkov.preberiDouble();
     double c=BranjePodatkov.preberiDouble();
     if (a+b>c && a+c>b && b+c>a) {
       double s=(a+b+c)/2;
       double p= Math.sqrt(s*(s-a)*(s-b)*(s-c));
       System.out.println(p);
}
  else{
    System.out.println ("Napačni podatki");
    }
  }
}

Primer 3: Računanje 5-tih trikotnikov s stavkom do ... while
public class PloscinaDoWhile{
public static void main(String[] args){
int i=1;
do{
double a=BranjePodatkov.preberiDouble();
double b=BranjePodatkov.preberiDouble();
double c=BranjePodatkov.preberiDouble();
if (a+b>c && a+c>b && b+c>a){
double s=(a+b+c)/2;
double p=Math.sqrt(s*(s-a)*(s-b)*(s-c));
System.out.println(p);
}
else{
System.out.println("Napacni podatki");
}
i=i+1;
} while (i<=5);
}
}

Primer 4: S stavkom while

public class PloscinaWhile{
public static void main(String[] args){
int i=1;
while (i<=5){
double a=BranjePodatkov.preberiDouble();
double b=BranjePodatkov.preberiDouble();
 double c=BranjePodatkov.preberiDouble();
if (a+b>c && a+c>b && b+c>a){
double s=(a+b+c)/2;
double p=Math.sqrt(s*(s-a)*(s-b)*(s-c));
System.out.println(p);
}
else{
System.out.println("Napacni podatki");
}
i=i+1;

}
    }
}

Primer 5: s stavkom for
public class PloscinaFor{
  public static void main(String[] args){
for (int i=1; i<=5; i=i+1){ // krajši način je i++ ali ++1
double a=BranjePodatkov.preberiDouble();
double b=BranjePodatkov.preberiDouble();
    double c=BranjePodatkov.preberiDouble();
if (a+b>c && a+c>b && b+c>a){
double s=(a+b+c)/2;
double p=Math.sqrt(s*(s-a)*(s-b)*(s-c));
System.out.println(p);
}
else {
    System.out.println("Napacni podatki");
              }
}
}
}

Kadar število iteracij ni znano v naprej uporabimo stavka do ali do ... while, drugače uporabljamo stavek for. 




Stavki v Javi

Prireditveni stavek:
"spremenljivka" = "izraz";
Primer:
s=(a+b+c) : 2;
Ima nalogo da spremenljivki priredi vrednost izraza.

Stavek za izbiro:
1. stavek if
2. stavek swich

STAVEK IF

if () {
.
.
.
.
}
       else {
      .
     .
     .
     .
     }

Če je pogoj izpoljen se izvršiblok stavkov. Če pogoj ni izpoljen se izvrši drugi blok stavkov. Vpeljemo jih z besedo else .


Okrjena verzija stavka if 


if (){


}

Če pogoj ni izpoljen se program izvrši pri prvem stavku, ki sledi temu bloku.

Gnezdenje stavka if
Uporablja kadar je treba izbirati med beč kot dvema variantama.

Primer izbire med štirimi variantami:

if("pogoj1"){
.
.
}
     else if ("pogoj2"){

     .
     .
     .
     }
            else if (){
             .
             .
             .
             }
                    else if ("pogoj3"){
                     .
                      .
                      .
                     }
                           else{
                           .
                           .
                           .
                           }


Stavki za ponavljanje
STAVEK DO-WHILE
Pogoj za nadaljevanje prekinitve ponavljanja je na koncu jedra zanke. Izvede se najmanj en prehod pri jedru zanke. 
Stavek 1. while 2.for
Pogoj za nadaljevanje oz. za prekinitev ponavljanja je na začetku jedra zanke. 

Pravila za stavke:
STAVEK DO-WHILE

do{
.
.
.
}
    while(){
    .
    .
    .
    }

STAVEK WHILE
while(){
.
.
.
}

Vrednost pogoja je true ali false. True-ostanemo v zanki; ponavljanje se nadaljuje. False-ponavljanje se prekine. 

STAVEK FOR:
Združuje na enem mestu 3 pomembne sestavne dele zanke.
1. določitev začetne vrednosti števca
2.pogoj za prekinitev ponavljanja in nadaljevanje
3. povečanje števca (števec se lahko toretično tudi zmanjšuje) 

for ( ; ; ) {
.
.   //jedro zanke
.
}




Preprosti programi

Kako diagrame poteka zapisati v Javi?

OGRODJE JAVANSKEGA PROGRAMA
Vanj vgradimo stavke/ukaze programa. Vsak javanski program sprogramiramo kot razred. V tem razredu moramo imeti metodo main. Ta se zažene avtomatično, ko sprožimo izvajanje programa.

Primer:
public class { // glava razreda

     public static void main (String[] args) {  // glava metode main
            .
           .
           . //stavki programa 
           .
          .
       }
}


Stavki predstavljajo telo metode main. {} označujejo začetek in konec metode main.
Blok stavkov / stavčni blok = stavki, ki se nahajajo med dvema zavitima oklepajema. Zaporedje realiziramo kot blok stavkov. Oklepaji nastopajo v parih. 
Naše ogrodje vsebuje 2 bloka. Zunanji predstavlja telo razreda, notranji pa telo metode main. 
V telesu imamo lahko več metod. Telo metode pa vsebuje več stavkov. 


Pravila za ime razreda: 
-prvi znak je lahko črka, podčrtaj, znak za dolar
-ostali znaki so lahko isti, dopustne so lahko tudi številke


Java je občutljiva na velikost črt. Strogo loči med velikimi in malimi. 
Leposlovna pravila:
-ime razreda se začne z veliko začetnico.
-kadar je sestavljeno iz več besed, se vsaka beseda začne z veliko začetnico.
-resledki med besedami niso dovoljeni. npr. (PrviProgram)


Enaka pravila veljajo za imena spremenljivk, metod in razredov.
Ime spremenljivke ali metode vedno pišemo z malo začetnico. Ime razreda vedno z veliko. Če je več besed v metodi, spremenljivki, prva z malo, ostale pa z veliko. (npr.   prvaMetoda) 
Zamikanje blokov: vsak naslednji vgnezden blok pišemo zamaknjeno nekoliko v desno. 
Uporaba zavitih oklepajev: Zaprti oklepaj je zamaknjen v desno za toliko kot prva vrstica bloka, ki mu pripada.


POSTOPEK PRIPRAVE IN IZVAJANJA PROGRAMA
1. Program napišemo in shranimo na datoteko. Ime datoteke mora imeti enako ime kot razred .java. 
2. Program prevedemo s pomočjo prevajalnika. Z ukazom javac .java
Rezultat prevajanja se shrani na datoteko z umesno kodo. Ime datoteke je jeako imenu razreda, spremeni pa se podaljšek .class
3. Program zaženemo z ukazom java


PRVI PROGRAM: 



public class Pozdrav{
public static void main(String[]args){
System.out.println("Pozdravljen svet!");
}
}










Osnovni programski konstrukti

Vsak program lahko zapišemo s tremi osnovnimi programskimi konstrukti:
-zaporedje ( nekih ukazov)
-izbira (omogoča 2 ali več različnih možnosti / več različnih zaporednih ukazov)
-ponavljanje

Grafični prikaz: diagram poteka (flow chart)  Danes se ne uporabljajo več kot sredstvo za prikaz poteka programov.

Primer:
Izračun prloščine trikotnika, če so podane vse tri stranice.

Pojmi:
-spremenljivka
-izraz
-prijejanje vrednosti

Spremenljivka=celica oz. lokacija v pomnilniku, ki hrani nek podatek.
Izraz= formula oz. računalniški predpis, s pomočjo katerega izračunamo neko vrednost.
Prirejene vrednosti = shranjevanje/zapis neke vrednosti v spremenljivko.

Izbiro realiziramo s kretnico v kateri zapišemo pogoj ( kot logični izraz).

OSNOVE PROGRAMIRANJA

Odločila sem se da na tem mestu objavim zapiske lanskega leta iz predavanj pri predmetu Osnove programiranja. (Nosilec: prof.Mahnič) vaje pa bodo letošnje.

Vabim k komentiranju!



Želim vam uspešno učenje Jave! :)

petek, 11. junij 2010

We are alike...

Vsem želim čimveč uspeha na izpitu in pri nadaljnjem študiju! 

torek, 25. maj 2010

25.05.2010_NOMINALIZACIJA



Postopek s katerim ugotavljamo če smo relacije pravilno oblikovali.
Če ja:
Ni redundance podatke
Ne bo prišlo do težav pri brisanju, vnašanju podatkov v bazo
4 stopnje normalizacije

n      Kaj si bomo pogledali?
n      Namen normalizacije.
n      Uporaba normalizacije pri načrtovanju relacijske podatkovne baze.
n      Problemi zaradi redundance podatkov v osnovnih relacijah.
n      Postopek normalizacije.
n      Osnovne normalne oblike:
n      I. normalna oblika,
n      II. Normalna oblika,
n      III. Normalna oblika
n      IV. Poslovna normalna oblika


Primeri težav/anomalij : glej prosojnice!


  • Relacije, ki vsebujejo odvečne podatke lahko povzročajo anomalije pri spreminjanju podatkov à govorimo o ažurnih anomalijah.
  • Poznamo več vrst anomalij:
        Anomalije pri dodajanju n-teric v relacijo
        Anomalije pri brisanju n-teric iz relacije
        Anomalije pri spreminjanju n-teric

Anomalije pri dodjanju:
        Če želimo dodati podatke o novih članih (staff) za neko organizacijsko enoto (branch) moramo vpisati tudi vse podrobnosti o organizacijski enoti.
        Če želimo dodati podatke o novi organizacijski enoti, ki še nima nobenega člana, moramo v vsa polja , ki člane opisujejo, vpisati Null.


        Če iz relacije zbrišemo n-terico, ki predstavlja zadnjega člana v neki organizacijski enoti, zgubimo tudi podatke o tej organizacijski enoti.


        Če želimo spremeniti vrednost nekega atributa določene organizacijske enote (npr. naslov), moramo popraviti vse
n-terice, v katerih takšna vrednost atributa nastopa.






Kako preprečimo anomalije?
Z normalizacijo.

  • Postopku preoblikovanja relacij v obliko, pri kateri do ažurnih anomalij ne more priti, pravimo normalizacija.
  • Obstaja več stopenj normalnih oblik. Obravnavali bomo:
        1NO – Prva normalna oblika
        2NO – Druga normalna oblika
        3NO – Tretja normalna oblika in
        4PNO – Četrta poslovna normalna oblika



  1. normalna oblika (1NO):
-zahtevamo da ni ponovljajočih skupin atributov
-določimo funkcionalne odvisnosti
- da je definiran ključ
Postopek:
  • Koraki:
        Odstranimo ponavljajoče atribute
        Določimo funkcionalne odvisnosti
        Določimo primarni ključ


Primer:




F==množica vseh funkcionalnih odvisnosti
Ključ je množica atributov, ki določa vse ostale atribute. (vpisna št + šifra predmeta)

  1. normalna oblika (2NO)
- relacija mora biti v 1NO
- ne sme vsebovati parcialnih odvisnosti
(noben atribut, ki ni del ključa, ni funkcionalno odvisen le od dela primarnega ključa, temveč od celotnega ključa)


Relacija je avtomatsko v drugi normalni obliki, če:
– Je njen primarni ključ sestavljen le iz enega atributa,
– Je njen primarni ključ sestavljen iz vseh atributov relacije ali
– Je njen primarni ključ sestavljen iz vseh razen enega atributa relacije




  1. normalna oblika (3NO)
-relacija mora biti v 2NO
- ne vsebuje transitivnih normalnih odvisnosti
Uporabimo lahko dekompozicijo.

Relacija je v tretji normalni obliki:
– Če je v drugi normalni obliki in
– Če ne vsebuje tranzitivnih funkcionalnih odvisnosti 􀃆 med
atributi, ki niso del primarnega ključa, ni odvisnosti.
􀂃 Relacija je avtomatsko v tretji normalni obliki, če:
– Je njen ključ sestavljen iz vseh atributov relacije
– Je njen ključ sestavljen iz vseh razen enega atributa relacije




4 poslovna normalna oblika 4PNO
je v tretji normalni obliki
v relaciji ne obstajajo atributi, ki bi bili odvisni od vrednosti primarnega ključa





Uporaba Nenormaliziranih relacij...
Primer:

– Rezultat (športnik, tekmovanje, čas prvega teka, čas
drugega teka, čas skupaj)
– Relacija ni v tretji normalni formi.
– Čas skupaj je izpeljan atribut 􀃆 ni odvisen od ključa, temveč
je seštevek časov obeh tekov.
– Skupen čas računamo ob vpisu v bazo, zato izboljšamo
učinkovitost pri nadaljnji obdelavi podatkov.

FIZIČNO MODELIRANJE
  • Načrtovanje fizične PB je korak, ki sledi logičnemu načrtovanju.
  • Logični načrt opredeljuje “kaj”, fizični načrt pa “kako”.
  • Vhod v načrtovanje fizične PB so:
         Logični podatkovni model,
         Relacijska shema
         dokumentacija


Metoda logičnega načrtovanja...
  • Možni koraki: Možni koraki konceptualnega načrtovanja:
         K1.1: Identificiraj entitetne tipe
         K1.2: Identificiraj povezave
         K1.3: Identificiraj in z entitetnimi tipi poveži atribute
         K1.4: Atributom določi domene
         K1.5: Določi kandidate za ključe; izmed kandidatov izberi
                  primarni ključ
         K1.6: Po potrebi uporabi elemente razširjenega diagrama
                  entiteta – razmerje
         K1.7: Preveri, če v modelu obstajajo odvečni elementi
         K1.8: Preveri, če model “zdrži” transkacije
         K1.9: Preveri model z uporabnikom

  • Možni koraki logičnega načrtovanja:
         K2.1: Za entitetne tipe kreiraj relacije
         K2.2: Preveri relacije z normalizacijo
         K2.3: Preveri relacije s pregledom uporabniških transakcij
         K2.4: Preveri omejitve integritete
         K2.5: Preveri model z uporabnikom
         K2.6: Združi lokalne modele v globalni model (opcijsko)
         K2.7: Preveri zmožnosti modela za razširitve



Ročna pretvorba: močni + šibki entitetni tipi


Povezave:    1 : *   + 1 : 1
Če je obveznost na obeh straneh 1:1 povezave potem lahko združimo.

Povezava, ki ni obvezna na obeh straneh. Obvezno entiteto vzamemo kot osnovo in njen ključ prenesemo še v drugo smer.

Rekurzivne povezave: problematične, rezultat prenašanja ključev je lahko nerazumljiv.
Definiramo še en ID. Genaerator kar podvoji oznako (t.j. ključ) zato ga ponavadi preimenujemo.

Povezave med nadtipi in podtipi:
      • Identificiraj nadtipe kot očete ter podtipe kot otroke. Obstajajo različne možnosti, kako takšne povezave predstaviti z relacijami.
      • Izbira najbolj ustrezne opcije je odvisna od številnih faktorjev: izključevanje, obveznost povezav, število entitet v povezavi....




Povezave * : *
Potrebujemo vmesno relacijo.


Več-vrednostni atributi:
Za njih moramo kreirati novo relacijo. (Npr. Telefon je GSM, stac... Se omejimo. Poznamo končno število.)
Če ne vemo koliko je končnih vrednosti  naredimo namesto atributa nov entitetni tip.


Pravila združevanja lokalnih modelov:
  • Namen tega koraka je združiti vse lokalne modele v en globalni model, ki predstavlja vse uporabniške vidike podatkovne baze.
  • Čeprav so lokalni modeli preverjeni, lahko pri njihovem združevanju pride do prekrivanja in neskladnosti.
  • Globalni model preverim podobno kot smo preverjali lokalne modele.
  • Če pri načrtovanju nismo zajeli več uporabniških vidikov, lahko korak preskočimo.
    • Preveri imena in vsebino relacij ter njihove kandidate za ključ.
    • Preveri imena in vsebino povezav in tujih ključev.
    • Združi relacije z lokalnih podatkovnih modelov
    • Brez združevanja vključi relacije, ki so unikatne v posameznih podatkovnih modelih.
    • Združi povezave in tuje ključe z lokalnih podatkovnih modelov. Brez združevanja vključi povezave in tuje ključe, ki so unikatni v posameznih podatkovnih modelih.
    • Preveri, če morda manjkajo relacije, povezave in tuji ključi.
    • Preveri tuje ključe.
    • Preveri pravila za zagotavljanje celovitosti podatkov.
    • Nariši globalni podatkovni model.
    • Ažuriraj dokumentacijo.








Metoda načrtovanja fizične PB....
Do sedaj smo imeli le modele od tu naprej pa kreiramo fizično bazo
Odločamo o tem:
-kakšne so osnovne relacije
-datotečna organizacija
- kako bomo imeli indekse definirane ...

2. koraka:
k3 + k4
K3:Pretvorimo fizični model v jezik ciljnega SUPBja
K4: Izdelamo načrt datotečne organizacije in indeksov
Podrobnosti: glej ppt!!!

Osnovni vir za kreiranje podatkov je katalog. J
-podatkovni slovar: podatki glej ppt!!!

Predstavitev izpeljanih atributov:
Določiti moramo ali je shranjen v fizični bazi ali ne. Da se jih izračunat. Kaj je večji časovni strošek?
Primer hranjenja izpeljanega atributa
......
Načrt splošnih omejitev....Jih definiramo kot je pač mogoče.
Datotečna organizacija in indeksi ...
Namen je izbrati optimalno datotečno organizacijo.
Analiza transakcij: previrjamo katere so transakcije ki vplivajo na učinkovitost....Pregledamo zgolj najpomembnejše. Naredimo matriko transakcija/relacija in nato diagram transakcij.
Izbira datotečne organizacije....kopica, hash tabela, kakšni bodo indeksi...
Izbira indeksov... à smernice za uporabo sek. Indeksov
Ocena velikosti PB....
Načrt varnostnih mehanizmov: sistemska + podatkovna varnost ....
Uvedba nadzorovane redundance...
Nekaj pravil denormalizacije...
  • Koraki denormalizacije:
         K7.1 – združevanje 1:1 povezav
         K7.2 – Podvajanje neosnovnih atributov v povezavah 1:* za zmanjšanje potrebnih stikov.
         K7.3 – Podvajanje tujih ključev v 1:* povezavah za zmanjšanje potrebnih stikov.
         K7.4 – Podvajanje atributov v *:* povezavah za zmanjšanje potrebnih stikov.
         K7.5 – Uvedba ponavljajočih skupin atributov
         K7.6 – Kreiranje tabel, ki predstavljajo izvleček osnovne tabele.
         K7.7 – Razbitje relacij.

»Lookup Tabele« - so najmanjši šifranti imajo zgolj ime in ID.
LookUp tabele se sestoje zgolj iz šifre in naziva. Prednosti
uporabe LookUp tabel so mnoge. Vseeno obstajajo primeri,
ko je smiselno (LookUp tabele ukiniti in) podatke podvajati
v osnovnih relacijah. Taki primeri so:
         Ko se do LookUp tabele frekventno dostopa
         Ko so LookUp tabele uporabljene v kritičnih poizvedbah
         Ko je majhna verjetnost, da se bodo po vrednosti spreminjale

Uporaba izvlečkov....Za poizvedbe ki zahtevajo dostop do več relacij in povezave med njimi zahtevamo da dostopajo do njih bolj hitro.
Razbitje relacij...Relacije ki so zelo velike lahko razbijemo na particije. 2 načina: horizontalni + vertikalni.
Povečevanje učinkovitosti na račun paralerizma.
Prednosti razbitja relacij na particije:
         Boljša porazdelitev vnosa (load balancing)
         Večja učinkovitosti (manj podatkov za obdelavo, paralelnost izvajanja,...)
         Boljša razpoložljivost
         Boljša obnovljivost
         Več možnosti za zagotavljanje varnosti


Slabosti razbitja relacije na particije
  • Particioniranje ima tudi slabosti:
         Kompleksnost (particije niso vedno transparentne za uporabnike...)
         Slabša učinkovitost (pri poizvedbah, kjer je potrebno poizvedovati po več particijah, je učinkovitost slabša)
         Podvajanje podatkov (pri vertikalnem particioniranju)

Vpeljujemo v kontroliranem načinu