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