Objekti i metode u Javi

Lekcija 10 od 16 · Java

PRIMERE IZ OVE OBLASTI MOŽETE NAĆI NA SLEDEĆOJ WEB STRANI: Klase i objekti - primeri

Video lekcije

VIDEO 1: Objekti i Metode u Javi

VIDEO 2: Statičke promenljive i metode

Metode kao sastavni deo objekta. Metode koje vraćaju i ne vraćaju vrednost. Definicija i pozivanje metoda. Pozivi metoda iz uvezenih klasa.

Statičke promenljive. Promenljive kao osobine klase. Statične metode. Razlika između promenljivih kao osobina objekta i statičnih promenljivih. Primer sa kvadratima i trouglovim

VIDEO 3: Enkapsulacija objekta. geteri i seteri

Kako se vrši i šta predstavlja Enkapsulacija objekta u Javi. Sakrivanje atributa objekta. Upotreba Getera i Setera u klasi.

VIDEO 4: Vidljivost podataka u klasi

Razlika između lokalnih podataka, definisanih u metodi i polja za klasu.

Objekti i Metode

Metoda je skup naredbi, deo programa koji sam za sebe predstavlja zasebnu celinu i vrši određen zadatak, najčešće elementarni.

Razlikujemo:

  • Definisanje metode
  • Korišćenje metode

Korišćenje Metode.

Možemo koristiti:

  • metodu koja je već definisana u nekoj postojećoj klasi
  • metodu koju sami kreiramo(definišemo)

Korišćenje postojeće Metode

Npr:
System.out.println("A("+A.x+","+A.y+")");
Ovde se poziva metoda println za objekat out, koji predstavlja prostor gde će tekst biti ispisan. To je standardni izlaz.

Posle naziva metode uvek stoje zagrade”( )”

One služe da metodi po potrebi pošaljemo jedan ili više podataka, parametra metode.

U ovom primeru, metodi se šalje jedan parametar koji predstavlja tekst koji će biti ispisan.

Ovaj tekst je dobijen nadovezivanjem više manjih tekstova unutar kojih se umeću vrednosti promenljivih.

Definisanje Metode.

Metoda se sastoji od naslovne linije i tela metode u kojoj se nalaze naredbe programa koje se u toj metodi izvršavaju:

Definisanje metode u JAVA programskom jeziku
Slika 1: Definisanje metode u JAVA programskom jeziku

Primer definisanje Metode.

  • Napravimo u prethodnom primeru metodu koja računa rastojanje između tačaka
  • Formula po kojoj se izračunava rastojanje između tačaka 1 i 2, a čije su koordinate x1,y1 i x2,y2
  • d=Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y1-y2,2))

Ovde su korišćene dve metode iz klase Math:

sqrt-koja računa kvadratni koren gde se potkorena veličina šalje kao parametar

pow- metoda koja izračunava stepen, čija se osnova i izložilac šalju kao parametri

  • Naredbe koje čine neku metodu se pišu u telu metode, između zagrada”{ }”
  • postoji i zaglavlje metode

Primer: Definisanje Metode za računanje rastojanja između dve tačke.

System.out.println("A(" + A.x + "," + A.y + ")");
System.out.println("B(" + B.x + "," + B.y + ")");
System.out.println("C(" + C.x + "," + C.y + ")");
}

// metoda koja računa rastojanje između tačaka (x1, y1) i (x2, y2)
public double rastojanje(double x1, double y1,
    double x2, double y2) {
    return Math.sqrt(Math.pow(x1 - x2, 2) +
        Math.pow(y1 - y2, 2));
}
Slika 2: Objekti i metode u JAVI. Zadatak Tačke u ravni, metoda "rastojanje"

Vidimo da je metoda dodata u glavnu klasu jer se ne odnosi na bilo koju tačku pojedinačno već na skup tačaka

Ova metoda izračuna rastojanje i onda izračunatu vrednos šalje pomoću naredbe return.

Zaglavlje metode.

  • public- modifikator privatnosti. Kad je public onda se metoda može pozvati iz druge klase
  • double na drugom mestu. Ovo je tip povratne vrednosti. Vrednost koja se vraća iz metode je double rastojanje je naziv metode

Metode koje ne vraćaju vrednost.

Reč void na drugom mestu. Ovo je tip povratne vrednosti. Ako na ovom mestu stoji void tada metoda ne vraća ništa i nema naredbu return

Metode koja ispisuje podatke

public class Tacka {
    double x;
    double y;

    public void ispisi() {
        System.out.println("x=" + x + ",y=" + y);
    }
}
Slika 3: Objekti i metode u JAVI. Zadatak Tačke u ravni, metoda "ispisi", kreirana u klasi Tacka

Ova metoda ne prima parametre i ne vraća ništa iz metode

Kad se pozove ispisaće vrednosti koordinata i završiti sa radom, a program nastaviti na onom mestu gde je pozvana

