Računalništvo 1 (PRA)

lekcije / Metode

Metode

Vsi programi, ki smo jih napisali do sedaj, so precej preprosti in kratki. Pravi programi pa so običajno precej večji (na primer, glavni del operacijskega sistema Linux sestoji iz približno 1.6 miljona vrstic), zato jih ni moremo kar napisati od začetka do konca v metodi main, kot smo programe pisali do sedaj. 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.
Pomeben del pisanja programa je odločitev, kako ga bomo razdelili na posamezne metode. Kot vseh drugih veščin v programiranju, se tudi te naučimo predvsem s prakso. Veljajo pa nekatera splošna načela za pisanje metod:
  1. Program razdelimo na metode tako, da je bolj pregleden.
  2. Metode pišemo tako, da jih lahko kasneje znova uporabimo v kakem drugem programu.
  3. Na kakšne metode bo program razdeljen, se odločimo, ko začnemo program pisati.
  4. Med pisanjem programa se pogosto izkaže, da smo kako metodo slabo načrtovali, ali pa da potrebujemo metodo, ki je sploh nismo nameravali napisati. V takem primeru pisanje metod seveda prilagodimo novim potrebam.
  5. Pogosto se zgodi, da med pisanjem programa napravimo pravo zmedo (na primer napišemo metode, ki jih ne potrebujemo, metode neustrezno poimenujemo, pustimo komentarje, ki se ne skladajo s tem, kar program zares počne). Ko je program napisan, ga še enkrat pregledamo in premislimo, ali se ga da bolje organizirati. Morebitne izboljšave se vedno izplača narediti, ker bo tako program v bodoče lažje popravljati.
V Javi obstajata dve vrsti metod, statične metode in objektne metode. V tem semestru bomo pisali predvsem statične metode, objektne metode pa bomo podrobno spoznali, ko se bomo več naučili o objektih. Osnovni pojmi v zvezi z metodami so deklaracija, definicija in klic metode.

Deklaracija

Z deklaracijo podamo osnovne podatke o metodi:
  1. določila: statična ali objektna, javna ali privatna metoda
  2. ime: velja dogovor, da se imena metod začnejo z malo črko (Java bo sicer sprejela tudi imena, ki se začnejo z veliko črko).
  3. tip rezultata, ki ga metoda vrača (če metoda ne vrača rezultata, navedemo tip void).
  4. imena in tipi argumentov, ki jih metoda sprejme.
Primer:
public static void main(String[] args)
Metoda main je javna (public), statična (static), ne vrača rezultata (tip void) in sprejme en argument tipa String[]. Oglejmo si še en primer:
private int size()
Metoda size je privatna (private), objektna (ker ne piše static), vrača rezultat tipa int, in ne sprejme nobenih argumentov.

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:
public static int f(int k, double x) {
  // tukaj napisemo telo metode,
  // ki se izvede, ko metodo pokličemo
}
Ta metoda je javna, statična, vrne rezultat tipa int in sprejme dva argumenta, prvi je tipa int in drugi tipa double.
Vsaka metoda je definirana v nekem razredu. Če je metoda foo definirana v razredu Bar, potem je njeno polno ime Bar.foo. Če spustimo ime razreda, dobimo skrajšano ime foo.
Metoda vrne rezulat z ukazom return, na primer:
public static double povprecje(double x, double y) {
  double z = (x + y) / 2.0;
  return z;
}

Klic

Metodo uporabimo tako, da jo pokličemo ali izvedemo. Pri klicu metode moramo navesti njeno polno ime. Če metodo kličemo iz istega razreda, v katerem je definirana, lahko uporabimo skrajšano ime.
Privatne metode lahko kličemo samo iz razreda, v katerih so definirane. Javne metode lahko kličemo iz vseh razredov.
Statična metoda se pokliče takole:
ime_metode(arg1, arg2, .., argN)
Se pravi, navedemo polno ali skrajšano ime metode in nato vse argumente v oklepajih, ločene z vejicami. Če metoda ne sprejme nobenih argumentom, napišemo ().
Objektna metoda se vedno kliče na objektu:
obj.ime_metode(arg1, arg2, ..., argN)
Tu 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. Na primer:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Bar {
  public static int foo(int k) {
    double x = (int)(k * Math.sin(0.1230));
    return x * x;
  }

  public static void main(String[] args) {
    String s = args[0];
    int k = s.length();
    int m = foo(k) + Bar.foo(k + 2);
    System.out.println(m + k);
  }
}
V zgornjem primeru vidimo pet klicev metod:
Povezmimo, kaj smo se naučili:
  1. Vrste metod:
    • javna (določilo public) ali privatna (določilo private)
    • statična (določilo static) ali objektna
  2. Deklaracija metode vsebuje:
    1. določila (public, private, static)
    2. tip rezultata
    3. ime metode
    4. tipe in imena argumentov
  3. Metoda, ki ničesar ne vrača, ima tip rezultata void
  4. Metoda vrne rezultat z ukazom return.
  5. Vsaka metoda ima polno ime Raz.ime in skrajšano ime, ki ne vsebuje imena razreda.
  6. Privatno metodo lahko pokličemo samo iz razreda, v katerem je definirana. Javno metodo lahko kličemo iz vseh razredov.
  7. Statično metodo kličemo z njenim imenom, v oklepajih pa naštejemo argumente.
  8. Objektno metodo kličemo na objektu, obj.ime_metode(arg1, ..., argN).
Naloga 1
Naloga 2
Naloga 3

"Dril"

Kako se po slovensko reče "dril"?
Pri vsaki vaji preizkusi, ali tvoja metoda deluje na nekaj primerih.
Naloga 4
Naloga 5
Naloga 6
Naloga 7
Naloga 8
Naloga 9
Naloga 10
Naloga 11
Naloga 12
Naloga 13