Izpitno vprašanje RAČ2PRA 1000

Iz MaFiRaWiki

GFDL Avtor tega članka je študent/ka Ivana.

Pripravil/a ga je pri predmetu Računalništvo 2 (FMF PRA).


Kljub temu ste vsi vabljeni k urejanju in popravkom, saj je bistvo wikija ravno v sodelovalnem delu.


Vprašanje

|Vpr. 1000| Metode in konstruktorji v javi.


Odgovor

Metode

Večje programe razdelimo v manjše kose in nato obravnavamo vsak kos posebej. V Javi, in v mnogih ostalih programskih jezikih, se v ta namen uporabljajo metode, ki jim rečemo tudi funkcije, procedure ali podprogrami.
V Javi obstajata dve vrsti metod, statične in objektne metode.
Osnovni pojmi v zvezi z metodami so deklaracije, definicija in klic metode.

1. Deklaracija:

Z deklaracijo podamo osnovne podatke o metodi:
  1. določila: statična ali objektna, javna ali privatna metoda
  2. ime: imena metod začnemo z malo črko (imena lahko začnemo tudi z veliko črko; Java jih bo sprejela)
  3. tip rezultata, ki ga metoda vrača; če pa metoda ne vrača rezultata, navedmo tip void
  4. imena in tipi argumentov, ki jih metoda sprejme.
Primer statične in objektne metode:

  1. // staticna metoda
  2. public static void main(String[] a)
  3. // objektna metoda
  4. private int size()

2. Definicija:

Definicija metode je programska koda, ki se imenuje tudi telo metode in se izvede vsakič, ko metodo pokličemo. Definicijo zapišemo v blok takoj za deklaracijo.


Primer definicije mtode:

  1. public static int produktDvehStevil(int a, int b){
  2. int rezultat = 0;
  3. rezultat = a * b;
  4. return rezultat;
  5. }


Vsaka metoda je definirana v nekem razredu. Če je metoda produkt definirana v razredu Operacije, potem je njeno polno ime: Operacije.produkt; skrajšano ime pa je: produkt.
Metoda vrne rezultat z ukazom return.

3. Klic

Metodo uporabljamo tako, da jo pokličemo ali izvedmo. Pri klicu metode moramo navesti njeno polno ime. Če metodo kličemo iz istega razreda, v katerem je definirana, lahko uporabimo skrajšano ime.


Primer klicanja statične in objektne metode:

  1. // klic staticne metode
  2. ime_metode(arg1, arg2,..., argN)
  3. // klic objektne metode
  4. onj.ime_metode(arg1, arg2,..., argN)
Pri statični metodi navedmo polno ali skrajšano ime metode in nato vse argumente v oklepaju, ločene z vejicami. Če metoda ne sprejme nobenih argumentov, napišemo prazen oklepaj (). Pri objektivni metodi je obj objekt, na katerem se kliče metoda, nato sledi polno ali skrajšano ime metode in še vsi argumenti, ločeni z vejicami.


Objektne metode:

Metoda je zaporedje ukazov, ki kaj izračunajo in vrnejo rezultat.
Objektna metoda se razlikuje od običajnih funkcij v ostalih programskih jezikih in od statičnih metod v Javi v tem, da jo vedno kličemo na objektu. V metodi se objekt, na katerem je poklicana, imenuje this.


Dedovanje je metoda objektnega programiranja, s katero organiziramo in povečamo razrede, ki sestavljajo program.
Med razredi lahko pride tudi do prekrivanja metod. Če ima nadrazred metodo z enakim imenom, kot jo ima metoda podrazreda, potem metoda v podrazredu prekrije metodo iz nadrazreda. Do prekrite metode znotraj podrazreda dostopamo z besedo super.ime_metodeNadrazreda().


Razlika med statičnimi in objektnimi metodami:

  • Statično metodo bla() v razredu Foo lahko vedno izvedemo z ukazom Foo.bla(). Znotraj statistične metode objekt this ni definiran, ker se statična metode ne kliče na objektu.
  • Objektno metodo hej() v razredu Foo lahko izvedemo, če imamo neki objekt x razreda Foo, z ukazom x.hej(). Znotraj metode hej() označuje this objekt, na katerem je metoda poklicana.


Konstruktorji

Konstruktor je posebna metoda, ki ima enako ime kot je ime razreda. S pomočjo konstruktorjev v Javi delamo nove objekte na bolj praktični način. Konstruktor uporabimo v ukazu new. Java najprej naredi nov objekt, nato pa pokliče konstruktor. Znotraj konstruktorja se pravkar narejeni objekt imenuje this.
Namen konstruktorja je, da nastavi vrednosti komponent objekta. Ker konstruktorji, pa tudi druge metode znotraj razreda, zelo pogosto dostopajo do komponent, nam Java omogoča, da namesto this.komponenta pišemo kar komponenta. V danem razredu je lahko tudi več konstruktorjev.
Če konstruktor vsebuje klic super(a,b), pomeni, da je ta konstruktor definiran v podrazredu nekega nadrazreda in da, kličemo konstruktor, ki se nahaja v nadrazredu. Skratka besedica super pomeni, da se sklicujemo na nadrazred, besedica this pa pomeni objekt, na katerem se izvaja objektna metoda. Če je besedica this na začetku konstruktorja, pomeni da kličemo kak drug konstruktor.
Primer konstruktorja v razredu Avtomobil:

  1. public class Avtomobil{
  2. public String znamkaAvta;
  3. public int stGum;
  4. public int stVrat;
  5. public int porabaGoriva;
  6. public String barva;
  7. public int cena;
  8. // konstruktor, kjer namestimo komponente Avtomobila
  9. public Avtomobil(String tip, int g, int v, int p, String b, int c){
  10. znamkaAvta = tip;
  11. stGum = g;
  12. stVrat = v;
  13. this.porabaGoriva = p;
  14. this.barva = b;
  15. this.cena = c
  16. }
Osebna orodja