Вы находитесь на странице: 1из 58

Objektno orijentisano

programiranje
OOP
• Struktura Java programa
OOP
• Java je objektno orijentisan jezik
• Pisanje programa bez korišćenja OO
mogućnosti nije svrsishodno
• Za proceduralno rešavanje problema su
lakši i pogodniji drugi jezici
• Pisanje Java programa zahteva
poznavanje osnovnih pojmova OOP:
– Objekti
– Klase
– Nasleđivanje
OOP
• Objektno orijentisan pristup se zasniva na
manipulisanju objektima
• Programska logika se postiže definisanjem
klasa različitih objekata i međusobnim
dejstvom tih objekata
OOP
• Metoda: programska jedinica koja sadrži
promenljive i naredbe za obavljanje
specifičnog zadatka
• Klasa: programska jedinica koja sadrži
promenljive i metode za predstavljanje
objekata
Objekat
• Šta je objekat?
– Sve što ima jedinstven identitet
• Primeri:
– Student
– Ispit
– Kredit
– Sto
– Stolica
– Automobil
Objekat
• Objekat ima jedinstven identitet

• Identitet objekta čine:


– Atributi (obeležja) objekta
– Mogućnosti (ponašanje) objekta
Objekat
• Stvarni objekat: automobil
Objekat
• Stvarni objekat: automobil
• Atributi:
– Boja (bela)
– Broj vrata (2)
– Brzina (200)
– Marka
• Mogućnosti
– Upali
– Ugasi
– Promeni brzinu
– Koči
Objekat
• Softverski objekti u računaru oponašaju
stvarne objekte
• Imaju pridružene atribute i mogućnosti
• Atributi određuju šta su obeležja objekta
• Mogućnosti određuju šta se može uraditi
sa objektom
Objekat
• Programski objekat:
Klasa
• Klasa je kolekcija objekata
• Opisuje objekte sa zajedničkim entitetom
• Klasa određuje šablon (mustru) kako
izgledaju njeni pojedinačni objekti
• Objekti se u programu ne opisuju
pojedinačno, već definisanjem klase tih
objekata
Klasa
• U OOP se definišu klase
• Objekti se ne definišu nego se konstruišu
na osnovu klasa
• Analogija
– Tehnički crtež zgrade – klasa
– Izgrađena zgrada – objekat
– Na osnovu jednog crteža zgrade može se
izgraditi više zgrada
– Na osnovu jedne definicije klase može se
konstruisati više objekata
Klasa
• Klasa je osnovna jedinica programiranja u Javi
• Klase sadrže:
– Polja (atribute, podatke članove)
– Metode (funkcije članice)
– Mehanizme za stvaranje objekata (konstruktore)
• Polja:
– Čine strukturu podataka objekta (određuju atribute objekta)
– Definišu stanje objekta
• Metode:
– Sadrže izvršni kod
– Definišu ponašanje objekta – šta može da uradi svaki objekat
klase
Klasa
• Primer:

class Zgrada
{
int brojSpratova;
String boja;
String adresa;

void okreči() { ... };


void dozidaj() { ... };
}
Klasa
• Više objekata klase Zgrada
• Na osnovu definicije klase može se konstruisati
više objekata
Klasa - Polja
• Promenljive u klasama se nazivaju poljima
(atributima)
• Definicija polja se mora nalaziti izvan svih
metoda, ali unutar klase
• Dve vrste polja:
– Nestatička polja (objektna) – jedno po objektu
– Statička polja – jedno po klasi
Klasa - Polja
• Svaki objekat neke klase ima svoju vlastitu
kopiju nestatičkog polja
• Svi objekti dele jednu kopiju statičkog polja
• Statička polja se nazivaju i promenljive
klase
Klasa - Polja
• Primer:

class ČlanPorodice {
static String prezime;
String ime;
int uzrast;

void čestitajRođendan() {
uzrast = uzrast + 1;
System.out.println("Srećan "+uzrast+". rođendan!")
}
}
Klasa - metode
• Slična pravila važe i za metode definisane
u klasi
• Statičke metode pripadaju klasi i postoje
za sve vreme izvršavanja programa
• Zato se statičke metode mogu pozivati u
programu nezavisno od konstruisanih
objekata njihove klase
Klasa - metode
• Statičke metode mogu obavljati opšti
zadatak za sve objekte klase
• Statičke metode mogu direktno pristupati
samo statičkim poljima i drugim statičkim
metodama klase
• Ne postoji konkretan objekat nad kojim se
radi
Klasa - metode
• Nestatičke (objektne) metode logički
pripadaju konstruisanim objektima, a ne
klasi
• Objektni metodi se mogu primenjivati
samo za prethodno konstruisani objekat
Klasa – kontrola pristupa
• Članovi su pristupačni u celom kodu klase
u kojoj se nalaze
• Prava pristupa članu iz drugih klasa se
određuju modifikatorom
• Bez modifikatora (podrazumevano,
paketsko pravo), član je pristupačan samo
u kodu datog paketa
Klasa – kontrola pristupa
• Prava pristupa
• private
– Član je pristupačan samo u klasi gde je
definisan
• protected
– Član je pristupačan u izvedenim potklasama i
u kodu celog paketa
• public
– Član je pristupačan sa proizvoljnog mesta
odakle se može pristupiti
Klasa
• U objektno orijentisanom programiranju se
pišu definicije klasa
• Objekti se konstruišu na osnovu tih
definicija klasa
• Terminologija
– Instanca (primerak) klase = objekat klase
– Instanciranje klase = konstruisanje objekta
klase
Definicija klase
• Format

