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
???