Objektno orijentisani jezici

Download Report

Transcript Objektno orijentisani jezici

Programski jezici
Objektno orijentisani jezici
Objektno orijentisani jezici





Osnovne karakteristike objektnih jezika
Klase, objekti i poruke
Nasleđivanje
Polimorfizam
C++ kao objektna nadgradnja jezika C
OOP



Pojava objektno-orijentisanih jezika početkom
80-ih godina prošlog veka
Jedan od najvažnijih događaja u razvoju
programskih jezika od trenutka njihovog
prerastanja u kategoriju viših programskih jezika
Objektni koncept je danas podrazumevani
koncept kod svih novih programskih jezika i
predstavlja osnovu softverske industrije
Osnovne karakteristike



Proceduralni jezici – akcenat na definisanju
algoritma, koraka koji se izvršavaju nad
podacima
Jezici sa eksplicitnim opisima tipova podataka
(Pascal), veća pažnja se posvećuje predstavljanju
podataka
Koncept apstraktnih tipova podataka kao
struktura koje enkapsuliraju podatke i procedure
koje se mogu izvršavati nad njima – OOP
Klase, objekti, poruke





Apstrakcija podataka – prvi korak ka OOP
Klasa definiše strukturu i ponašanje objekta,
eksterni interfejs
Metode – funkcije i procedure kojima se može
delovati na objekte
Objekat – primerak, instanca klase
Svi objekti jedne klase imaju strukturu definisanu
klasom, nad njima se mogu izvršavati samo
operacije definisane klasom kojoj pripadaju
Klase, objekti, poruke




Klasom se opisuju objekti na sličan način na koji
se tipovima podataka opisuje struktura podataka
i skup operacija koje se nad njima mogu
izvršavati
Klasa može da se posmatra kao šablon objekata
(template) kojim se opisuje model po kome će se
kreirati novi objekti
Poruke – pozivi metoda definisanih u klasi kojoj
objekat pripada
Objekat odgovara na poruku izvršavanjem
metode
Vrste objektno-orijentisanih jezika

Netipizirani jezici (Smalltalk)


Nema tipova podataka, samo informacija o
pripadanju objekta klasi koja se formira dinamički u
fazi izvršavanja programa, kad se inicijalizuje objekat
Tipizirani jezici (C++)
Informacija o pripadanju objekta klasi se koristi u
fazi kompajliranja, slično kao informacija o tipu
podataka kod proceduralnih jezika
 Imena klasa koriste se da identifikuju i tip i klasu

Nasleđivanje



Bitna razlika između klasa i apstraktnih tipova je
u koncept nasleđivanja klasa
Nove klase se definišu tako što nasleđuju
svojstva postojeće klase i uvode dodatna
svojstva
U okviru nove klase može se promeniti struktura
objekata i njihovo ponašanje
Dodavanje novih svojstava u odnosu na postojeća
 Definisanje novih metoda, izmena postojećih

Polimorfizam




Sposobnost različitih objekata da odgovore na
istu poruku
Zahteva dinamičku implementaciju jezika i
“kasno” povezivanje
Kasno povezivanje obično slabi pouzdanost
jezika i može da bude rizično za izvršavanje
programa, posebno kod rada u realnom vremenu
U praksi se polimorfizam postiže konceptom
virtuelnih metoda za koje važi dinamička
implementacija (C++)
C++, objektna nadgradnja C-a





Objektni jezik sa statičkom implementacijom
Ključni koncept klasa
Informacija o pripadanju objekta određenoj klasi
se koristi u fazi kompajliranja, slično korišćenju
tipova podataka
Zahteva se eksplicitno pripadanje objekta
određenoj klasi
Klasa – osnovni mehanizam za apstrakciju
podataka
Klasa


Opisom klase postiže se zatvaranje podataka i
funkcija u jedinstven korisnički definisan tip
Članovi klase (members) – podaci i funkcije koje
pripadaju klasi
Data members – podaci članovi klase
 Member functions – funkcije članice klase




Ime klase predstavlja identifikator novog
korisničkog tipa
Svaki objekat predstavlja primerak, instancu klase
Ime objekta je promenljiva koja pripada tipu klasi
Primer – definisanje klase
class Tacka {
int x, y;
public:
int X() { return x; }
int Y() { return y; }
}
Primer – definisanje objekta
Tacka centar;
Tacka kruznica[40];
cout << centar.X;
cout << centar.Y;
cout << kruznica[5].X;
cout << kruznica[5].Y;
Konstruktor



Specijalna članica klase koja služi za
inicijalizaciju objekta
Ima isto ime kao i sama klasa
Poziva se automatski pri kreiranju objekta date
klase
Konstruktor
class Pravougaonik {
int sirina, visina;
public:
Pravougaonik (int,int);
int povrsina (void) {return (sirina*visina);}
};
//konstruktor
Pravougaonik :: Pravougaonik (int a, int b) {
sirina = a;
visina = b;
}
void main () {
Pravougaonik p1 (3,4);
cout << "Povrsina pravougaonika: " << p1.povrsina() << endl;}
Destruktor


Služi sa brisanje objekta, uklanjanje iz memorije
Ima isto ime kao i ime klase, sa dodatkom znaka
“~” ispred imena
~Pravougaonik () {
delete sirina;
delete visina;
}
Prijateljske funkcije i klase


Pristup članovima klase moguć je samo
članovima iste klase
Za pristup članovima klase iz neke druge
funkcije koja nije članica klase, mogu se
definisati prijateljske funkcije ili klase
Nasleđivanje


Izvođenje nove klase iz postojeće, uz
zadržavanje postojećih svojstava i dodavanje
novih
Mehanizam nasleđivanja i modifikatori zaštite
class Piksel : mehanizam_nasledjivanja Tacka ;
Virtuelne metode i polimorfizam



Statička implementacija u C++, kompajler
koristi podatke o pripadnosti objekta klasi slično
podacima o pripadnosti varijable tipu podataka
Statička implementacija ne dozvoljava
polimorfizam
Problem se rešava konceptom virtuelnih metoda
Višestruko nasleđivanje




Definisanje klase koja nasleđuje dve ili više
postojećih klasa
Retko se javlja zbog komplikovane
implementacije
Problem kod izvođenja iz više klasa koje su
nastale izvođenjem od iste klase, prioritet u
nasleđivanju atributa
U C++ se ovaj problem rešava redosledom
navođenja klasa koje se nasleđuju
Pitanja
???