modifikatori class ime-klase {


.
. // Telo klase
.
}
Definicija klase
• Modifikatori dodatno opisuju klasu (public)
• Modifikator pristupa public ukazuje da se
klasa može koristiti izvan svog paketa
• Ime klase je identifikator
• Po konvenciji, sve reči počinju velikim
slovom
• Telo klase sadrži definicije;
– Polja (nestatička i statička)
– Metode (nestatičke i statičke)
Definicija klase
• Primer:

public class ČlanPorodice {


static String prezime; // statičko polje
String ime; // nestatičko polje
int uzrast; // nestatičko polje

public void čestitajRođendan() { // nestatički metod


. . .
}
public static void verzija(...) { // statički metod
. . .
}
}
Definicija klase
• Ovom klasom se mogu predstaviti članovi
neke porodice
• Prezime je nepromenljivo za sve članove
porodice, pa se može čuvati u
jedinstvenom statičkom polju
ČlanPorodice.prezime
• Ime i uzrast su karakteristični za svakog
člana porodice, pa se čuvaju u nestatičkim
poljima ime i uzrast
Definicija klase
• Objekti klase ČlanPorodice
Konstruisanje objekata
• Operator new

• Format:

new konstruktor(lista-argumenata)
Konstruisanje objekata
• Primer:

Scanner tastatura = new Scanner(System.in);


Konstruisanje objekata
• Konstruktor: specijalni metod u klasi koji
služi za inicijalizaciju objekta odmah nakon
njegovog konstruisanja
• Osobine konstruktora
– Ime konstruktora mora biti isto kao ime klase
– Konstruktor nema tip rezultata, čak ni void
– Poziva se samo operatorom new
Konstruisanje objekata
• Konstruktori mogu imati nula ili više
parametara – kao i metode

• Konstruktori se izvršavaju nakon što se


poljima pridruže njihove podrazumevane
vrednosti (0 u ogovarajućem tipu podatka)
Konstruktori
• Svaka klasa ima bar jedan konstruktor
• On se automatski dodaje ukoliko nije
eksplicitno definisan nijedan drugi
konstruktor
• Podrazumevani konstruktor ima formalnu
funkciju i ne radi ništa
• Klasa može imati više konstruktora, pod
uslovom da su potpisi različiti (preklapanje
imena, kao kod metoda)
Konstruktor klase
• Primer:
public class ČlanPorodice {
static String prezime = „Petrović"; // statičko polje
String ime; // nestatičko polje
int uzrast; // nestatičko polje

public ČlanPorodice(String i, int u) { // konstruktor


ime = i;
uzrast = u;
}
public void čestitajRođendan() { // nestatički metod
. . .
}
public static void verzija(...) { // statički metod
. . .
}
}
Konstruisanje objekata
• Primer:
new ČlanPorodice("Mira",20);
• Izvršavanje:
– Konstruiše se objekat klase rezervisanjem
potrebnog prostora za njega u memoriji
– Izvršava se navedeni konstruktor klase
– Vraća se referenca konstruisanog objekta
(adresa rezervisanog memorijskog prostora
za objekat)
Korišćenje objekata
• Kako se koriste konstruisani objekti?
• Objekti se mogu koristiti samo indirektno
preko njihovih referenci
• Referenca objekta se mora sačuvati u
promenljivoj klasnog tipa
Promenljive klasnog tipa
• Ime klase može biti tip promenljive (tip
parametra i tip rezultata neke metode)
– Promenljiva klasnog tipa (referencna
promenljiva)
• Definicijom klase se uvodi novi tip
podataka: klasni tip podataka
• Vrednosti klasnog tipa su objekti
odgovarajuće klase
Promenljive klasnog tipa
• Primer: OO program za evidenciju
studenata
Stvarni student Programski student
Promenljive klasnog tipa
• Primer
public class Student {
public String ime;

public double test1, test2, test3;

public double prosek() {


return (test1 + test2 + test3)/3;
}
}
Promenljive klasnog tipa
• Primer:

Student s; // promenljiva klasnog tipa Student


. . .
s = new Student(); // konstruisanje i dodela reference
// novog objekta klase Student
// promenljivoj s
Promenljive klasnog tipa
• Vrednosti tipa Student jesu objekti klase Student
• Promenljiva s ne sadrži objekte, već referencu
na objekat
• U Javi važi opšte pravilo da nijedna promenljiva
nikad ne sadrži neki objekat
• Da bi se ovo razjasnilo, mora se razumeti
postupak kreiranja objekata
Promenljive klasnog tipa
• Objekti se konstruišu u specijalnom delu
memorije – hip (heap – na engleskom hrpa,
gomila)
• Zbog brzine, ne vodi se mnogo računa o redu po
kojem se zauzima taj deo memorija
• To znači da se novi objekat stavlja u hip
memoriju tamo ge se nađe prvo slobodno mesto
• Njegovo mesto se oslobađa kada više nije
potreban u programu
Promenljive klasnog tipa
• Da bi se moglo pristupiti objektu u
programu, mora se imati informacija gde
se on nalazi u hip memoriji
• Ta informacija se naziva referenca ili
pokazivač na objekat
• Predstavlja adresu memorijske lokacije
objekta u hip memoriji
Promenljive klasnog tipa
• Primer:
// Skraćeni oblik prethodne dve naredbe:
Student s = new Student();
• Efekat izvršavanja
Promenljive klasnog tipa
• Promenljiva klasnog tipa ne sadrži sam
objekat koji joj je dodeljen, već referencu
(pokazivač) na njega
• Polja i metodi pojedinih objekata se koriste
upotrebom tačka-notacije
Promenljive klasnog tipa
• Primer:

s.ime = "Pera Perić";


s.test1 = 95;
s.test2 = 55;
s.test3 = 100;
System.out.println("Prosek ocena: " + s.prosek());
Promenljive klasnog tipa
• Primer
– Efekat izvršavanja
Uklanjanje objekata
• Šta uraditi sa objektom koji više nije
potreban u programu?
• Ručno uklanjanje nepotrebnih objekata je
podložno greškama:
– Nenamerno brisanje objekata
– Zaboravljeno brisanje objekata (curenje
memorije)
• Automatsko uklanjanje objekata u Javi
(sakupljanje otpadaka, garbage collection)
Uklanjanje objekata
• Objekti koji se nalaze u hip memoriji, ali se
više ne mogu koristiti u programu jer
nijedna promenljiva ne sadrži referencu na
njih – otpaci
• Java automatski koristi proceduru
sakupljanja otpadaka sa vremena na
vreme
• Čisti đubre – oslobađa se memorija
objekata za koje se nađe da je broj
referenci na njih u programu 0
Uklanjanje objekata
• U programu se može i eksplicitno ukazati da
objekat više nije potreban

• Dodeljivanje reference null – promenljiva ne


pokazuje više ni na jedan objekat, i gubi se
efektivno veza sa objektom
• Njemu se ne može više pristupiti u programu
Primeri
public class Tacka {

double x, y; // Koordinate.

public Tacka () {} // Inicijalizacija.


public Tacka (double xx) { x = xx; y = xx; }
public Tacka (double xx, double yy) { x = xx; y = yy; }

public double x () { return x; } // Apscisa.

public double y () { return y; } // Ordinata.

public String toString () // Tekstualni oblik.


{ return "(" + x + "," + y + ")"; }

public static final Tacka ORG = new Tacka (); // Koordinatni pocetak.

}
Primeri
Primeri
• U ovom primeru klase KockaZaIgru, konstruktor je:

• Ima isto ime kao klasa, nema tip rezultata i ima jedan
parametar
• Poziv konstruktora, sa odgovarajućim argumentima,
navodi se iza operatora new.
Primeri
Primeri
• Objekti ove klase KockaZaIgru se mogu
konstruisati na 2 načina

KockaZaIgru( )

KockaZaIgru( x )
x je izraz tipa int
Primeri
• Jedna od prednosti OOP je mogućnost višekratne
upotrebe programskog koda
• Jednom napisane klase mogu se iskoristiti u različitim
programima u kojima je potrebna njihova funkcionalnost
• Klasa KockaZaIgru predstavlja realne kocke za igranje i
obuhvata sve relevantne atribute i mogućnosti
• Ta klasa se može iskoristiti u svakom programu gde se
logika zasniva na kockama za igranje
• To je velika prednost, naročito u slučaju komplikovanih
klasa
• Nije potrebno gubiti vreme na ponovno pisanje i
testiranje novih klasa

Вам также может понравиться