UvodUOOP PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 54

Algoritmi i strukture

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.

Zatieno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/


Creative Commons
slobodno smijete:
dijeliti umnoavati, distribuirati i javnosti priopavati djelo
remiksirati preraivati djelo
pod sljedeim uvjetima:
imenovanje. Morate priznati i oznaiti autorstvo djela na nain kako je
specificirao autor ili davatelj licence (ali ne nain koji bi sugerirao da Vi ili
Vae koritenje njegova djela imate njegovu izravnu podrku).
nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe.
dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili
stvarate koristei ga, preradu moete distribuirati samo pod licencom koja
je ista ili slina ovoj.

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.

Tekst licencije preuzet je s http://creativecommons.org/.


Uvod u objektno-orijentirano
programiranje u programskom
jeziku C++
Zato OOP? Zbog Fusiform Gyrus!

Fusiform
Gyrus!
http://en.wikipedia.org/wiki/Fusiform_gyrus
Zato OOP? Zbog ogranienosti mozga!

sloenost dananjih raunalnih sustava


banke, osiguranja, trgovaki lanci
dravna uprava
poslovni sustavi zranih luka, sustavi u avionima
ogranienost ljudskog mozga
Miller (1956)
- ovjek ne moe paralelno misliti o vie od
5 7 mentalnih entiteta
Edsger Dijkstra (prvi raunarac u
Nizozemskoj)
- The competent programmer is fully aware
of the strictly limited size of his own scull;
therefore, he approaches the programming task in full humility
Objektni nain razmiljanja

objektni pogled na svijet prati ovjekov prirodni nain


razmiljanja sve je objekt!
objekti su svuda oko nas:
kebap iz Istanbula
orba iz Bukureta
pudding iz Londona
nockerln iz Salzburga
croissant iz Pariza
knedli iz Praga

to su svi ovi objekti?


to im je zajedniko?
Kategorizacija

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

svaki objekt ima:


atribute (svojstva)
- podatkovni dio objekata
- svaki objekt ima vlastite vrijednosti atributa
ponaanje
- operacije koje objekt nudi
- operacije se izvravaju nad objektom
- operacije mogu utjecati na atribute objekta
Klase i objekti
Klasa
VelikiStan
koja je razlika izmeu objekta i klase?
Objekt klase
Objekt klase VelikiStan
MaliStan

Objekt klase
VelikiStan

Objekt klase
MaliStan
Klasa
MaliStan
Klasa

predloak za stvaranje objekata

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

modeliranje objekata tako da se koriste samo bitne


komponente stvarnog objekta
to znai bitno?
npr. perilica rublja serijskiBroj
- bitan ako modeliramo sustav u kojem biljeimo koliko je koja perilica oprala
- nebitan ako izraujemo program koji upravlja smjerom okretanja bubnja
perilice
ATRIBUTI:

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

U programskom jeziku C++ napraviti klasu Student koja


sadri lansku varijablu id za pohranu identifikatora studenta.
Klasa mora imati i metode pristupa lanskog varijabli SetId
i GetId.

OOP_Student_1
Klasa Student (C++)

Klasa Student Koritenje klase Student


class Student { int main(){
int id; Student marko;
public: marko.SetId(3);
void SetId(int id);
cout << marko.GetId();
int GetId();
}; return 0;
}
void Student::SetId(int id){
this->id=id;
}

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

class Student { SetId i GetId su metode


int id; klase Student
public: metode koristimo kako bismo
void SetId(int id); realizirali ponaanje objekata
int GetId();
u primjeru su dane samo
};
deklaracije metoda (nema tijela
metoda, tj. nema linija kda)
Objekti, lanske varijable i metode
Objekt Pero
lanske varijable imaju specifinu klase Student
vrijednost za svaki objekt
metode se definiraju na razini klase Id = 1
te svi objekti koriste iste metode Metode

Objekt Ivo klase


Student

Klasa Student Id = 2

lanske varijable: Metode


Id
Objekt Marko
Metode:
klase Student
GetId()
SetId()
Id = 3

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

objekti meusobno komuniciraju slanjem poruka


