Klase i objekti u Javi

Lekcija 9 od 16 · Java

Jedna od ideja koja leži u osnovi objektno orijentisanog softvera je da se softver organizuje na način koji odgovara načinu razmišljanja objektno orijentisanog mozga. Umesto mašinskih instrukcija koje menjaju bitove u glavnoj memoriji, mi želimo "stvari" koje nešto "rade". Naravno da se na mašinskom nivou ništa nije promenilo, obrasci bitova se i dalje menjaju preko mašinskih instrukcija. Promena je u tome što mi ne moramo da razmišljamo na taj način.

Pitanje: Navedite nekoliko objekata.

Olovka, tastatura, cipele, sto

Pitanje: Šta je to što karakteriše neki objekat.

  • Objekat je napravljen od opipljivog materijala
  • Objekat se ponaša kao celina, sastavljena od delova
  • Objekat ima osobine
  • Objekat može da čini neke stvari i na njemu mogu da se čine neke radnje.

Prva stavka iz ove liste je suviše restriktivna. Mogu postojati i objekti koji nisu opipljivi. Prisetite se svog računa u banci. Premda to nije materijalna stvar, račun ima svoje osobine (stanje, vlasnika) i vi sa njim možete da činite neke stvari (da podižete novac, ugasite ga). U skladu sa ovim može se reći da jedan objekat:

  • ima identitet (ponaša se kao celina)
  • ima stanje (ima osobine koje se mogu menjati)
  • ima ponašanje (može da čini neke stvari i nad njim se mogu vršiti neke radnje)

Objekat ima stanje, ponašanje i identitet. Struktura i ponašanje sličnih objekata su definisani njihovom zajedničkom klasom.

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

Video lekcije

VIDEO 1: Klase i objekti u JAVI

Klase i objekti, Java, programiranje, Objektno orijentisano programiranje, Tacke u ravni, Konstruktori, Metode objekta,

VIDEO 2: Objekti i Metode u Javi

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

VIDEO 3: Statičke promenljive i metode

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 4: 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 5: Vidljivost podataka u klasi

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

Složeni podaci-objekti

Za rezervisanje memorije objekta koristimo sledeći obrazac:

tip_podatka naziv_podatka=new konstruktor(parametri_konstruktora);

Za tip podatka se koristi naziv Klase kojoj pripada objekat. Npr. ako objekat pripada klasi Scanner onda bi definicija tog objekta koji ćemo nazvati ucitavac biti:

Scanner ucitavac=new Scanner(System.in);

Definisanje složenog podatka.

softverski objekti imitiraju objekte iz prirode, tako da i jedni i drugi imaju:

  • Osobine
  • Ponašanje
  • Stanje

Klasa-kao opis objekta

Klasa objekta je zapravo opis svih objekata koji joj pripadaju, a to su objekti koji imaju iste:

  • Osobine
  • Ponašanje-opisano metodama

Definisanjem objekta mi smo ga kreirali po opisu (Klasi) i on će imati osobine i metode tamo navedene :

Metode klase Scanner

U klasi Scanner postoje navedene neke metode npr:

  • nextInt()-ova metoda preuzima sa standardnog ulaza podatak koji je korisnik otkucao na tastaturi, konvertuje ga u ceo broj.
  • nextDouble()-ova metoda preuzima sa standardnog ulaza podatak koji je korisnik otkucao na tastaturi, konvertuje ga u realan broj.

Objekti u prirodi i softverski objekti imaju

  • identitet (ponaša se kao celina)
  • stanje (ima osobine koje se mogu menjati)
  • ponašanje (može da čini neke stvari i nad njim se mogu vršiti neke radnje)

Softverski objekti imaju identitet pošto zauzimaju poseban deo memorije. Softverski objekat je poseban, čak i ako izgleda isto kao neki drugi objekat.

Softverski objekti imaju stanje. Deo memorije koju zauzima softverski objekat se koristi za promenljive koje sadrže vrednosti.

Softverski objekti imaju ponašanje. Deo memorije koju oni zauzimaju se troši za skladištenje metoda (programa) koji objektu omogućavaju da "nešto radi". Objekat nešto radi, kada se izvršava neki od njegovih metoda

Ako pretpostavimo da za objekat uzmemo početni dijalog prozor iz prikazane aplikacije

Softverski objekti: Primer Dialog-Frame

Na sledećoj slici je prikazana slika tog objekta u memoriji

Klase i objekti-struktura objekta

Sa prikazane slike tog objekta u memoriji zaključujemo:

  • Cigle na slici predstavljaju bajtove u memoriji, koju objekat zauzima.
  • Ovaj objekat ima neke promenljive, sirinaDijaloga, visinaDijaloga i textUNaslovu, kao i neke metode koji kontrolišu njegovo ponašanje
  • Softverski objekat se sastoji od promenljivih i metoda