Pozivi metoda u Javi

C.y = 2;
A.x = 1;
A.y = 3;
A.ispisi(); // poziv metode objekta A
B.ispisi();
C.ispisi();
double d;
d = rastojanje(A.x, A.y, B.x, B.y); // greška: metoda nije static, a main jeste
}

public double rastojanje(double x1, double y1,
    double x2, double y2) {
Slika 4: Objekti i metode u JAVI. Zadatak Tačke u ravni, pozivanje metode "ispisi()", kreirana u klasi Tacka

Ovde vidimo da je metoda rastojanje podvucena crveno(greška). To je zato što metoda treba da pripada objektu i da se pozove preko objekta glavne klase, a taj objekat nije kreiran

Postoji samo klasa i metoda se onda mora vezati za samu klasu. To se postiže dodavanjem reči static

A.ispisi();
B.ispisi();
C.ispisi();
double d;
d = rastojanje(A.x, A.y, B.x, B.y);
}

// static: metoda pripada klasi i može se pozvati iz metode main bez objekta
public static double rastojanje(double x1, double y1,
    double x2, double y2) {
Slika 5: Objekti i metode u JAVI. Zadatak Tačke u ravni, pozivanje metode "rastojanje()", koja računa rastojanje između dve tačke

Parametri koji su poslati u pozivu se redom kopiraju u parametre u definiciji metode i na taj način se prosleđuju metodi

Konstruktori klase

  • To su specijalne metode koje se pozivaju u trenutku kreiranja objekta Nemaju povratnu vrednost i kod njih se ne piše reč void na drugom mestu u zaglavlju Služe da daju početne vrednosti osobinama objekta.
  • Mogu da budu bez i sa parametrima
  • Nazivaju se isto kao i klasa u kojoj se nalaze

Dodajmo u klasi Tacka

public class Tacka {
    double x;
    double y;

    public Tacka() { // konstruktor bez parametara
    }

    public Tacka(double x, double y) { // konstruktor sa parametrima
        this.x = x; // this.x je atribut objekta, x je parametar
        this.y = y;
    }

    public void ispisi() {
        System.out.println("x=" + x + ",y=" + y);
    }
}
Slika 6: Objekti i metode u JAVI. Zadatak Tačke u ravni, konstruktori klase Tacka

Konstruktori sa parametrima

Koriste se kad unapred znamo podatke o objektu. Pošto ovde znamo unapred koordinate tačaka zamenićemo pozive praznih, sa pozivima konstruktora sa parametrima.

public static void main(String[] args) {
    Tacka A = new Tacka(2, 4);
    Tacka B = new Tacka(5, -2);
    Tacka C = new Tacka(-4, 2);
    //      A.x = 2;        // ove dodele više nisu potrebne –
    //      A.y = 4;        // koordinate je postavio konstruktor
    //      B.x = 5;
    //      B.y = -2;
    //      C.x = -4;
    //      C.y = 2;
    A.x = 1;
    A.y = 3;
    A.ispisi();
Slika 7: Objekti i metode u JAVI. Zadatak Tačke u ravni, pozivanje konstruktori klase Tacka prilikom kreiranja objekata

Pošto smo sada koordinate zadali kroz konstruktor, iskomentarisali smo zadavanje koordinata direktno jer nije više potrebno

Ostala je samo naknadna promena koordinata za tačku A

Završetak aplikacije o tačkama

public class TakeURavni {
    public static void main(String[] args) {
        Tacka A = new Tacka(2, 4);
        Tacka B = new Tacka(5, -2);
        Tacka C = new Tacka(-4, 2);
        A.x = 1;
        A.y = 3;
        A.ispisi();
        B.ispisi();
        C.ispisi();
        double d;
        d = rastojanje(A.x, A.y, B.x, B.y);
        System.out.println("d=" + d);
    }

    public static double rastojanje(double x1, double y1,
        double x2, double y2) {
        return Math.sqrt(Math.pow(x1 - x2, 2) +
            Math.pow(y1 - y2, 2));
    }
}

Izlaz programa:
x=1.0,y=3.0
x=5.0,y=-2.0
x=-4.0,y=2.0
d=6.4031242374328485

Slika 8: Objekti i metode u JAVI. Zadatak Tačke u ravni, ispis rezultata

Ostaje samo još da se ispiše izračunato rastojanje d

Primer 2: Kvadrati

Tekst zadatka: Kreirati dva objekta koji predstavljaju kvadrate, uneti im stranice, a zatim izračunati njihove površine i rezultat ispisati na ekranu. Za opis kvadrata kreirati klasu po imenu kvadrat i u njoj napraviti metodu za računanje površine i ispisivanje rezultata.Rešenje:

Kreirajmo nov projekat pod nazivom "Kvadrati" i posle prolaska kroz prozore za kreiranje novog projekta biće kreiran projekat pod nazivom "Kvadrati", koji će u sebi imati paket "kvadrati" i u paketu fajl Kvadrati.java. Unutar ovog fajla treba kreirati glavnu klasu.

Da bi mogli da kreiramo objekte, potrebno je u projekat dodati i novu klasu pod imenom "Kvadrat", u koju ćemo staviti sve atribute za kvadrat, kao i potrebne metode.

Postupak kreiranja novog projekta, detaljno je objašnjen u prethodnoj lekciji, kroz zadatak "GeometrijskiOblici": Klase i objektiKlasa Kvadrat će u sebi imati potrebne atribute, stranicu a i površinu P, konstruktore sa i bez parametara, kao i metode za računanje površine i metodu za ispis podataka na ekranu. U nastavku je prikazana klasa koja opisuje kvadrat:

public class Kvadrat {
    double a; // stranica
    double P; // površina

    public Kvadrat() { // konstruktor bez parametara
    }

    public Kvadrat(double a) { // konstruktor sa parametrom
        this.a = a;
    }

    public void povrsina() { // računa površinu i čuva je u atributu P
        P = a * a;
    }

    public void ispisi() { // ispisuje površinu
        System.out.println("p=" + P);
    }
}

Slika sa kodom ove klase nije sačuvana pri prelasku sa starog sajta; kod je napisan prema opisu iz teksta i proveren zajedno sa glavnom klasom Kvadrati.

Slika 9: Objekti i metode u JAVI. Zadatak "Kvadrati", klasa "Kvadrat"

U klasi su prvo definisani atributi ili "polja klase", a i P, koji predstavljaju stranicu, odnosno površinu bilo kog kvadrata.

Zatim su kreirana dva konstruktora, prazan i drugi, koji prima stranicu kvadrata kao parametar. Treba napomenuti, da u jednoj klasi može biti više konstruktora i svi oni imaju isti naziv kao i klasa, dakle, u ovom slučaju "Kvadrat", ali se moraju međusobno razlikovati ili po tipu, ili po broju parametara.

Dalje, u klasi su definisane dve metode koje ne vraćaju nikakvu vrednost(tip povratne vrednosti void), prva koja izračunava površinu, a druga koja ispisuje rezultat. Kao što se može primetiti, obe metode pristupaju polju za klasu "P" i to govori da se polja za klasu ne moraju metodi, slati preko parametara, već su metodi direktno dostupni. Polja za klasu su inače, sastavni deo memorije samog objekta.

Ovako kreirana klasa će se upotrebiti u glavnoj klasi, po imenu "Kvadrati", prilikom kreiranja objekata, koji predstavljaju kvadrate, što se može videti na slici, prikazanoj u nastavku: Dakle, klasa "Kvadrati":

import java.util.Scanner;

public class Kvadrati {
    public static void main(String[] args) {
        Kvadrat k1 = new Kvadrat();
        Scanner ucitavac = new Scanner(System.in);
        System.out.println("Unesi a");
        k1.a = ucitavac.nextDouble();
        k1.povrsina();
        k1.ispisi();
        Kvadrat k2 = new Kvadrat();
        System.out.println("Unesi a");
        k2.a = ucitavac.nextDouble();
        k2.povrsina();
        k2.ispisi();

        Kvadrat k3 = new Kvadrat(30); // konstruktor sa parametrom
        k3.povrsina();
        k3.ispisi();
    }
}
Slika 10: Objekti i metode u JAVI. Zadatak "Kvadrati", klasa "Kvadrati"(Glavna klasa)

U main metodi glavne klase, u prva dva rada su kreirana dva objekta, prvog kvadrata i objekta za učitavanje klase Scanner:

Kvadrat k1 = new Kvadrat(); //Kreira se objekat koji predstavlja prvi kvadrat
Scanner ucitavac = new Scanner(System.in); //Kreira se objekat za ucitavanje podataka

U nastavku se učitava stranica kvadrata:

System.out.println("Unesi a");
k1.a = ucitavac.nextDouble(); //Ucitava stranicu prvog kvadrata

Zatim se pozivaju medode za računanje površine, kao i za ispis rezultata za prvi kvadrat.

k1.povrsina();
k1.ispisi();

Za drugi objekat k2, postupak se samo ponavlja na sličan način.Posle pokretanja aplikacije i zahteva za unos, u primeru je uneto za prvi kvadrat a=23, a za drugi kvadrat a=45. Dobijeni su sledeći rezultati, koji su prikazani na sledećoj slici:

Izlaz programa:

Unesi a
23
p=529.0
Unesi a
45
p=2025.0
p=900.0
Slika 11: Objekti i metode u JAVI. Zadatak "Kvadrati", izvršenje aplikacije

Proveri znanje

Otvori kviz

Kviz: Objekti i metode

1. Šta je metoda?




2. Šta označava this unutar metode?




3. Koji je povratni tip metode double povrsina()?




4. Kako se pristupa metodi objekta k?