Objektno usmerjeno programiranje ali OOP je paradigma programiranja, ki izvaja koncept predmetov v programu. Njegov namen je zagotoviti lažjo rešitev za probleme iz resničnega sveta z implementacijo entitet iz resničnega sveta, kot so dedovanje, abstrakcija, polimorfizem itd. v programiranju. Koncept OOP se pogosto uporablja v številnih priljubljenih jezikih, kot so Java, Python, C++ itd.

OOP je tudi ena najpomembnejših tem za razgovore o programiranju. Ta članek vsebuje nekaj najboljša vprašanja za intervju o konceptu OOP.
blagajna z git
Vprašanja za intervju OOP
1. Kaj je objektno usmerjeno programiranje (OOP)?
O predmet O riented p programiranje (znan tudi kot OOP) je paradigma programiranja, kjer celotna programska oprema deluje kot kup objektov, ki se med seboj pogovarjajo. Objekt je zbirka podatkov in metod, ki delujejo na teh podatkih.
2. Zakaj OOP?
Glavna prednost OOP je bolje obvladljiva koda, ki pokriva naslednje:
- Splošno razumevanje programske opreme se poveča z razdaljo med jezikom, ki ga govorijo razvijalci, in jezikom, ki ga govorijo uporabniki.
- Objektna usmerjenost olajša vzdrževanje z uporabo enkapsulacije. Enostavno lahko spremenite osnovno predstavitev, tako da metode ostanejo enake.
- Paradigma OOP je uporabna predvsem za relativno veliko programsko opremo.
3. Kaj je razred?
A razred je gradnik objektno orientiranih programov. To je uporabniško definiran podatkovni tip, ki vsebuje podatkovne člane in članske funkcije, ki delujejo na podatkovnih članih. Je kot načrt ali predloga predmetov, ki imajo skupne lastnosti in metode.
4. Kaj je predmet?
An predmet je primerek razreda. Podatkovnih članov in metod razreda ni mogoče uporabiti neposredno. Za njihovo uporabo moramo ustvariti objekt (ali primerek) razreda. Preprosto povedano, so dejanske svetovne entitete, ki imajo stanje in vedenje.
C++ #include using namespace std; // defining class class Student { public: string name; }; int main() { // creating object Student student1; // assigning member some value student1.name = 'Rahul'; cout << 'student1.name: ' << student1.name; return 0; }> Java // class definition class Student { String name; } class GfG { public static void main(String args[]) { // creating an object Student student1 = new Student(); // assigning member some value student1.name = 'Rahul'; System.out.println('student1.name: ' + student1.name); } }> Python # class definition class Student: name = '' # creating object student1 = Student() student1.name = 'Rahul'; print('student1.name: ' + student1.name);> C# using System; // defining class public class Student { public string name; } public class GFG { static public void Main() { // creating object Student student1 = new Student(); student1.name = 'Rahul'; Console.WriteLine('student1.name: ' + student1.name); } }> Izhod
student1.name: Rahul>
5. Katere so glavne značilnosti OOP-jev?
Glavna značilnost OOP-jev, znanih tudi kot 4 stebri ali osnovna načela OOP-jev, so naslednji:
- Enkapsulacija
- Abstrakcija podatkov
- Polimorfizem
- Dedovanje

Glavne značilnosti OOP
6. Kaj je enkapsulacija?
Enkapsulacija je vezava podatkov in metod, ki z njimi manipulirajo v eno samo enoto, tako da so občutljivi podatki skriti pred uporabniki
Izvaja se kot postopki, omenjeni spodaj:
- Skrivanje podatkov: Jezikovna funkcija za omejevanje dostopa do članov predmeta. Na primer zasebni in zaščiteni člani v C++.
- Združevanje podatkov in metod skupaj: Podatki in metode, ki delujejo na teh podatkih, so združeni skupaj. Podatkovni člani in metode članov, ki z njimi delujejo, so na primer zaviti v eno samo enoto, imenovano razred.

7. Kaj je abstrakcija?
Abstrakcija je podobna enkapsulaciji podatkov in je zelo pomembna v OOP. Pomeni prikaz le potrebnih informacij in skrivanje drugih nepomembnih informacij pred uporabnikom. Abstrakcija je implementirana z uporabo razredov in vmesnikov.

