Objektno Orijentisano Programiranje C++

  • Upload
    pakevic

  • View
    118

  • Download
    3

Embed Size (px)

Citation preview

Dragan Miliev

Objektno orijentisano programiranje u realnom vremenu na jeziku C++

Beograd, 1996.

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 1

Deo I Objektno orijentisano programiranje i modelovanje

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 2

UvodJezik C++ je objektno orijentisani programski jezik opte namene. Veliki deo jezika C++ nasleen je iz jezika C, pa C++ predstavlja (uz minimalne izuzetke) nadskup jezika C. Kurs uvodi u osnovne koncepte objektno orijentisanog programiranja i principe projektovanja objektno orijentisanih softverskih sistema, korienjem jezika C++ kao sredstva. Kurs je baziran na referencama [ARM] i [Miliev95]. Knjiga [Miliev95] predstavlja osnovu ovog kursa, a u ovom dokumentu se nalaze samo glavni izvodi. Kurs sadri i najvanije elemente jezika C.

Zato OOP? Objektno orijentisano programiranje (Object Oriented Programming, OOP) je odgovor na tzv. krizu softvera. OOP prua nain za reavanje (nekih) problema softverske proizvodnje. Softverska kriza je posledica sledeih problema proizvodnje softvera: 1. Zahtevi korisnika su se drastino poveali. Za ovo su uglavnom "krivi" sami programeri: oni su korisnicima pokazali ta sve raunari mogu, i da mogu mnogo vie nego to korisnik moe da zamisli. Kao odgovor, korisnici su poeli da trae mnogo vie, vie nego to su programeri mogli da postignu. 2. Neophodno je poveati produktivnost programera da bi se odgovorilo na zahteve korisnika. To je mogue ostvariti najpre poveanjem broja ljudi u timu. Konvencionalno programiranje je nametalo projektvanje softvera u modulima sa relativno jakom interakcijom, a jaka interakcija izmeu delova softvera koga pravi mnogo ljudi stvara haos u projektovanju. 3. Produktivnost se moe poveati i tako to se neki delovi softvera, koji su ranije ve negde korieni, mogu ponovo iskoristiti, bez mnogo ili imalo dorade. Laku ponovnu upotrebu koda (software reuse) tradicionalni nain programiranja nije omoguavao. 4. Poveani su drastino i trokovi odravanja. Potrebno je bilo nai nain da projektovani softver bude itljiviji i laki za nadgradnju i modifikovanje. Primer: esto se deava da ispravljanje jedne greke u programu generie mnogo novih problema; potrebno je "lokalizovati" realizaciju nekog dela tako da se promene u realizaciji "ne ire" dalje po ostatku sistema. Tradicionalno programiranje nije moglo da odgovori na ove probleme, pa je nastala kriza proizvodnje softvera. Poveane su reije koje prate proizvodnju programa. Zato je OOP dolo kao odgovor.

ta daju OOP i C++ kao odgovor?C++ je trenutno najpopularniji objektno orijentisani jezik. Osnovna reenja koja prua OOP, a C++ podrava su: 1. Apstrakcija tipova podataka (Abstract Data Types). Kao to u C-u ili nekom drugom jeziku postoje ugraeni tipovi podataka (int, float, char, ...), u jeziku C++ korisnik moe proizvoljno definisati svoje tipove i potpuno ravnopravno ih koristiti (complex, point, disk, printer, jabuka, bankovni_racun, klijent itd.). Korisnik moe deklarisati proizvoljan broj promenljivih svog tipa i vriti operacije nad njima (multiple instances, viestruke instance, pojave). 2. Enkapsulacija (encapsulation). Realizacija nekog tipa moe (i treba) da se sakrije od ostatka sistema (od onih koji ga koriste). Treba korisnicima tipa precizno definisati samo ta se sa tipom moe raditi, a nain kako se to radi sakriva se od korisnika (definie se interno). 3. Preklapanje operatora (operator overloading). Da bi korisniki tipovi bili sasvim ravnopravni sa ugraenim, i za njih se mogu definisati znaenja operatora koji postoje u jeziku. Na primer, ako je korisnik definisao tip complex, moe pisati c1+c2 ili c1*c2, ako su c1 i c2 promenljive tog tipa; ili, ako je r promenljiva tipa racun, onda r++ moe da znai "dodaj (podrazumevanu) kamatu na raun, a vrati njegovo staro stanje". 4. Nasleivanje (inheritance). Pretpostavimo da je ve formiran tip Printer koji ima operacije nalik na print_line, line_feed, form_feed, goto_xy itd. i da je njegovim korienjem ve realizovana velika koliina softvera. Novost je da je firma nabavila i tampae koji imaju bogat skup stilova pisma i elja je da se oni ubudue iskoriste. Nepotrebno je ispoetka praviti novi tip tampaa ili prepravljati stari kd. Dovoljno je kreirati novi tip PrinterWithFonts koji je "ba kao i obian" tampa, samo"jo moe da" menja stilove tampe. Novi tip e naslediti sve osobine starog, ali e jo poneto moi da uradi. 5. Polimorfizam (polymorphism). Poto je PrinterWithFonts ve ionako Printer, nema razloga da ostatak programa ne "vidi" njega kao i obian tampa, sve dok mu nisu potrebne nove mogunosti tampaa. Ranije napisani delovi programa koji koriste tip Printer ne moraju se uopte prepravljati, oni e jednako dobro raditi i sa novim tipom. Pod odreenim uslovima, stari delovi ne moraju se ak ni ponovo prevoditi! Karakteristika da se novi tip "odaziva" na pravi nain, iako ga je korisnik "pozvao" kao da je stari tip, naziva se polimorfizam.

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 3