Klasa objekta

  • Klasa je skup objekata koji imaju zajedničku strukturu i ponašanje.
  • Jedan objekat predstavlja primerak neke klase
  • Skup zajedničkih osobina objekta i metoda koja predstavljaju ponašanje tih objekta su opisane u njihovoj klasi

Klase i objekti na primeru tačaka u ravni

tekst zadatka: Kreirati 3 objekta koji predstavljaju tri tačke u ravni A,B,C. Premestiti tačku A u novi položaj A1.

§Prikazati koordinate tačaka posle premeštanja. Podaci tačaka su dati na slici.Klase i objekti-primer Tačke u ravni



A(2,4)

B(5,-2)

C(-4,2)

A1(1,3)

Uočimo da sva tri objekta pripadaju istoj klasi jer imaju iste osobine x i y.To će biti 3 različite istance(objekata) iste klase

Stanje tačke A će se u toku programa promeniti, ali ne i osobine.

Da bi kreirali objekte prvo moramo da kreiramo klasu koja će da ih opisuje. Klasu ćemo nazvati Tacka. U njoj ćemo navesti zajedničke atribute x i y koje će imati sva 3 objekta.

Klasa Tacka

public class Tacka {
    double x;
    double y;
}
public class TakeURavni {
    public static void main(String[] args) {
        // ovde pišemo kod glavnog programa
    }
}

Kreirajmo glavnu klasu i pozicionirajmo se na početak main metode

public class TakeURavni {
    public static void main(String[] args) {
        Tacka A = new Tacka();
        Tacka B = new Tacka();
        Tacka C = new Tacka();
    }
}

Kreirajmo sva tri objekta, tj. rezervišimo memoriju za njih koristeći klasu Tacka kao opis

Klase i objekti-Tačke u ravni glavna klasa 3

Da bi došli do osobina kreiranih objekta koristimo operator ”.”

Klase i objekti-Tačke u ravni glavna klasa 4

U listi koja se otvorila vidimo osobine i metode koju su opisane klasom Tacka. Ovde vidimo i neke nasleđene metode, o nasleđivanju ćemo kasnije govoriti

