OBJEKTNO ORIJENTISANO PROGRAMIRANJE - KLASE I OBJEKTI
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.
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.
- 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)
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 JAVIKlase i objekti, Java, programiranje, Objektno orijentisano programiranje, Tacke u ravni, Konstruktori, Metode objekta,
|
VIDEO 2: Objekti i Metode u JaviMetode 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 metodeStatič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 seteriKako 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:
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
- 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.
- 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 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
Na sledećoj slici je prikazana slika tog objekta u memoriji
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.
§Prikazati koordinate tačaka posle premeštanja. Podaci tačaka su dati na slici.
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.
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
I na kraju se prikazuju podaci o tačkama:
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 objekti
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 objekti
Klasa Kvadrat:
package geometrijskioblici;
import java.util.Math;
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() {
}
}
import java.util.Math;
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;
import java.util.Math;
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() {
}
}
import java.util.Math;
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:
Zatim dati naziv "GeometrijskiOblici", podesiti željenu lokaciju i kliknuti na dugme "Finish", vidi sliku:
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:
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:
Glavna klasa je prikazana u nastavku:
package geometrijskioblici;
import java.util.Math;
import java.util.Scanner;
public class GeometrijskiOblici
{
import java.util.Math;
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: " +kvadrat1.P);
System.out.println("Površina kruga: "+krug1.P);
}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: " +kvadrat1.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:
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:
Sledeće
Metode i objekti >| |