Sve navedene osobine mogu se pojedinano na ovaj ili onaj nain realizovati i u tradicionalnom jeziku (kakav je i C), ali je realizacija svih koncepata zajedno ili teka, ili sasvim nemogua. U svakom sluaju, realizacija nekog od ovih principa u tradicionalnom jeziku drastino poveava reije i smanjuje itljivost programa. Jezik C++ prirodno podrava sve navedene koncepte, oni su ugraeni u sm jezik.

ta se menja uvoenjem OOP?Jezik C++ nije "isti" objektno orijentisani programski jezik (Object-Oriented Programming Language, OOPL) koji bi korisnika "naterao" da ga koristi na objektno orijentisani (OO) nain. C++ moe da se koristi i kao "malo bolji C", ali se time nita ne dobija (ak se i gubi). C++ treba koristiti kao sretstvo za OOP i kao smernicu za razmiljanje. C++ ne spreava da se piu loi programi, ve samo omoguava da se piu mnogo bolji programi. OOP uvodi drugaiji nain razmiljanja u programiranje! U OOP, mnogo vie vremena troi se na projektovanje, a mnogo manje na samu implementaciju (kodovanje). U OOP, razmilja se najpre o problemu, ne direktno o programskom reenju. U OOP, razmilja se o delovima sistema (objektima) koji neto rade, a ne o tome kako se neto radi (algoritmima). U OOP, panja se prebacuje sa realizacije na meusobne veze izmeu delova. Tenja je da se te veze to vie redukuju i strogo kontroliu. Cilj OOP je da smanji interakciju izmeu softverskih delova.

Objektno orijentisano programiranje u realnom vremenu na jeziku C++ 4

Pregled osnovnih koncepata OOP u jeziku C++U ovoj glavi bie dt kratak i sasvim povran pregled osnovnih koncepata OOP koje podrava C++. Potpuna i precizna objanjenja koncepata bie data kasnije, u posebnim glavama. Primeri koji se koriste u ovoj glavi nisu usmereni da budu upotrebljivi, ve samo pokazni. Iz realizacije primera izbaeno je sve to bi smanjivalo preglednost osnovnih ideja. Zato su primeri esto i nekompletni. italac ne treba da se trudi da posle itanja ove glave strogo zapamti sintaksu reenja, niti da otkrije sve pojedinosti koje se kriju iza njih. Cilj je da italac samo stekne oseaj o osnovnim idejama OOP-a i jezika C++, da vidi ta je to novo i ta se sve moe uraditi, kao i da proba da sebe "natera" da razmilja na novi, objektni nain.

Klase Klasa (class) je osnovna organizaciona jedinica programa u OOPL, pa i u jeziku C++. Klasa predstavlja strukturu u koju su grupisani podaci i funkcije:/* Deklaracija klase: */ class Osoba { public: void koSi(); private: char *ime; int god; };

/* funkcija: predstavi se! */ /* ... i jo neto */ /* podatak: ime i prezime */ /* podatak: koliko ima godina */

/* Svaka funkcija se mora i definisati: */ void Osoba::koSi () { cout