public class TakeURavni {
    public static void main(String[] args) {
        Tacka A = new Tacka();
        Tacka B = new Tacka();
        Tacka C = new Tacka();
        A.x = 2;
        A.y = 4;
        B.x = 5;
        B.y = -2;
        C.x = -4;
        C.y = 2;

Sada ćemo zadati sve koordinate na način kako je prikazano na slici levo.

public static void main(String[] args) {
    Tacka A = new Tacka();
    Tacka B = new Tacka();
    Tacka C = new Tacka();
    A.x = 2;
    A.y = 4;
    B.x = 5;
    B.y = -2;
    C.x = -4;
    C.y = 2;
    A.x = 1; // tačka A se premešta u položaj A1(1, 3)
    A.y = 3;
}
Slika 9: Klase i objekti-Tačke u ravni glavna klasa 6

Da bi premestili tačku A u novi položaj ponovo postavimo nove vrednosti x i y za objekat AI na kraju se prikazuju podaci o tačkama:

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

Izlaz programa: A(1.0,3.0), B(5.0,-2.0), C(-4.0,2.0) – svaka tačka u svom redu.

Slika 10: Klase i objekti-Tačke u ravni glavna klasa. Prikaz podataka

Primer: Geometrijski Oblici

Tekst zadatka:Kreirati objekte, za dva kvadrata i jedan krug. uneti stranice kvadrata i poluprečnik kruga i izračunati njihove površine.Rešenje:

S obzirom da dva objekta koji predstavljaju kvadrate imaju iste osobine: stranica a i površina P, možemo da kažemo da pripadaju istoj klasi, klasi koja opisuje bilo koji kvadrat. Možemo da damo naziv ovoj klasi npr Kvadrat ili Opis_Kvadrata, i taj "opis" će važiti za bilo koji kvadrat.

Sa druge strane, objekat koji predstavlja krug nema ste osobine kao kvadrat, dakle, on pripada drugoj klasi koju možemo da nazovemo npr. Krug ili Opis_Kruga. Postoji i ona "glavna" klasa, od koje se program startuje i koja ima main metodu u sebi. Neka se ta klasa zove kao i projekat: GeometrijskiOblici. Unutar ove klase se kreiraju objekti i kontroliše tok celokupnog programa. Klase su kreirane na sledeći način. Klasa Kvadrat, u sebi ima atribute kvadrata: a(stranica), P(površina) i prazan konstruktor.

U sledećoj lekciji biće reči o metodama, kao sastavnim delovima klasa i konstruktorima klasa: Metode i objektiKlasa Kvadrat:

package geometrijskioblici;

public class Kvadrat {
    double a; //Stranica kvadrata kao polje ili atribut klase
    double P; //Površina kvadrata kao polje ili atribut klase

    //Konstruktor bez parametra
    public Kvadrat() {
    }
}

Klasa Krug:

package geometrijskioblici;

public class Krug {
    double r; //Poluprečnik kruga kao polje ili atribut klase
    double P; //Površina kruga kao polje ili atribut klase

    //Konstruktor bez parametra
    public Krug() {
    }
}

Prvo treba kreirati nov projekat klikom na ikonicu "New Project", vidi sliku:

 Kreiranje novog projekta u Javi
Slika 11: Kreiranje novog projekta u Javi

Zatim dati naziv "GeometrijskiOblici", podesiti željenu lokaciju i kliknuti na dugme "Finish", vidi sliku:

Kreiranje novog projekta u programskom jeziku Java, zadavanje naziva projekta i lokacije
Slika 12: Kreiranje novog projekta u programskom jeziku Java, zadavanje naziva projekta i lokacije

Kreiran je nov projekat koji u sebi ima generisan paket "geometrijskioblici" i u njemu fajl GeometrijskiOblici.java u kojem se nalazi klasa pod istim imenom, a to je glavna klasa, vidi sliku:

 Kreiranje novog projekta u programskom jeziku Java, završetak
Slika 13: Kreiranje novog projekta u programskom jeziku Java, završetak

Da bi se dodale preostale dve pomenute klase "Kvadrat" i "Krug" treba kliknuti desnim klikom na paket geometrijskioblici, a zatim u kontekst meniju klinuti na "New Class", što se može videti na sledećoj slici:

Dodavanje novih klasa u Javi, u NetbeansIDE
Slika 14: Dodavanje novih klasa u Javi, u NetbeansIDE

Glavna klasa je prikazana u nastavku:

package geometrijskioblici;

import java.util.Scanner;
public class GeometrijskiOblici {
    public static void main(String[] args) {
        Scanner ucitavac = new Scanner(System.in); //Kreira se objekat za ucitavanje podataka
        Kvadrat kvadrat1 = new Kvadrat(); //Kreira se objekat prvog kvadrata
        Kvadrat kvadrat2 = new Kvadrat(); //Kreira se objekat drugog kvadrata
        Krug krug1 = new Krug(); //Kreira se objekat klase krug

        /*Učitavanje podataka*/
        System.out.println("Unesite redom stranice oba kvadratai poluprečnik kruga");
        kvadrat1.a = ucitavac.nextDouble(); //Poziva metodu objekta koji vraća učitan double podatak
        kvadrat2.a = ucitavac.nextDouble(); //Poziva metodu objekta koji vraća učitan double podatak
        krug1.r = ucitavac.nextDouble(); //Poziva metodu objekta koji vraća učitan double podatak

        /*Računanje površina objekata kvadrata i kruga*/
        kvadrat1.P = kvadrat1.a * kvadrat1.a; //Računanje površine 1. kvadrata
        kvadrat2.P = kvadrat2.a * kvadrat2.a; //Računanje površine 2. kvadrata
        krug1.P = krug1.r * krug1.r * Math.PI; //Računanje površine kruga

        /*Ispis rezultata*/
        System.out.println("Površina 1. kvadrata: " + kvadrat1.P);
        System.out.println("Površina 2. kvadrata: " + kvadrat2.P);
        System.out.println("Površina kruga: " + krug1.P);
    }
}

Ovde vidimo da su dva objekta, kvadrat1 i kvadrat2 kreirani po istom opisu(šablonu), a to je klasa koja ih opisuje pod nazivom Kvadrat. Treba uočiti da je reč o istoj klasi za dva različita objekta. Treći objekat, krug1 je kreiran tako što je za opis uzeta klasa "Krug". Pri kreiranju objekata se poziva Konstruktor klase koji ima isti naziv kao klasa.

Dakle za kreiranje objekata klase Kvadrat i konstruktor se tako zove, dok se pri kreiranju objekta klase Krug konstruktor takođe zove "Krug". To je metoda koja služi da se objektima u trenutku kreiranja daju neke početne vrednosti njihovim atributima. O tome će niti više reči u narednoj lekciji.

Za učitavanje se koristi objekat klase Scanner, koja mora biti importovana:

import java.util.Scanner;

U nastavku, posle učitavanja, se izračunavaju površine sva 3 objekta, a zatim i ispisuju rezultati. Pristup podacima koji predstavljaju atribute pojedinih objekta se vrši pomoću referenci tih objekata. Npr da bi se "dohvatio" podatak površine drugog kvadrata to se mora uraditi na sledeći način:

kvadrat2.P

Posle pokretanja aplikacije i unosa podataka ispisane su vrednosti površina, vidi sliku:

Izlaz programa:

Unesite redom stranice oba kvadratai poluprečnik kruga
10
20
10
Površina 1. kvadrata: 100.0
Površina 2. kvadrata: 400.0
Površina kruga: 314.1592653589793
Slika 15: Aplikacija GeometrijskiOblici, kreirana u Javi, izvršenje

Proveri znanje

Otvori kviz

Kviz: Klase i objekti

1. Šta je klasa?




2. Šta radi new Kvadrat(5)?




3. Šta znači private ispred atributa?




4. Šta je static atribut?