8. Kaj je polimorfizem?
Beseda Polimorfizem pomeni imeti veliko oblik. Lastnost neke kode je, da se v različnih kontekstih obnaša različno. Na primer, v jeziku C++ lahko definiramo več funkcij, ki imajo isto ime, vendar različno delujejo glede na kontekst.
Polimorfizem je mogoče razvrstiti v dve vrsti glede na čas, ko je razrešen klic objekta ali funkcije. So naslednji:
- Časovni polimorfizem prevajanja
- Polimorfizem izvajalnega okolja
A) Polimorfizem med prevajanjem
Polimorfizem v času prevajanja, znan tudi kot statični polimorfizem ali zgodnja vezava, je vrsta polimorfizma, kjer se vezava klica na njegovo kodo izvede v času prevajanja. Preobremenitev metode ali preobremenitev operaterja sta primera polimorfizma v času prevajanja.
B) Polimorfizem izvajalnega okolja
Polimorfizem izvajalnega časa, poznan tudi kot dinamični polimorfizem ali pozna vezava, je vrsta polimorfizma, kjer je dejanska izvedba funkcije določena med izvajanjem ali izvajanjem. Preglasitev metode je primer te metode.
9. Kaj je dedovanje? Kakšen je njegov namen?
Ideja dedovanja je preprosta, razred je izpeljan iz drugega razreda in uporablja podatke in izvedbo tega drugega razreda. Razred, ki je izpeljan, se imenuje podrejeni ali izpeljan ali podrazred, razred, iz katerega je izpeljan podrejeni razred, pa se imenuje nadrejeni ali osnovni ali nadrazred.
Glavni namen dedovanja je povečati možnost ponovne uporabe kode. Uporablja se tudi za doseganje izvajalnega polimorfizma.
10. Kaj so specifikatorji dostopa? Kakšen je njihov pomen v OOP?
Specifikatorji dostopa so posebne vrste ključnih besed, ki se uporabljajo za določanje ali nadzor dostopnosti entitet, kot so razredi, metode itd. Zasebno , Javno , in Zaščiteno so primeri specifikatorjev dostopa ali modifikatorjev dostopa.
Ključne komponente OOP-jev, enkapsulacija in skrivanje podatkov, so v veliki meri dosežene zaradi teh specifikatorjev dostopa.
11. Kakšne so prednosti in slabosti OOP?
Prednosti OOP-jev | Slabosti OOP-jev |
|---|---|
| OOPs zagotavlja izboljšano možnost ponovne uporabe kode. | Programer mora biti dobro usposobljen in mora imeti odlično razmišljanje o objektih, saj se v OOP vse obravnava kot objekt. |
| Kodo je lažje vzdrževati in posodabljati. | Potrebno je pravilno načrtovanje, ker je OOP nekoliko zapleten. |
| Zagotavlja boljšo varnost podatkov z omejevanjem dostopa do podatkov in izogibanjem nepotrebnemu izpostavljanju. | Koncept OOP ni primeren za vse vrste težav. |
| Hiter za implementacijo in enostaven za preoblikovanje, kar zmanjša kompleksnost celotnega programa. | Dolžina programov je veliko daljša v primerjavi s proceduralnim pristopom. |
12. Katere druge paradigme programiranja obstajajo poleg OOP?
Paradigma programiranja se nanaša na tehniko ali pristop pisanja programa. Paradigme programiranja lahko razvrstimo v naslednje vrste:

