Pitanja za razgovor o objektno orijentisanom programiranju mogu biti od pomoći programerima da unaprede svoje razumevanje ključnih koncepata u programiranju.
OOP je jedna od najvažnijih programskih paradigmi koja se fokusira na objekte i klase umesto na procedure i funkcije.
Neki od programskih jezika koji se baziraju na OOP-u uključuju Objective-C, Java, Ada, Perl, Python, C++ i druge.
Velike kompanije traže programere koji su stručni u primeni objektno orijentisanih principa i šablona.
Stoga, ako planirate da učestvujete u procesu intervjuisanja za poziciju programera, morate temeljno razumeti OOP koncepte.
U nastavku pogledajmo neka često postavljana pitanja i odgovore o OOP-u, koji će vam pomoći u pripremi za razgovore i testove.
Objektno orijentisano programiranje (OOP): Pregled
OOP je programska paradigma čija je osnovna ideja bazirana na objektima. Objekti se ovde tretiraju kao instance iz stvarnog sveta, dok klase predstavljaju šablone koji definišu njihova ponašanja i karakteristike.
Na primer, uzmimo za primer automobil. Prema OOP modelu:
- Objekat: Automobil. To može biti bilo koji tip ili model, recimo automobil koji vi posedujete.
- Klasa: Model ili tip automobila, kao što su BMW, Chevrolet, Kia, Audi i drugi.
- Karakteristike: Boja automobila, broj šasije, tip motora, vrsta menjača i ostalo.
- Ponašanje: Kako promeniti brzinu, kako upaliti automobil, itd.
Karakteristike se često nazivaju svojstvima, atributima ili podacima, dok se ponašanja nazivaju procedurama, metodama ili funkcijama u programskim jezicima.
Započnimo sa nekim često postavljanim pitanjima na intervjuima za OOP.
Šta podrazumevamo pod pojmom OOP?
Odgovor: Objektno orijentisano programiranje (OOP) je model programiranja koji se zasniva na objektima i klasama, umesto na procedurama i funkcijama. Pojedinačni objekti se grupišu u klase. OOP opisuje entitete iz stvarnog sveta pomoću koncepata poput polimorfizma, skrivanja podataka, nasleđivanja, itd. To je programska paradigma.
OOP povezuje kod i podatke zajedno. Objekti su entiteti iz stvarnog sveta definisani putem klasa, sa specifičnim karakteristikama i ponašanjem, dok je klasa definisana kao šablon za određeni objekat. Takođe je poznata kao korisnički definisan tip podataka.
Ovo obuhvata programe za dizajn i proizvodnju, kao i mobilne aplikacije. Na primer, možete koristiti OOP za izradu softvera za simulaciju sistema.
Koje druge programske paradigme postoje osim OOP-a?
Odgovor: Programske paradigme su način kategorizacije programskih jezika na osnovu karakteristika svakog jezika. Postoje dve osnovne vrste programskih paradigmi:
- Imperativna programska paradigma: Fokusira se na način na koji se logika izvršava i definiše tok kontrole. Uključuje proceduralno programiranje, objektno orijentisano programiranje (OOP) i paralelno programiranje.
- Deklarativna programska paradigma: Fokusira se na to šta treba izvršiti u programu i definiše njegovu logiku, a ne tok kontrole. Uključuje logičko programiranje, funkcionalno programiranje i programiranje baza podataka.
Koja je razlika između OOP-a i SOP-a?
Odgovor: Razjasnićemo razliku između OOP i SOP pomoću tabele:
Objektno orijentisano programiranje | Strukturno orijentisano programiranje |
To je model programiranja koji se bazira na objektima, a ne na procedurama i funkcijama. | Obezbeđuje logičku strukturu programu, gde su programi podeljeni na funkcije. |
Prati pristup odozdo prema gore. | Prati pristup odozgo prema dole. |
Pruža skrivanje ili enkapsulaciju podataka. | Ne obezbeđuje skrivanje podataka. |
Može da reši složene probleme. | Može da reši umereno složene probleme. |
Niska redundancija jer se kod može ponovo koristiti. | Ne podržava ponovnu upotrebu koda. |
Veća fleksibilnost. | Manja fleksibilnost. |
Njegova primarna briga su podaci. | Njegova primarna briga je logička struktura programa. |
Koje su glavne karakteristike OOP-a?
Odgovor: Glavne karakteristike OOP-a su:
- Nasleđivanje
- Enkapsulacija
- Apstrakcija
- Polimorfizam
- Prekrivanje metoda
- Preopterećenje metoda
- Objekti
- Klase
- Konstruktori i destruktori
Nasleđivanje, polimorfizam i enkapsulacija su ključni elementi OOP-a koji ga razlikuju od jezika koji nisu objektno orijentisani.
Šta je enkapsulacija?
Odgovor: Enkapsulacija je tehnika pakovanja podataka (promenljivih) i metoda koje rade sa tim podacima unutar jedne celine (klase). Ona predstavlja proces kombinovanja podataka i metoda u jedinstvenu kapsulu, a istovremeno skriva unutrašnje detalje implementacije od spoljnog sveta. Jednostavno rečeno, sve potrebne metode i podaci su spojeni, a nepotrebni detalji su skriveni od korisnika.
Može se definisati i na druge načine:
- Povezivanje podataka: Enkapsulacija je proces povezivanja članova podataka zajedno sa metodama kao jedna celina ili klasa.
- Skrivanje podataka: Enkapsulacija je proces skrivanja nepotrebnih informacija, poput ograničenja pristupa članovima objekta.
Šta je polimorfizam?
Odgovor: Polimorfizam se može shvatiti tako što se reč podeli na dve komponente:
„Poli“ znači „mnogo“
„Morf“ znači „oblici“
Dakle, polimorfizam se može opisati kao objekat koji ima mnogo oblika.
U kontekstu OOP-a, to je proces gde se neki podaci, objekat, metoda ili kod ponašaju različito u različitim kontekstima ili okolnostima. Postoje dva tipa polimorfizma u OOP-u:
- Polimorfizam u vreme izvršavanja
- Polimorfizam u vreme kompajliranja
Drugim rečima, to su višestruke definicije jednog interfejsa. Na primer, postoji klasa „vozilo“ koja sadrži metodu „brzina“. Nemoguće je definisati brzinu na nivou klase „vozilo“ jer različita vozila imaju različite brzine. Stoga, brzina se može definisati u podklasama, sa različitim implementacijama za različita vozila.
Šta je statički polimorfizam?
Odgovor: Statički polimorfizam je takođe poznat kao polimorfizam u vreme kompajliranja. To je karakteristika pomoću koje se objekat može povezati sa odgovarajućim operatorom ili funkcijom na osnovu vrednosti. Ovo se može postići preopterećenjem operatora ili preopterećenjem metoda.
Ovde metode koriste slično ime, ali se parametri svake metode razlikuju. Objekat se ponaša drugačije za sličan okidač. Dakle, više metoda se implementira unutar iste klase.
Šta je dinamički polimorfizam?
Odgovor: Dinamički polimorfizam je takođe poznat kao polimorfizam u vreme izvršavanja. To je tip polimorfizma u OOP-u gde se stvarna implementacija funkcije rešava tokom izvršavanja ili u vreme izvršavanja. To se postiže prekrivanjem metoda.
Na primer, ako se kreiraju dve klase, „Bicikl“ i „Yamaha“, i ako klasa „Yamaha“ nasleđuje klasu „Bicikl“ i prepiše (override) njenu metodu `run()`. Pošto metoda podklase prepiše metodu roditeljske klase, ona se poziva u vreme izvršavanja.
Šta je klasa?
Odgovor: Klasa se može definisati kao nacrt ili šablon koji sadrži određene vrednosti, koje se nazivaju podacima članova. Takođe sadrži pravila koja su poznata kao funkcije ili ponašanja. Kada kreirate objekat, on automatski preuzima funkcije i podatke definisane u klasi.
Dakle, klasa je nacrt ili šablon za objekte. Može se kreirati onoliko objekata koliko je potrebno, na osnovu jedne klase. Na primer, prvo se kreira šablon automobila. Nakon toga, različiti automobili se dizajniraju na osnovu tog šablona.
Šta je objekat?
Odgovor: Objekat se može definisati kao instanca klase koja sadrži konkretnu realizaciju ponašanja i članova definisanih u šablonu. Objekat je stvarni entitet sa kojim korisnik interaguje, dok je klasa samo nacrt za taj objekat.
Dakle, objekti imaju određene karakteristike ili ponašanja i zauzimaju prostor – na primer, određeni model automobila.
Koja je razlika između klase i strukture?
Odgovor: Razliku ćemo razumeti uz pomoć tabele:
Struktura | Klasa |
Strukture su tipovi vrednosti. | Klase su referentni tipovi. |
Dodeljuju se memoriji na steku. | Dodeljuju se memoriji na hipu. |
Alokacija je jeftinija. | Ima ograničene karakteristike. |
Struktura se koristi u malim programima. | Klasa se koristi u velikim programima. |
Sadrži parametrizovan ili statički konstruktor. | Sadrži konstruktor i destruktor. |
Lako može kreirati instance sa ili bez ključne reči. | Koristi ključnu reč `new()` svaki put kada kreira instancu. |
Strukturi nije dozvoljeno da nasleđuje. | Klasa može naslediti drugu klasu. |
Članovi podataka strukture ne mogu biti zaštićeni. | Članovi podataka klase mogu biti zaštićeni. |
Članovi funkcije ne mogu biti apstraktni ili virtuelni. | Članovi funkcije mogu biti apstraktni ili virtuelni. |
Svaka promenljiva sadrži sopstvenu kopiju. | Dve različite promenljive klase mogu referencirati isti objekat. |
Šta je nasleđivanje?
Odgovor: Nasleđivanje je jedna od karakteristika OOP-a koja omogućava klasi da nasledi glavne karakteristike druge klase. Na primer, ako je „vozilo“ klasa, onda su „automobil“, „bicikl“ itd. druge klase koje mogu naslediti ključne karakteristike klase „vozilo“.
Ova funkcija pomaže da se izbegne suvišni kod, čime se smanjuje veličina koda. Jednostavnije rečeno, nasleđivanje se definiše kao preuzimanje svojstava od nadređene klase u podređenu klasu. Ovde je „vozilo“ roditeljska klasa, a „automobil“ ili „bicikl“ su podređene klase iz gornjeg primera.
Na ovaj način možete ponovo koristiti programski kod jedne klase u drugoj klasi bez ponovnog pisanja istog koda, čime se štedi vreme u procesu programiranja.
Koje su različite vrste nasleđivanja?
Odgovor: U OOP-u se koriste različite vrste nasleđivanja, kao što su:
- Jednostruko nasleđivanje: Definise se kao nasleđivanje gde jedna klasa nasleđuje zajedničke funkcije jedne bazne klase.
- Višestruko nasleđivanje: Nastaje kada jedna klasa nasledi od više od jedne klase.
- Višeslojno nasleđivanje: Ovo podrazumeva da klasa nasleđuje druge klase, koje su podklase neke druge klase.
- Hijerarhijsko nasleđivanje: Odnosi se na nasleđivanje gde jedna klasa ima više podklasa.
- Hibridno nasleđivanje: To je kombinacija višeslojnog i višestrukog nasleđivanja.
Koja su ograničenja nasleđivanja?
Odgovor: Neka od ograničenja nasleđivanja su sledeća:
- Povećava napor i vreme potrebno za izvršavanje programa. To je zato što zahteva često „skakanje“ iz jedne klase u drugu, što oduzima vreme.
- Roditeljska i podređena klasa su veoma čvrsto povezane, što smanjuje fleksibilnost.
- Potrebno je pažljivo implementirati nasleđivanje, inače može doći do nedovoljnih ili netačnih rezultata.
- Jedna modifikacija u programu može dovesti do promena koda u roditeljskim i podređenim klasama.
Šta je apstrakcija?
Odgovor: Apstrakcija je jedan od elemenata OOP-a. Ključna uloga apstrakcije je da se nosi sa složenošću. To se postiže skrivanjem nepotrebnih detalja od korisnika. Ovo omogućava korisnicima da implementiraju složenu logiku koristeći apstrakciju, bez razmišljanja o skrivenoj složenosti.
Na primer, ako ste ljubitelj kafe, morate znati koliko mleka, zrna kafe i kockica šećera želite da dodate da napravite šoljicu kafe pomoću aparata za kafu. Nema potrebe da razmišljate o principu rada tog aparata. Aparat za kafu je skrivena složenost koju ne morate znati, ali je proces pravljenja kafe neophodan.
Postoje dve vrste apstrakcije:
- Apstrakcija podataka
- Apstrakcija procesa
Šta je konstruktor?
Odgovor: Konstruktor je posebna metoda u klasi ili strukturi čije ime je isto kao i ime klase. Služi za inicijalizaciju objekata. Takođe pomaže u instanciranju podataka članova, kao i metoda za dodeljivanje objekata klasi.
Prilikom kreiranja konstruktora, morate imati na umu nekoliko stvari:
- Ime mu je isto kao ime klase.
- Ne može biti apstraktan, konačan ili statičan.
- Nema povratni tip (ne vraća vrednost).
Koje su različite vrste konstruktora u C++?
Odgovor: U C++ uglavnom postoje tri tipa konstruktora:
- Podrazumevani konstruktor: Konstruktor bez parametara ili argumenata u definiciji. Ovaj tip konstruktora se koristi za inicijalizaciju podataka ili promenljivih sa podrazumevanim vrednostima.
- Parametrizovani konstruktor: Sadrži argumente ili parametre u deklaraciji i definiciji. Više od jednog parametra može se proslediti parametrizovanom konstruktoru. Koristi se za preopterećenje kako bi se napravila razlika između više konstruktora.
- Konstruktor kopije: To je metoda koja koristi drugi objekat iste klase za inicijalizaciju objekta. Štaviše, pomaže u kopiranju podataka sa jednog objekta na drugi.
Šta je destruktor?
Odgovor: Destruktor je metoda koja se automatski poziva prilikom uništavanja objekta. On sprovodi određene radnje:
- Oslobađanje memorije (sa heap-a) koja je dodeljena tokom inicijalizacije objekta
- Zatvaranje veza sa bazom podataka i datoteka
- Oslobađanje mrežnih resursa i zaključavanja resursa
- Obavljanje raznih drugih poslova
Drugim rečima, destruktor uništava objekte koje je inicijalizovao konstruktor. To je specijalna funkcija člana sa istim imenom kao ime klase, ali joj prethodi simbol (~). Destruktor ne može biti preopterećen.
Šta je sakupljanje smeća (Garbage Collection – GC)?
Odgovor: Sakupljanje smeća (GC) je element za automatsko upravljanje memorijom, ugrađen u programske jezike kao što su Java i C#. Programski jezik koji podržava GC sadrži najmanje jedan sakupljač smeća koji automatski oslobađa memorijski prostor koji više nije potreban u programu.
Sakupljanje smeća osigurava da program ostane unutar dodeljene memorijske kvote. Sprečava programere da ručno upravljaju memorijom programa, čime se minimiziraju greške vezane za memoriju.
Šta je rukovanje izuzecima?
Odgovor: Rukovanje izuzecima je metod reagovanja na neočekivane događaje dok se računarstvo program pokreće. Programeri moraju „rukovati“ neželjenim događajima (izuzecima) da bi sprečili pad sistema ili programa. Bez ovog metoda, izuzeci mogu poremetiti normalno funkcionisanje programa i dovesti do neefikasnosti ili rizika.
Šta je try/catch blok?
Odgovor: `Try` i `catch` su ključne reči koje predstavljaju mehanizam za rukovanje izuzecima usled grešaka u kodiranju ili podataka tokom izvršavanja programa.
- `Try` blok je blok koda u kome se očekuje pojava izuzetaka.
- `Catch` blok obrađuje izuzetke koji se pojave u `try` bloku.
`Try` i `catch` izjave se često koriste u različitim programskim jezicima, uključujući C++, C#, Java, SQL i JavaScript. Svaka `try` izjava mora da odgovara najmanje jednoj `catch` izjavi. Evo još nekoliko stvari koje treba imati na umu:
- `Try` blok mora da sledi `catch` blok.
- Nakon `try` bloka sledi najmanje jedan `catch` blok.
- Nakon `try` bloka može da sledi drugi `try` blok, i onda `catch` blok.
Zaključak
OOP je osnovni koncept koji svaki programer treba da poznaje. Detaljno razumevanje ovog koncepta će vam pomoći da bolje programirate u jezicima koji koriste OOP koncepte.
Ako se pripremate za intervju ili test, gore navedena pitanja i odgovori za intervju će vam pomoći da osvežite razumevanje OOP koncepata kao što su klase, objekti, enkapsulacija, polimorfizam, nasleđivanje, apstrakcija i još mnogo toga. Na ovaj način možete se samouvereno suočiti sa intervjuima i uspešno ih proći kako biste izgradili svoju karijeru.
Takođe možete pogledati neka od ovih pitanja za SQL intervju.