slanje poruka zapravo je pozivanje metoda
Klasa Student (C++) koritenja objekata
class Student { svim lanskim varijablama i metodama
int id; klase se moe bez ogranienja
public: pristupati iz metoda unutar te klase
void SetId(int id); pristup lanskim metodama i
varijablama klase se moe ograniiti
int GetId();
ako im se pristupa iz neke druge klase
};
pristup se u C++ ograniava kljunom
rijei private
int main(){ ako se modifikator vidljivosti ne navede,
Student student; pretpostavlja se private
student.SetId(3); modifikator vidljivosti public
student.id = 3; specificira da nema ogranienja
cout << student.id; vidljivosti
return 0;
}
Modifikatori vidljivosti

metode klasa (i struktura) u programskom jeziku C++ imaju tri


modifikatora vidljivosti:
public lanske varijable i metode vidljive svim korisnicima
(klijentima) koji imaju pristup klasi
private lanske varijable i metode vidljive samo metodama
klase u kojoj su definirane
protected (jednom drugom prilikom)
s pomou modifikatora vidljivosti ograniava se pristup
ograniavanje pristupa provodi se ve pri prevoenju
programa
Javno suelje objekta

javno suelje objekta class Student {


int id;
predstavljaju javne metode
public:
javno suelje koristi se za
komunikaciju s ostalim void SetId(int id){J
a
objektima/metodama this->id=id; v
n
}
javnim sueljem objekt
o
int GetId(){
s
u
izlae samo one lanske
return this->id; e
varijable/metode za koje }
l
j

smatra da trebaju biti vidljive


e

ostatku svijeta };
Pristup objektu

metode objekta mogu pristupati svim lanskim varijablama i


metodama
klijenti mogu vidjeti samo javne lanske varijable i metode

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

uahurivanjem se postie slaba


povezanost objekata
slabom povezanou objekti postaju
neovisniji i interne promjene jednog
objekta ne utjeu na rad drugog
audio sustav, iako djeluje kao cjelina,
sastavljen je od meusobno neovisnih
i odvojivih komponenti
ako se jedna komponenta pokvari,
ostale i dalje nastavljaju s radom
Student i uahurivanje
pretpostavimo da je uveden novi sustav class Student {
dodjele identifikatora, ime su char *id;
identifikatori postali znakovni nizovi public:
i metode SetId i GetId trebale bi void SetId(int id){
primati i vraati pokaziva na znakovni sprintf(this->id, %d,
niz id);

ali, to znai da se svi pozivi klijenata koji }


koriste navedene metode moraju int GetId(){
mijenjati (uvesti tip char* umjesto tipa return atoi(this->id);
int) }
Dolo je do izmjena u implementaciji };
(int -> char*), ali su pozivi metoda
ostali isti
Nasljeivanje

odnos izmeu klasa kod kojeg se jedna klasa stvara na


temelju druge tako da joj se dodaju specifini atributi i
ponaanje Vozilo:

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)

slina ponaanja razliitih klasa


svaka klasa za sebe precizno definira zajedniko ponaanje
klase: vrata, ormar, poklon
ponaanje: otvori()
Asocijacija (povezanost)

neki su objekti meusobno povezani


npr. daljinski ureaj i televizor
meusobno povezani, jer daljinskim
ureajem ukljuujemo televizor
povezani su jednosmjerno, jer televizor
ne moe slati poruke daljinskom ureaju
dvosmjerna asocijacija (povezanost)
ako oba objekta mogu slati poruke jedan drugome

SLANJE E-MAILA
Dvosmjerna asocijacija (povezanost)

povezanost po vie kriterija

SURADNICI

PRIJATELJI

povezanost po vie kriterija


Agregacija (sadravanje)

objekt moe biti sastavljen od vie drugih objekata


npr. raunalo je sastavljeno od sredinje jedinice, monitora, mia,
tipkovnice itd.
Teorijska pitanja

objasnite to su to apstrakcija i enkapsulacija


koja je razlika izmeu klasa i objekata?
objasnite kako se dobrom definicijom javnog suelja ostvaruje
uahurivanje
to su to modifikatori vidljivosti?
ukratko objasnite svaki od njih
kako odabirom modifikatora vidljivosti ostvarujemo uahurivanje?
ukratko objasnite nasljeivanje i polimorfizam
Zadatak za domau zadau

nadogradite klasu Student:


Uvedite nove privatne lanske varijable
- Ime (name)
- Prezime (tipa char*) (surname)
- Prosjena ocjena (float) (averageGrade)
uvedite nove metode
- SetName, GetName, SetSurname, GetSurname,
SetGrade, GetGrade
- metodu ToString koja ispisuje informacije o studentu u obliku
Prezime, Ime (Id): Prosjena ocjena (npr.
Ivo Ivi (1): 2,2)
ivotni vijek objekata

objekte je mogue stvoriti:


automatski Automatski!
Stog
- objekt se smjeta na stog
operatorom new alokacija stvaranje
- objekt se smjeta na gomilu
(heap) hrpa: new() objekt

u oba sluaja postoje faze:


koritenje
alokacija memorije za objekta
stvaranje objekta objekt Stog
koritenje objekta
unitavanje objekta unitavanje oslobaanje
bitovi
oslobaanje memorije
hrpa: delete()
Pod kontrolom korisnika!
Stvaranje i unitavanje objekata

konstruktor (inicijalizacijski postupak)


metoda koje se automatski poziva prilikom stvaranja objekta i koja ima isto
ime kao i klasa
klasa/objekt moe imati vie konstruktora
prilikom stvaranje objekta poziva se samo jedan konstruktor
namjena konstruktora je inicijalizacija, tj. davanje poetnog stanja objektu

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

ako na razini klase nije definiran ni jedan konstruktor,


automatski se stvara podrazumijevani konstruktor s praznim
tijelom
ako na razini klase postoje definirani konstruktori,
podrazumijevani se konstruktor nee automatski stvoriti
destruktori se pozivaju redoslijedom obrnutim od redoslijeda
poziva konstruktora
destruktori se pozivaju kada objekt izae iz dosega ili kada se
pozove delete
Operatori new i delete

operatorima new i delete stvaraju se i unitavaju objekti na gomili


new i delete nisu namijenjeni iskljuivo za stvaranje i unitavanje
objekata:
predstavljaju proirenje mogunosti malloc i free
type safe verzija tono se zna za kakav tip podatka se alocira
memorija
primjeri:
float *pFloat = new float;
int *pInt = new int[10];
char *pString = new char[20];

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)

ako elimo kontrolirati nain na koji se objekt kopira, moemo


definirati tzv. kopirajui konstruktor
kopirajui konstruktor automatski se poziva kada se
kopiranjem nekog objekta stvara novi
prilikom pridruivanja (operator =)
prilikom poziva funkcije (objekt kao parametar funkcije)
daje programeru priliku da inicijalizira novostvoreni objekt prije
koritenja
Kopirajui konstruktor Studenta
class Student {
...
Student(const Student &sourceObject) {
this->id = sourceObject.id;
this->name =(char*) malloc(strlen(sourceObject.name) + 1);
strcpy(this->name, sourceObject.name);
cout << "Kopiranje objekta s id=" << this->id << endl;
}
...
};
Prilikom svakog kopiranja objekta rezervira se posebni (novi)
int main(){
memorijski prostor za pohranu znakovnog niza!
Student vedran(420, "Vedran");
Tako desktruktori ne dolaze u konflikt i svaki oslobaa svoj
memorijski prostor!
Student noviVedran = vedran;
PohvaliStudenta(noviVedran);
}
Stvaranje objekta s id=420
Kopiranje objekta s id=420
Kopiranje objekta s id=420
Student s id=420 je dobio pohvalnicu!
Unistavanje objekta s id=420; adresa name=13599392
Unistavanje objekta s id=420; adresa name=13598992
Unistavanje objekta s id=420; adresa name=13580992
Dva naina kopiranja objekata

postoje dva naina kopiranja objekata


stvaranje duboke kopije kopirajui konstruktor stvara u potpunosti novu kopiju
objekta
- za razred Student to znai alociranje nove memorije i preuzimanje

elemenata znakovnog niza iz objekta predanog kopirajuem konstruktoru


stvaranje plitke kopije stvara se novi objekt, ali on nastavlja dijeliti dio stanja s
objektom na temelju kojega je nastao
- za razred Student to znai da nakon stvaranja objekta i nakon poziva

kopirajueg konstruktora postoje dva objekta koji pokazuju na istu memoriju


