Professional Documents
Culture Documents
UvodUOOP PDF
UvodUOOP PDF
UvodUOOP PDF
podataka
Prof. dr. sc. Damir Kalpi
Prof. dr. sc. Vedran Mornar
Prof. dr. sc. Kreimir Fertalj
Doc. dr. sc. Gordan Gledec
Dr. sc. Zvonimir Vanjak
Mr. sc. Boris Milainovi
Ivica Botiki, dipl. ing.
U sluaju daljnjeg koritenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela.
Najbolji nain da to uinite je linkom na ovu internetsku stranicu.
Od svakog od gornjih uvjeta mogue je odstupiti, ako dobijete doputenje nositelja autorskog prava.
Nita u ovoj licenci ne naruava ili ograniava autorova moralna prava.
Fusiform
Gyrus!
http://en.wikipedia.org/wiki/Fusiform_gyrus
Zato OOP? Zbog ogranienosti mozga!
kategorizacija
ovjeku prirodna stvar
vjeba: kategorizirajte objekte na slikama!
program koji razvijamo odnosi se na tzv. domenu
svaka poslovna domena ima svoje objekte
fakultet: studenti, nastavnici, ispiti itd.
ministarstvo: pismena, predmeti, zapisnici itd.
opis jednog poslovnog procesa na fakultetu
Student mora sakupiti 50% bodova da bi proao ispit
Struktura objekata
Objekt klase
VelikiStan
Objekt klase
MaliStan
Klasa
MaliStan
Klasa
ATRIBUTI:
nazivMarke PONAANJE:
nazivModela
serijskiBroj prihvatiOdjeu()
kapacitet prihvatiDeterdent()
ukljui()
iskljui()
Modeliranje
modeliranje (u raunarstvu)
proces kojim komadi stvarnog svijeta pojednostavljujemo prema
vlastitim potrebama ATRIBUTI:
nazivMarke
nazivModela
serijskiBroj
kapacitet
KLASA
MODELIRANJE PerilicaRublja
PONAANJE:
prihvatiOdjeu()
prihvatiDeterdent()
ukljui()
iskljui()
Preciznost modela
ATRIBUTI:
ovisno o zahtjevima po nau aplikaciju, nazivMarke
model moe biti manje ili vie precizan nazivModela
serijskiBroj
kapacitet
volumenBubnja
motor
vrstaMotora
ATRIBUTI:
nazivMarke
nazivModela KLASA
KLASA serijskiBroj PerilicaRublja
PerilicaRublja kapacitet
PONAANJE:
PONAANJE:
prihvatiOdjeu()
prihvatiOdjeu() prihvatiDeterdent()
prihvatiDeterdent() ukljui()
ukljui() iskljui()
iskljui() prihvatiOmekiva()
pokreniCentrifugiranje()
Apstrakcija
nazivMarke
nazivModela
KLASA serijskiBroj
kapacitet
PerilicaRublja volumenBubnja
motor
vrstaMotora
Objektno orijentirani jezici
Simula (1967.)
prvi programski jezik sa svojstvima objektno-orijentirane paradigme
namijenjen izgradnji sustava za simulaciju
uveden pojam klase / razreda
Smalltalk (1972.)
prvi pravi (isti) objektno-orijentiran programski jezik (sve je objekt)
razvijen u laboratoriju Xerox PARC
Smalltalk-80 je najkoritenija verzija
C++
hibridni objektno-orijentirani jezik nastao iz C-a - ispoetka se zvao C s
razredima (C with Classes)
razvio ga je Bjarne Stroustrup (1983.) u Bell Labs
poetna ANSI standardizacija dovrena je (tek) 1998., a 2003. je izdana
standardna verzija s ispravljenim pogrekama
trenutno se radi na razvoju novog standarda C++0x
C++ je predak danas iroko koritenih jezika - Java, C# i VB.NET
Hello World
C++ C
include<iostream.h> include<stdio.h>
main(){ main(){
cout << Hello World ; printf(Hello World);
} }
Zadatak: klasa Student
OOP_Student_1
Klasa Student (C++)
int Student::GetId(){
return this->id;
OOP_Student1
}
Klasa Student (C++) lanske varijable i metode
class Student {
id je lanska varijabla
int id;
public: klase Student
void SetId(int id); lanske varijable koristimo
int GetId();
};
kako bismo pohranili
atribute objekata
Klasa Student Id = 2
Metode
Klasa Student (C++) definicije metoda
class Student {
metode SetId i GetId
int id;
public: definirane su izvan klase
void SetId(int id); Student
int GetId();
};
operator odreivanja dosega
(::) koristi se kako bi se
void Student::SetId(int id){ naznailo da metode
this->id=id;
pripadaju klasi Student
}
kljuna rije this
int Student::GetId(){ predstavlja adresu
return this->id;
}
aktualnog objekta
Slanje poruka
ostatku svijeta };
Pristup objektu
Klijent
public
SetId GetId
Objekt klase
Student
id
private
Uahurivanje
uahurivanjem (enkapsulacijom) klasa skriva neke
atribute i neka ponaanja od ostalih klasa
kako radi Hi-Fi audio sustav?
tako dugo dok ureaj radi, nas to zapravo ni ne
zanima!
Uahurivanje i skrivanje informacija
Vozilo Brzina
Snaga
Broj sjedeih mjesta
Vozilo na motorni
Vozilo na Vozilo na Vozilo na pogon:
elektrini pogon:
elektrini motorni
Vrsta goriva
Napon pogon pogon Vrsta motora
Izvor napajanja Veliina spremnika
za gorivo
Vieoblije (polimorfizam)
SLANJE E-MAILA
Dvosmjerna asocijacija (povezanost)
SURADNICI
PRIJATELJI
destruktor
metoda koje se automatski poziva prilikom unitavanja objekta i koja ima
isto ime kao i klasa, uz prefiks ~
klasa/objekt moe imati samo jedan destruktor
ne moe imati ni povratne vrijednosti niti parametara
namjena destruktora je oslobaanje resursa za koje nema smisla da budu
zauzeti nakon to je objekt postao nepotreban
Konstruktori i destruktori
class Student {
Podrazumijevani konstruktor (bez
int id;
parametara)
public: KONSTRUKTORI
Student(){
this->id = 0;
cout << "Constructing " << this->id << endl;
}
Student(int id) {
this->id = id;
cout << "Constructing " << this->id << endl;
}
~Student(){
cout << "Destructing " << this->id << endl;
} DESTRUKTOR
int GetId() {return id;}
};
OOP_Student_2
Stvaranje i unitavanje objekata na stogu
int main(){
Student st2;
Student vedran(1), damir;
stvara se objekt na stogu
Student *kresimir = new Student(2);
nakon stvaranja automatski se poziva
cout << "U gl. prog.: " << podrazumijevani konstruktor
vedran.GetId() << endl; Student st1(1);
cout << "U gl. prog.: " << stvara se objekt na stogu
damir.GetId() << endl; nakon stvaranja poziva se konstruktor s
cout << "U gl. prog.: " << parametrom int id.
kresimir->GetId() << endl; Student *st3 = new
delete kresimir; Student(2);
return 0; stvara se objekt na gomili (heapu)
} nakon stvaranja automatski se poziva
podrazumijevani konstruktor s parametrom
int id.
Stvaram objekt s id=1 za stvaranje objekta treba definirati
Stvaram objekt s id=0 pokaziva i upotrijebiti operator new
Stvaram objekt s id=2 (objekt = pokaziva (4 byte) na stogu +
memorija zauzeta na gomili)
U gl. prog.: 1
delete st3;
U gl. prog.: 0
unitavanje objekta
U gl. prog.: 2 poziva ga korisnik eksplicitno, koritenjem
Unistavam objekt s id=2 operatora delete
Unistavam objekt s id=0
Unistavam objekt s id=1 OOP_Student_2
Namjena konstruktora i destruktora
class Student {
int id; U konstruktoru je zauzeta memorija
char* name; za pohranu imena
public:
Student(int id,char *name) {
this->id = id;
this->name =(char*) malloc(strlen(name) + 1);
strcpy(this->name, name);
cout << "Stvaram objekt s id=" << this->id << " i imenom:
" << this->name << endl;
}
~Student(){
cout << "Unistavam objekt s id=" << this->id << " i
imenom: " << this->name << endl;
free(this->name);
}
int getId() {return this->id;} U destruktoru je zauzetu memoriju
}; potrebno osloboditi
int main(){
Student gordan(420, "Gogo");
}
Stvaram objekt s id=420 i imenom: Gogo
Unistavam objekt s id=420 i imenom: Gogo OOP_student_3
Neke specifinosti konstruktora i destruktora
delete pFloat;
delete [] pInt;
delete [] pString;
za brisanje polja mora se koristiti operator delete []
OOP_new_delete
Plitka kopija objekata (eng. shallow copy)
void PohvaliStudenta(Student student){
cout << "Student s id=" << student.getId() << " je dobio pohvalnicu!" << endl;
}
Prilikom poziva operatora = te prilikom poziva
int main(){ funkcije sadraj objekta se kopira byte po byte.
Nastaju tri razliita objekta (svaki na svojoj
Student vedran(420, "Vedran");
memorijskoj lokaciji) s istim sadrajem.
Student noviVedran = vedran;
PohvaliStudenta(noviVedran);
} vedran
Id=420
Stvaranje objekta s id=420 Name={ADR}
Student s id=420 je dobio pohvalnicu!
Unistavanje objekta s id=420; adresa name=9190080 noviVedran
Unistavanje objekta s id=420; adresa name=9190080 Id=420
Name={ADR}
Program puca! Vedran
Zato?
student
Id=420
Name={ADR} Znakovni niz se nalazi na
adresi ADR
OOP_student_4
Duboka kopija objekata (eng. deep copy)
razred Trokut:
izgraditi razred Trokut koji e predstavljati koncept trokuta kao
geometrijskog lika koji ima definiranu duljinu svake od tri stranice i
ugraenu funkcionalnost za izraunavanje povrine i opsega trokuta
OOP_Trokut
razred KompleksniBroj:
izgraditi razred KompleksniBroj koji e predstavljati
(matematiki) koncept kompleksnog broja. Razred mora sadravati
dvije varijable koje e predstavljati realni i imaginarni dio i pruati
funkcionalnost za obavljanje matematikih operacija s kompleksnim
brojevima (zbrajanje, oduzimanje, mnoenje i dijeljenje)
OOP_KompleksniBroj
OOP_Stog
Zadatak: Objektni red
OOP_Red
Zadatak za domau zadau