1. Paradigma imperativnega programiranja
Je paradigma programiranja, ki deluje tako, da spremeni stanje programa s stavki o dodelitvi. Glavni poudarek v tej paradigmi je na tem, kako doseči cilj. V to kategorijo spadajo naslednje programske paradigme:
- Paradigma proceduralnega programiranja : Ta paradigma programiranja temelji na konceptu klica procedure. Postopki, znani tudi kot rutine ali funkcije, so osnovni gradniki programa v tej paradigmi.
- Objektno orientirano programiranje ali OOP : V tej paradigmi vsako entiteto vizualiziramo kot objekt in poskušamo program strukturirati na podlagi stanja in obnašanja tega predmeta.
- Vzporedno programiranje : Paradigma vzporednega programiranja je obdelava ukazov z razdelitvijo na več manjših delov in njihovim sočasnim izvajanjem.
2. Paradigma deklarativnega programiranja
Deklarativno programiranje se osredotoča na to, kaj naj se izvede, in ne na to, kako naj se to izvede. V tej paradigmi izrazimo logiko računanja, ne da bi upoštevali njegov kontrolni tok. Deklarativno paradigmo lahko nadalje razvrstimo v:
- Paradigma logičnega programiranja : Temelji na formalni logiki, kjer programski stavki izražajo dejstva in pravila o problemu v logični obliki.
- Paradigma funkcionalnega programiranja : Programi so ustvarjeni z uporabo in sestavljanjem funkcij v tej paradigmi.
- Paradigma programiranja baze podatkov : Za upravljanje podatkov in informacij, organiziranih kot polja, zapisi in datoteke, se uporabljajo modeli programiranja baze podatkov.
13. Kakšna je razlika med strukturiranim in objektno usmerjenim programiranjem?
Strukturirano programiranje je tehnika, ki velja za predhodnico OOP in je običajno sestavljena iz dobro strukturiranih in ločenih modulov. Je podmnožica proceduralnega programiranja. Razlika med OOP in strukturiranim programiranjem je naslednja:
Objektno orientirano programiranje | Strukturno programiranje |
|---|---|
| Programiranje, ki je objektno usmerjeno, je zgrajeno na objektih, ki imajo stanje in vedenje. | Logično strukturo programa zagotavlja strukturno programiranje, ki programe razdeli na njihove ustrezne funkcije. |
| Sledi pristopu od spodaj navzgor. | Sledi pristopu od zgoraj navzdol. |
| Omejuje odprt pretok podatkov na pooblaščene dele, kar zagotavlja samo boljšo varnost podatkov. | Brez omejitev pretoka podatkov. Vsakdo lahko dostopa do podatkov. |
| Izboljšana ponovna uporabnost kode zaradi konceptov polimorfizma in dedovanja. | Ponovna uporabnost kode je dosežena z uporabo funkcij in zank. |
| Pri tem so metode napisane globalno in vrstice kode se obdelujejo ena za drugo, tj. Izvajaj se zaporedno. | Pri tem metoda deluje dinamično in izvaja klice glede na potrebo po kodi za določen čas. |
| Spreminjanje in posodabljanje kode je lažje. | Spreminjanje kode je težko v primerjavi z OOP. |
| Podatki imajo v OOP večji pomen. | Koda ima večji pomen. |
14. Kateri so nekateri pogosto uporabljeni objektno usmerjeni programski jeziki?
Paradigma OOPs je ena najbolj priljubljenih programskih paradigem. Široko se uporablja v številnih priljubljenih programskih jezikih, kot so:
- C++
- Java
- Python
- Javascript
- C#
- Ruby
15. Katere so različne vrste polimorfizma?
Polimorfizem je mogoče razvrstiti v dve vrsti glede na čas, ko je razrešen klic objekta ali funkcije. So naslednji:
- Časovni polimorfizem prevajanja
- Polimorfizem izvajalnega okolja

Vrste polimorfizma
A) Polimorfizem med prevajanjem
Polimorfizem v času prevajanja, znan tudi kot statični polimorfizem ali zgodnja vezava, je vrsta polimorfizma, kjer se vezava klica na njegovo kodo izvede v času prevajanja. Preobremenitev metode oz preobremenitev operaterja so primeri polimorfizma v času prevajanja.
B) Polimorfizem izvajalnega okolja
Poznan tudi kot dinamični polimorfizem ali pozno vezavo, izvajalni polimorfizem je vrsta polimorfizma, kjer je dejanska izvedba funkcije določena med izvajanjem ali izvajanjem. Preglasitev metode je primer te metode.
16. Kakšna je razlika med preobremenitvijo in preglasitvijo?
Funkcija polimorfizma med prevajanjem, imenovana preobremenitev omogoča entiteti, da ima številne izvedbe istega imena. Dva primera sta preobremenitev metode in preobremenitev operaterja.
Preglasitev je oblika izvajalnega polimorfizma, kjer se izvaja entiteta z enakim imenom, vendar drugačno izvedbo. Izvaja se s pomočjo virtualnih funkcij.
17. Ali obstajajo kakšne omejitve glede dedovanja?
da ko imaš več pooblastil, je več izzivov. Čeprav je dedovanje zelo močna funkcija OOP, ima tudi znatne pomanjkljivosti.
- Ker mora za izvedbo preiti skozi več razredov, obdelava dedovanja traja dlje.
- Osnovni razred in podrejeni razred, ki se oba ukvarjata z dedovanjem, sta tudi med seboj tesno povezana (imenovana tesno povezana). Zato, če je treba narediti spremembe, jih bo morda treba izvesti v obeh razredih hkrati.
- Tudi izvajanje dedovanja je lahko težavno. Če torej ni pravilno implementirano, lahko to povzroči nepredvidene napake ali netočne rezultate.
18. Katere različne vrste dedovanja obstajajo?
Dedovanje lahko razvrstimo v 5 tipov, ki so naslednji:

- Eno dedovanje: Podrejeni razred, izpeljan neposredno iz osnovnega razreda
- Večkratno dedovanje: Podrejeni razred, izpeljan iz več osnovnih razredov.
- Večnivojsko dedovanje: Podrejeni razred, izpeljan iz razreda, ki je prav tako izpeljan iz drugega osnovnega razreda.
- Hierarhično dedovanje: Več podrejenih razredov, izpeljanih iz enega osnovnega razreda.
- Hibridno dedovanje: Dedovanje, sestavljeno iz več vrst dedovanja zgoraj navedenih.
Opomba: Vrsta podprtega dedovanja je odvisna od jezika. Na primer, Java ne podpira večkratnega dedovanja.
19. Kaj je vmesnik?
Edinstveni tip razreda, znan kot vmesnik, vsebuje metode, ne pa tudi njihovih definicij. Znotraj vmesnika je dovoljena samo deklaracija metode. Z vmesnikom ne morete izdelovati predmetov. Namesto tega morate uporabiti ta vmesnik in določiti postopke za to.
20. Kako se abstraktni razred razlikuje od vmesnika?
Tako abstraktni razredi kot vmesniki so posebni tipi razredov, ki vključujejo le deklaracijo metod, ne pa njihove implementacije. Vendar se abstraktni razred popolnoma razlikuje od vmesnika. Sledi nekaj večjih razlik med abstraktnim razredom in vmesnikom.
Abstraktni razred | Vmesnik |
|---|---|
| Ko je abstraktni razred podedovan, podrazredu ni treba predložiti definicije abstraktne metode, dokler je podrazred dejansko ne uporabi. | Ko je vmesnik implementiran, mora podrazred določiti vse metode vmesnika in njihovo implementacijo. |
| Razred, ki je abstrakten, ima lahko abstraktne in neabstraktne metode. | Vmesnik ima lahko samo abstraktne metode. |
| Abstraktni razred ima lahko končne, nekončne, statične in nestatične spremenljivke. | Vmesnik ima samo statične in končne spremenljivke. |
| Abstraktni razred ne podpira večkratnega dedovanja. | Vmesnik podpira večkratno dedovanje. |
21. Koliko pomnilnika zasede razred?
Razredi ne uporabljajo pomnilnika. Služijo le kot šablona, iz katere se izdelujejo predmeti. Zdaj objekti dejansko inicializirajo člane razreda in metode, ko so ustvarjeni, pri tem pa uporabljajo pomnilnik.
22. Ali je vedno treba ustvariti objekte iz razreda?
št. Če osnovni razred vključuje nestatične metode, je treba zgraditi objekt. Vendar ni treba generirati nobenih objektov, če razred vključuje statične metode. V tem primeru lahko uporabite ime razreda za neposreden klic teh statičnih metod.
23. Kakšna je razlika med strukturo in razredom v C++?
Struktura je tudi uporabniško definiran podatkovni tip v C++, podoben razredu z naslednjimi razlikami:
- Glavna razlika med strukturo in razredom je, da so v strukturi člani privzeto nastavljeni kot javni, medtem ko so v razredu člani privzeto zasebni.
- Druga razlika je, da uporabljamo struct za razglasitev strukture in razred za deklariranje razreda v C++.
24. Kaj je Constructor?
Konstruktor je blok kode, ki inicializira novo ustvarjeni objekt. Konstruktor je podoben metodi primerka, vendar ni metoda, saj nima vrnjenega tipa. Na splošno gre za metodo, ki ima isto ime kot razred, vendar se lahko v nekaterih jezikih razlikuje. Na primer:
V pythonu je konstruktor poimenovan __vroče__.
V C++ in Javi je konstruktor poimenovan enako kot ime razreda.
primer:
C++ class base { public: base() { cout << 'This is a constructor'; } }> Java class base { base() { System.out.printIn('This is a constructor'); } }> Python class base: def __init__(self): print('This is a constructor')> 25. Katere so različne vrste konstruktorjev v C++?
Najpogostejša klasifikacija konstruktorjev vključuje:
- Privzeti konstruktor
- Neparametrizirani konstruktor
- Parametriziran konstruktor
- Konstruktor Kopiraj
1. Privzeti konstruktor
Privzeti konstruktor je konstruktor, ki ne sprejema nobenih argumentov. Je neparametriziran konstruktor, ki ga samodejno definira prevajalnik, če ni podane eksplicitne definicije konstruktorja.
Podatkovne člane inicializira na privzete vrednosti.
2. Neparametrizirani konstruktor
Je uporabniško definiran konstruktor brez argumentov ali parametrov.
primer:
C++ class base { base() { cout << 'This is a non-parameterized contructor'; } }> Java class base { base() { System.out.printIn( 'This is a non-parameterized constructor.'); } }> Python class base: def __init__(self): print('This is a non-parameterized constructor')> 3. Parametrizirani konstruktor
Konstruktorji, ki sprejmejo nekaj argumentov, so znani kot parametrirani konstruktorji.
primer:
class base { public: int base; base(int var) { cout << 'Constructor with argument: ' << var; } };> Java class base { int base; base(int a) { System.out.println('Constructor with argument: ' + a); } }> Python class base: def __init__(self, a): print('Constructor with argument: {}'.format(a))> 4. Konstruktor Kopiraj
Konstruktor kopiranja je funkcija članica, ki inicializira objekt z uporabo drugega objekta istega razreda.
primer:
C++ class base { int a, b; base(base& obj) // copy constructor { a = obj.a; b = obj.b; } }> Java class base { int a, b; base(base obj) // copy constructor { a = obj.a; b = obj.b; } }>
V Pythonu nimamo vgrajenih konstruktorjev kopiranja, kot sta Java in C++, lahko pa se rešimo z različnimi metodami.
26. Kaj je destruktor?
Destructor je metoda, ki se samodejno pokliče, ko je predmet izključen ali uničen.
V C++ je tudi ime destruktorja enako imenu razreda, vendar z ( ~ ) simbol tilde kot predpono.
V Pythonu je destruktor poimenovan __od__ .
primer:
C++ class base { public: ~base() { cout << 'This is a destructor'; } }> Python class base: def __del__(self): print('This is destructor')>
V Javi zbiralnik smeti samodejno izbriše neuporabne objekte, zato v Javi ni koncepta destruktorja. Lahko bi uporabili metodo finalize() kot rešitev za destruktor java, vendar je tudi zastarela od Jave 9.
27. Ali lahko preobremenimo konstruktor v razredu?
Da Konstruktor lahko preobremenimo v razredu v Javi. Preobremenitev konstruktorja se izvede, ko želimo konstruktor z drugačnim konstruktorjem z drugačnim parametrom (število in vrsto).
28. Ali lahko preobremenimo destruktor v razredu?
Ne. Destruktorja ni mogoče preobremeniti v razredu. V razredu je lahko prisoten samo en destruktor.
29. Kaj je virtualna funkcija?
Navidezna funkcija je funkcija, ki se uporablja za preglasitev metode nadrejenega razreda v izpeljanem razredu. Uporablja se za zagotavljanje abstrakcije v razredu.
V C++ je navidezna funkcija deklarirana s ključno besedo virtual,
V Javi je vsaka javna, nestatična in nekončna metoda navidezna funkcija.
Metode Python so vedno virtualne.
primer:
C++ class base { virtual void print() { cout << 'This is a virtual function'; } }> Java class base { void func() { System.out.printIn('This is a virtual function') } }> Python class base: def func(self): print('This is a virtual function')> 30. Kaj je čista virtualna funkcija?
Čista virtualna funkcija, znana tudi kot abstraktna funkcija, je funkcija članica, ki ne vsebuje nobenih stavkov. Ta funkcija je po potrebi definirana v izpeljanem razredu.
primer:
C++ class base { virtual void pureVirFunc() = 0; }> Java abstract class base { abstract void prVirFunc(); }>
V Pythonu to dosežemo z uporabo @abstractmethod iz modula ABC (Abstract Base Class).
Bonus vprašanje
Kaj je abstraktni razred?
Na splošno je abstraktni razred razred, ki naj bi se uporabljal za dedovanje. Ni ga mogoče instancirati. Abstraktni razred je lahko sestavljen iz abstraktnih in neabstraktnih metod.
V C++ je abstraktni razred razred, ki vsebuje vsaj eno čisto virtualno funkcijo.
V Javi je abstraktni razred deklariran z povzetek ključna beseda.
primer:
C++ class absClass { public: virtual void pvFunc() = 0; }> Java abstract class absClass { // body }>
V Pythonu uporabljamo modul ABC (Abstract Base Class) za ustvarjanje abstraktnega razreda.
Obvezno sklicevanje:
- OOP v C++
- OOP v Javi
- OOP v Pythonu
- Razredi in objekti v C++
- Razredi in objekti v Javi
- Razredi in objekti v Pythonu
- Uvod v programske paradigme
- Vmesnik v Javi
- Abstraktni razred v Javi
- Vprašanja za intervju za C++