(polje znakova)
- doi e do problema kad se pozovu destruktori za ta dva objekta: prvi poziv

destruktora proi e bez problema, ali kad se pozove destruktor za drugi


objekt, pokuaj oslobaanja ve osloboene memorije uzrokovat e pogreku

Algoritmi i strukture podataka, 2006/07. 23.5.2016. 46 / 46


Primjeri:

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

Algoritmi i strukture podataka, 2006/07. 23.5.2016. 47 / 46


Objektni stog
Objektni red
Izvedba stoga strukturom
typedef int tip;
struct at { izvedba koju smo upoznali na
tip element;
struct at *sljed;
prethodnim predavanjima
};
typedef struct at atom;
neki nedostaci
typedef struct{ klijent moe mijenjati izvedbu (svatko
atom *vrh; moe mijenjati varijablu vrh) - loe
} Stog; realizirano uahurivanje
void init_stog(Stog *stog){ fukcije za inicijalizaciju stoga, dodavanje
stog->vrh = NULL; na stog i skidanje sa stoga odvojene su
} od strukture koja predstavlja stog
int dodaj (tip element, Stog *stog) {
...
klijent se mora brinuti o tome da
} pravovremeno pozove funkciju
int skini (tip *element, Stog *stog) { init_stog
...
}
Objektna implementacija stoga
typedef int tip;
class Stog{
struct at { Definicija strukture koja e prestavljati element liste u
okviru stoga je premjetena unutar klase Stog.
tip element;
Na taj nain je definicija tipova struct at i atom
struct at *sljed; vidljiva samo unutar klase Stog.
};
typedef struct at atom;
Privatna varijabla vrh pokazuje na element na
atom *vrh; vrhu stoga.
Privatna metoda obrisiStog se koristi za
void obrisiStog();
pranjenje stoga
public:
Stog();
~Stog();
Javne metode klase su vidljive svim klijentima koji
int Dodaj (tip element);
koriste objekte ove klase.
int Skini (tip *element);
};
OOP_Stog
Neki detalji implementacije stoga
void Stog::obrisiStog(){
int element;
while(1){ Metoda obrisiStog se poziva u destruktoru
if(Skini(&element) == 0){ objekta klase Stog kako bi se oslobodila sva
break; memorija koju stog zauzima (svi elementi skinuli
}
sa stoga)
}
}
Prilikom stvaranja objekta klase Stog potrebno
Stog::Stog(){
this->vrh = NULL;
je obaviti inicijalizaciju varijable vrh na NULL
} (poetno stanje).

Stog::~Stog(){ U destruktoru je potrebno osloboditi svu memoriju


this->obrisiStog(); koju stog zauzima. To je najelegantnije napraviti
} pozivom funkcije obrisiStog.
int Stog::Dodaj (tip element) {
atom *novi;
if ((novi = (atom *) malloc(sizeof(atom))) != NULL) {
novi->element = element;
novi->sljed = this->vrh;
this->vrh = novi;
return 1;
}
else
return 0;
OOP_Stog
}
Rad sa stogom
int main(){
klijent smije koristiti samo
Stog *stog = new Stog();
stog->Dodaj(3); javno suelje objekta
stog->Dodaj(4); (metode Dodaj i Skini)
int element;
stog->Skini(&element);
inicijalizacija objekta stog
delete stog; obavlja se automatski pri
} njegovom stvaranju
u destruktoru se prije
unitavanja objekta
oslobaa sva zauzeta
memorija

OOP_Stog
Zadatak: Objektni red

U programskom jeziku C++ realizirati objektni red. Klasa Red


mora imati javno suelje koje se sastoji od metoda Dodaj i
Skini. Red mora biti realiziran jednostuko povezanom
listom. Implementacija se mora sastojati od pokazivaa na
ulaz i izlaz iz reda. Konstuktorom je potrebno obaviti
inicijalizaciju reda, a destruktorom oslobaanje zauzete
memorije.

OOP_Red
Zadatak za domau zadau

Koritenjem prethodno definiranih objektnih implementacija


reda i stoga napisati funkciju koja sadraj stoga prepisuje u
red. Poredak elemenata u odredinom nije bitan. Izraditi
rekurzivnu i nerekurzivnu verziju funkcije.

You might also like