Uvod u objektno orijentisano programiranje u C++ (1. dio)
Autor: Amar Tufo
U ovom serijalu bit će predstavljen pojam objektno orjentisanog programiranja kreiranjem praktičnog programa, te upotreba klasa i objekata kao jednog od osnovnih novina objektno orjentisanog programiranja u C++ programskom jeziku. Osnovni cilj je da se nešto iskusniji hobisti, studenti i programeri upoznaju sa načinom kreiranja klase u zasebnoj datoteci poznatoj kao zaglavlje, njeno pozivanje u programu, kreiranje objekta, te upotreba mutatora i aksesora kako bi se postavile vrijednosti određenim tipovima podataka. Ovaj stručni članak koji je nastao u potpunosti na Ubuntu Linuks distribuciji kao platformi, demonstrira upotrebu Emaksa kao tekst editora, te kompajliranje C++ datoteka upotrebom GNU/G++ kompajlera. Cio završni projekat je dostupan na mom githabu, pa ukoliko ste upoznati sa upotrebom Githaba, ovaj projekat možete klonirati na svoje računalo kako biste ga proširili, izveli modifikacije te dodali neke nove dodatke.
Kratak uvod u objektno orjentisano programiranje
Prije nego li krenemo u detalje razrađivati ovaj članak, imam tu potrebu da najprije nešto kažemo o objektno orjentisamom programiranju, zašto je ono važno za C++ programski jezik, koje su prednosti i karakteristike ovog načina razvoja softvera itd. Kada se pogleda na današnji softver, možemo slobodno reći da je on dostupan ne samo na Desktop platformama, nego i mobilnim, pa i u klaudu. Ovo možemo zahvaliti prvenstveno novim programskim jezicima kao što su PHP, Pajton, Java, C++, VB.NET, Rubi On Reils i mnogi drugi programski jezici koji su omogućili lako portanje softvera, ne samo na druge platforme nego i u druge programske jezike. Nije uvijek tako bilo. Naime, 1960-ih godina, programeri su se našli u velikim problemima razvoja softvera. Velik broj ljudi se angažovao na razvoju jednog projekta koji je naravno trebalo da ubrza proces njegovog razvoja, ali nije. Softver je postao skup ne samo za razvoj nego i njegovo održavanje, postao je nestabilan i bagovit i povrh svega, krajnji korisnici su bili nezadovoljni ali i zahtjevni. Ovo je kasnije postalo poznato u informatici kao softverska kriza. Programeri su tragali za rješenjem ovog problema, te se kao odgovor na softversku krizu javlja objektno orjentisano programiranje. Dakle, objektno orjentisano programiranje, OOP nastaje kao odgovor na tzv. softversku krizu koju su izazvali sami programeri. Oni su ljudima pokazali što sve jedan računar može, puno više od onoga što su mislili i oni kao tvorci softvera, te krajnji korisnici njihovog softvera. Međutim, OOP uvodi svojevrsnu revoluciju u načinu izrade softvera u čijem primarnom fokusu se nalazi objekat. Stoga, OOP te C++ kao objektno orjentirani programski jezik u razvoj softvera unose ova rješenja:
Apstrakcija tipova podataka (eng. Apstract Data Tupes) – kao što u C-u ili u nekom drugom programskom jeziku postoje ugrađeni tipovi podataka (intidžer, karakter …), tako u jeziku C++ korisnik može proizvoljno definisati svoje tipove podataka (klase), te ih ravnopravno koristiti tijekom razvoja svog softvera.
Enkapsulacija (eng. encapsulation) – realizacija nekog tipa može (i treba) da se sakrije od ostatka sistema (od onih koji ga koriste). Treba korisnicima tipa precizno definisati samo šta se sa tipom može raditi, način kako se to radi, odnosno sakriva, definiše se interno.
Nasljeđivanje (eng. inheritance) – pretpostavimo da je već formiran tip printer koji ima operacije print_line, line_feed, form_feed, goto_xy itd, te da je njegovim korištenjem već realizovana velika količina softvera. Novost je da je firma nabavila i štampače koji imaju bogat skup stilova pisma i želja je da se oni ubuduće iskoriste. Stoga nema potrebe praviti novi tip štampača, dovoljno je samo kreirati novi tip PrinterWithFonts koji je kao naš „obični štampač” samo što još može da mjenja stilove štampe. Novi tip će naslijediti sve osobine starog, ali će biti u stanju da izvede i druge oblike operacija.
Polimofizam (eng. polymorphism) – pošto je PrinterWithFonts već ionako Printer, nema razloga da ostatak programa „ne vidi” njega kao običan štampač, sve dok mu nisu potrebne nove mogućnosti štampača. Ranije napisani djelovi programa koji koriste tip Printer ne moraju se uopšte pretpostavljati, oni će jednako dobro raditi i sa novim tipom. Karakteristika da se novi tip „odaziva” na pravi način, iako ga je korisnik „pozvao” kao da je stari tip, naziva se polimofizam.
S obzirom na to da je C++ bolja „inačica” C-a-, on opet nije „čisto” objektno orjentisan programski jezik. Stvar je u tome što C++ omogućava realizaciju kompleksnog sofvera upotrebom OOP koncepta dosta efikasnije nego što je to bio slučaj sa proceduralnim programiranjem (Paskal je jedan takav programski jezik). Navedene karakteristike OOP su prijeko potrebne ukoliko se pristupa razvoju igara koje koriste sve navedene koncepte ,a znamo kako je C++ industrijski standard kada se govori o toj oblasti informatike.
Možemo na kraju sumirati kako C++ u kombinaciji sa OOP tehnikom programiranja omogućava razvoj mnogo boljeg, stabilnijeg softvera koji je lako portabilan, multi platformski, lak za debagovanje itd. S druge strane, OOP uvodi drugačiji način razmišljanja programiranja, gdje se na kompleksne cjeline softvera gleda kao na realne objekte što omogućava programerima da rade na jednom objektu, realizaciji jedne funkcije softvera te sklapanje tih objekata u jednu cjelinu čime se dobija gotov softver. Dakle, u OOP-u, razmišlja se o djelovima sistema (objektima) koji nešto rade, a ne o tome kako se nešto radi (algoritmima). Pažnja se prebacuje sa realizacije na međusobne veze između djelova. Nastoji se smanjiti interakcija između softverskih djelova itd. U drugom dijelu ćemo se upoznati detaljnije sa pojmom objekata i klasa, načinom njihove izrade i primjene u C++ programskom jeziku kroz praktičan primjer. Do čitanja.