Člani razredov

(class members)

Dosedanje ukvarjanje z javanskimi programi je baziralo na enostavni strukturi zagonskega razreda in izvajanju glavne funkcije, ki je vsebovala vso potrebno izvajalno kodo (postopek) in zahtevane podatke za izvedbo postopka. Preprosta predloga, ki smo jo uporabili je bila nekako taka, kot je opisano spodaj:

class Predloga {


  
   public static void main(String[] argumenti){
          
       // izvajalna koda
   }


}

 

Funkcija main(String[]) je pri tem tista, ki določa vstopno točko v naš program, oz. drugače povedano, določa, kje se bo naš program začel izvajati. Tako je prvi stavek izvajalne kode v tej funkciji tisti, ki se pri zagonu programa prvi izvede.

Izvajalna koda glavne funkcije je pri tem lahko vsebovala deklaracijo podatkov, prirejanja, izračune, včasih pa tudi uporabo drugih javanskih razredov oz. v njih definiranih konstant (literalov) in funkcij :

int radij = java.lang.Math.min(3,4);
double obsegKroga = 2*java.lang.Math.PI*radij;
int pseudoNakljucno = (int)(java.lang.Math.random()*6+1);

V prvem (izvajanje main funkcije) in drugem (uporaba Math razreda) primeru lahko opazimo, da smo lahko določene elemente razredov uporabili brez tega, da bi naredili kakršenkoli objekt (edini 'objekt', s katerim smo se do sedaj seznanili in ga uporabili, je bila tabela; v primeru rabe tabel smo videli, da jo dejansko naredimo, oz. ustvarimo objekt, s posebnim operatorjem new ).

Kreiranje objekta iz razreda Math bi bil v našem primeru strani nesmisel. Samo kreiranje objekta za seboj potegne rezervacijo pomnilnika. Po eni strani rezervacija ta omogoča pomnenje podatkov, po drugi pa troši pomnilnik, ki bi bil lahko na voljo drugim potrebnim elementom tega ali drugih programov.

Rezervacije pomnilnika in pomnenja v objektu Math, s tem, da uporabimo konstanto, definirano v razredu, ali njegovo funkcionalnost, pri npr. določanju minimuma, dejansko ne potrebujemo, saj smo jo z deklaracijo podatka naredili že v lastnem razredu.

Z glavno funkcijo javanskega programa pa nastopa še en problem: glavna funkcija javanskega programa je tista pri kateri se program začne izvajati oz. se prične izvajati predenj imamo narejen kakšenkoli objekt.

Statične metode in lastnosti razredov

V objektno-usmerjeni terminologiji funkcije znotraj razredov in objektov poimenujemo metode, o podatkih govorimo kot o lastnostih.

Metode in lastnosti so lahko definirane in delujejo na nivoju razreda; pri tem ne potrebujejo za svoje delovanje nobenega javanskega objekta.

Člane razreda (metode in lastnosti) prepoznamo po tem, da pred njihovo deklaracijo stoji poseben kvalifikator static:

static int sprem; 
public static void main(String[] argumenti){ ...  

Primer rabe :

class PrLastnostiRazredov {
  
  static double avogadrovoSt     = 6,022.141.99E+23;
  static double plackovaKonst    = 6,6261E-34;           //Js
  static int    atmTlak          = 101325;               //Pa

  
  public static void main(String[] argumenti){
          
       // izvajalna koda
       System.out.println("Atmosferski tlak :"+atmTlak);
       System.out.println("Avogadrovo število :"+avogadrovoSt);
       System.out.println("Planckova konstanta :"+planckovaKonst);

  }

}

Omejitev rabe statičnim (razrednih) lastnosti in metod:

ker so definirane na nivoju razreda in zanje ne potrebujemo nobenega ustvarjenega objekta, lahko mešana raba razrednih in objektnih članov privede do nedelovanja programa (npr. v statični metodi uporabimo lastnost objekta, ki ga še nimamo, ..). Zato velja omejitev pri rabi statičnim metod : statične metode lahko naslovijo le statične lastnosti in statične metode:

Primer nedelujočega programa:

class PrLast01 {


  int atmTlak = 101325;      // v Pa         

  
  public static void main(String[] argumenti){
          
       System.out.println("Atmosferski tlak :"+atmTlak);

  }

}

Lastnost atmTlak zgornjega programa se v pomnilniku ustvari takrat, ko ustvarimo objekt razreda PrLast01, saj se z rezervacijo objekta ustvari tudi prostor za ta podatek. Ker tega nikjer nismo izvedli, lastnost dejansko ne obstaja, in kot tako, je tudi ne moremo nasloviti.


Kje in za kaj lahko izkoristimo metode in lastnosti razredov ?

Logičen odgovor na zgornje vprašanje so 'programske knjižnjice' oz. drugače povedano : nabor podatkov in funkcionalnosti, ki jih v nespremenjeni obliki pogosto uporabljamo v svojih programih.

Kreirajmo knjižnjico fizikalnih konstant. Da je ne bo potrebno vsakič znova pisati v naš zagonski razred, jo izločimo v samostojnega z imenom MojeFizikalneKonstante.

class MojeFizikalneKonstante {

   // le lastnosti, ki predstavljajo konstante
   public static double U = 1,660.540.2 E+10; // atomska masa v kg
   public static double C = 2,99792458E+8     // hitrost svetlobe v m/s
   public static double G = κ = 6,672.59E-11  // gravitacijska konstanta v m3s-2kg-1
}

in jo uporabimo v lastnem programu :

class UpKonst{

   public static void main(String[] arg){
      System.out.println(MojeFizikalneKonstante.U);
		System.out.println(MojeFizikalneKonstante.C);
		System.out.println(MojeFizikalneKonstante.G);
   }
  
 }

Uporabo razrednih metod si bomo ogledali v naslednjem razdelku.


Na hitro:

Razredne metode in lastnosti so definirane na nivoju samega razreda, zato jih lahko uporabimo brez objekta ustreznega tipa.

Ključna za deklaracijo in prepoznavo je besedica static pred deklaracijo.

static int stevec;  
public static void main(String[] arg){ ...}  

Statične metode lahko naslavljajo le statične člane razreda ne pa tudi nestatičnih.