Objektovo orientované programovanie alebo OOP je programovacia paradigma, ktorá implementuje koncept predmety v programe. Jeho cieľom je poskytnúť jednoduchšie riešenie problémov reálneho sveta implementáciou entít reálneho sveta, ako je dedičnosť, abstrakcia, polymorfizmus atď. Koncept OOPs je široko používaný v mnohých populárnych jazykoch ako Java, Python, C++ atď.

OOPs je tiež jednou z najdôležitejších tém pre programátorské rozhovory. Tento článok obsahuje niektoré hlavné otázky na pohovore o koncepte OOPs.
Otázky na pohovor OOPs
1. Čo je objektovo orientované programovanie (OOP)?
O bject O riented P programovanie (tiež známy ako OOP) je programovacia paradigma, kde kompletný softvér funguje ako skupina objektov, ktoré spolu hovoria. Objekt je súbor údajov a metód, ktoré s týmito údajmi pracujú.
2. Prečo OOP?
Hlavnou výhodou OOP je lepšie spravovateľný kód, ktorý pokrýva nasledovné:
- Celkové porozumenie softvéru sa zvyšuje so vzdialenosťou medzi jazykom, ktorým hovoria vývojári, a jazykom, ktorým hovoria používatelia.
- Orientácia objektu uľahčuje údržbu použitím zapuzdrenia. Základnú reprezentáciu možno ľahko zmeniť tým, že metódy ponecháme rovnaké.
- Paradigma OOPs je užitočná hlavne pre relatívne veľký softvér.
3. Čo je to trieda?
A trieda je stavebným kameňom objektovo orientovaných programov. Je to užívateľom definovaný dátový typ, ktorý obsahuje dátové členy a členské funkcie, ktoré pracujú s dátovými členmi. Je to ako plán alebo šablóna objektov, ktoré majú spoločné vlastnosti a metódy.
4. Čo je objekt?
An objekt je inštanciou triedy. Dátové členy a metódy triedy nemožno použiť priamo. Aby sme ich mohli používať, musíme vytvoriť objekt (alebo inštanciu) triedy. Jednoducho povedané, sú to skutočné svetové entity, ktoré majú stav a správanie.
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); } }> Výkon
student1.name: Rahul>
5. Aké sú hlavné črty OOP?
Hlavným rysom OOP, tiež známym ako 4 piliere alebo základné princípy OOP, sú nasledovné:
- Zapuzdrenie
- Abstrakcia údajov
- Polymorfizmus
- Dedičnosť

Hlavné funkcie OOPs
6. Čo je zapuzdrenie?
Zapuzdrenie je spojenie údajov a metód, ktoré s nimi manipulujú, do jedného celku tak, aby boli citlivé údaje pred používateľmi skryté.
Implementuje sa ako procesy uvedené nižšie:
- Skrytie údajov: Jazyková funkcia na obmedzenie prístupu k členom objektu. Napríklad súkromní a chránení členovia v C++.
- Spájanie údajov a metód: Údaje a metódy, ktoré s týmito údajmi pracujú, sú spojené. Napríklad dátové členy a členské metódy, ktoré s nimi pracujú, sú zabalené do jednej jednotky známej ako trieda.

7. Čo je abstrakcia?
Abstrakcia je podobná zapuzdreniu dát a je veľmi dôležitá v OOP. Znamená to zobraziť len potrebné informácie a ostatné nepodstatné informácie pred používateľom skryť. Abstrakcia sa realizuje pomocou tried a rozhraní.

8. Čo je polymorfizmus?
Slovo Polymorfizmus znamená mať mnoho podôb. Je vlastnosťou niektorého kódu správať sa odlišne pre rôzne kontexty. Napríklad v jazyku C++ môžeme definovať viacero funkcií, ktoré majú rovnaký názov, ale rôzne fungujú v závislosti od kontextu.
Polymorfizmus možno klasifikovať do dvoch typov na základe času, kedy je vyriešené volanie objektu alebo funkcie. Sú nasledovné:
- Polymorfizmus času kompilácie
- Runtime Polymorfizmus
A) Polymorfizmus v čase kompilácie
Polymorfizmus v čase kompilácie, tiež známy ako statický polymorfizmus alebo skorá väzba, je typ polymorfizmu, pri ktorom sa spojenie volania s jeho kódom uskutočňuje v čase kompilácie. Preťaženie metódy alebo preťaženie operátora sú príklady polymorfizmu v čase kompilácie.
B) Polymorfizmus za behu
Tiež známy ako dynamický polymorfizmus alebo neskorá väzba, runtime polymorfizmus je typ polymorfizmu, kde sa skutočná implementácia funkcie určuje počas behu alebo vykonávania. Prepísanie metódy je príkladom tejto metódy.
9. Čo je dedičnosť? Aký je jeho účel?
Myšlienka dedičnosti je jednoduchá, trieda je odvodená od inej triedy a využíva údaje a implementáciu tejto inej triedy. Trieda, ktorá je odvodená, sa nazýva podriadená alebo odvodená alebo podtrieda a trieda, z ktorej je odvodená podradená trieda, sa nazýva rodičovská alebo základná alebo nadtrieda.
Hlavným účelom dedičnosti je zvýšiť znovupoužiteľnosť kódu. Používa sa tiež na dosiahnutie Runtime Polymorphism.
10. Čo sú špecifikátory prístupu? Aký je ich význam v OOP?
Špecifikátory prístupu sú špeciálne typy kľúčových slov, ktoré sa používajú na špecifikovanie alebo riadenie dostupnosti entít, ako sú triedy, metódy atď. Súkromné , Verejné , a Chránené sú príklady špecifikátorov prístupu alebo modifikátorov prístupu.
Kľúčové komponenty OOP, zapuzdrenie a skrytie údajov, sa vo veľkej miere dosahujú vďaka týmto špecifikátorom prístupu.
11. Aké sú výhody a nevýhody OOP?
Výhody OOP | Nevýhody OOP porovnateľné rozhranie v jazyku Java |
|---|---|
| OOPs poskytuje rozšírenú opätovnú použiteľnosť kódu. | Programátor by mal byť dobre zručný a mal by mať vynikajúce myslenie, pokiaľ ide o objekty, pretože všetko sa v OOP považuje za objekt. |
| Kód sa ľahšie udržiava a aktualizuje. | Vyžaduje sa správne plánovanie, pretože OOP je trochu zložitejšie. |
| Poskytuje lepšiu bezpečnosť údajov obmedzením prístupu k údajom a predchádzaním zbytočnému vystaveniu. | Koncept OOPs nie je vhodný pre všetky druhy problémov. |
| Rýchla implementácia a jednoduchá zmena dizajnu, čo vedie k minimalizácii zložitosti celkového programu. | Dĺžka programov je oveľa väčšia v porovnaní s procedurálnym prístupom. |
12. Aké ďalšie paradigmy programovania existujú okrem OOP?
Programovacia paradigma sa vzťahuje na techniku alebo prístup písania programu. Programovacie paradigmy možno rozdeliť do nasledujúcich typov:

1. Paradigma imperatívneho programovania
Ide o programovaciu paradigmu, ktorá funguje na základe zmeny stavu programu prostredníctvom príkazov priradenia. Hlavným zameraním tejto paradigmy je spôsob dosiahnutia cieľa. Do tejto kategórie patria nasledujúce programovacie paradigmy:
- Paradigma procedurálneho programovania : Táto programovacia paradigma je založená na koncepte volania procedúr. Procedúry, tiež známe ako rutiny alebo funkcie, sú základnými stavebnými kameňmi programu v tejto paradigme.
- Objektovo orientované programovanie alebo OOP : V tejto paradigme vizualizujeme každú entitu ako objekt a snažíme sa štruktúrovať program na základe stavu a správania tohto objektu.
- Paralelné programovanie : Paradigma paralelného programovania je spracovanie inštrukcií ich rozdelením na viacero menších častí a ich súbežným vykonávaním.
2. Paradigma deklaratívneho programovania
Deklaratívne programovanie sa zameriava skôr na to, čo sa má vykonať, než na to, ako by sa to malo vykonať. V tejto paradigme vyjadrujeme logiku výpočtu bez ohľadu na tok riadenia. Deklaratívnu paradigmu možno ďalej rozdeliť na:
- Paradigma logického programovania : Je založený na formálnej logike, kde programové vyhlásenia vyjadrujú fakty a pravidlá o probléme v logickej forme.
- Paradigma funkčného programovania : Programy sa vytvárajú aplikáciou a skladaním funkcií v tejto paradigme.
- Paradigma programovania databáz : Na správu údajov a informácií organizovaných ako polia, záznamy a súbory sa používajú databázové programovacie modely.
13. Aký je rozdiel medzi štruktúrovaným programovaním a objektovo orientovaným programovaním?
Štruktúrované programovanie je technika, ktorá sa považuje za predchodcu OOP a zvyčajne pozostáva z dobre štruktúrovaných a oddelených modulov. Je to podmnožina procedurálneho programovania. Rozdiel medzi OOP a štruktúrovaným programovaním je nasledovný:
Objektovo orientované programovanie | Štrukturálne programovanie |
|---|---|
| Objektovo orientované programovanie je postavené na objektoch, ktoré majú stav a správanie. | Logickú štruktúru programu poskytuje štrukturálne programovanie, ktoré rozdeľuje programy na zodpovedajúce funkcie. |
| Dodržiava prístup zdola nahor. | Dodržiava prístup zhora nadol. |
| Obmedzuje otvorený tok údajov na autorizované časti, ktoré poskytujú len lepšiu bezpečnosť údajov. | Žiadne obmedzenie toku údajov. K údajom má prístup ktokoľvek. |
| Vylepšená opätovná použiteľnosť kódu vďaka konceptom polymorfizmu a dedičnosti. | Opätovná použiteľnosť kódu sa dosahuje pomocou funkcií a slučiek. |
| V tomto sú metódy písané globálne a kódové riadky sú spracovávané jeden po druhom, t.j. spúšťajú sa postupne. | V tomto metóda funguje dynamicky a volá podľa potreby kódu na určitý čas. |
| Úprava a aktualizácia kódu je jednoduchšia. | Úprava kódu je v porovnaní s OOP náročná. |
| Dátam sa prikladá väčší význam v OOP. | Kódu sa prikladá väčší význam. |
14. Aké sú niektoré bežne používané objektovo orientované programovacie jazyky?
Paradigma OOPs je jednou z najpopulárnejších paradigiem programovania. Je široko používaný v mnohých populárnych programovacích jazykoch, ako sú:
- C++
- Java
- Python
- Javascript
- C#
- Ruby
15. Aké sú rôzne typy polymorfizmu?
Polymorfizmus možno klasifikovať do dvoch typov na základe času, kedy je vyriešené volanie objektu alebo funkcie. Sú nasledovné:
- Polymorfizmus času kompilácie
- Polymorfizmus za behu

Typy polymorfizmu
dhl znamená čo
A) Polymorfizmus v čase kompilácie
Polymorfizmus v čase kompilácie, tiež známy ako statický polymorfizmus alebo skorá väzba, je typ polymorfizmu, pri ktorom sa spojenie volania s jeho kódom uskutočňuje v čase kompilácie. Preťaženie metódy alebo preťaženie operátora sú príklady polymorfizmu v čase kompilácie.
B) Polymorfizmus za behu
Taktiež známy ako dynamický polymorfizmus alebo neskorá väzba, runtime polymorfizmus je typ polymorfizmu, kde sa skutočná implementácia funkcie určuje počas behu alebo vykonávania. Prepísanie metódy je príkladom tejto metódy.
16. Aký je rozdiel medzi preťažením a preradením?
Funkcia polymorfizmu v čase kompilácie tzv preťaženie umožňuje entite mať viacero implementácií s rovnakým názvom. Preťaženie metódy a preťaženie operátora sú dva príklady.
Prvoradé je forma runtime polymorfizmu, kde sa vykonáva entita s rovnakým názvom, ale odlišnou implementáciou. Realizuje sa pomocou virtuálnych funkcií.
17. Existujú nejaké obmedzenia týkajúce sa dedenia?
Áno, je viac výziev, keď máte väčšiu autoritu. Hoci je dedičnosť veľmi silnou vlastnosťou OOP, má aj značné nevýhody.
- Keďže na implementáciu musí prejsť niekoľkými triedami, spracovanie dedičnosti trvá dlhšie.
- Základná trieda a detská trieda, ktoré sú obe zapojené do dedenia, sú tiež navzájom úzko spojené (nazývané pevne spojené). Preto, ak je potrebné vykonať zmeny, možno ich bude potrebné vykonať v oboch triedach súčasne.
- Implementácia dedičstva môže byť tiež náročná. Preto, ak sa neimplementuje správne, môže to viesť k nepredvídaným chybám alebo nepresným výstupom.
18. Aké rôzne druhy dedičstva existujú?
Dedičnosť možno rozdeliť do 5 typov, ktoré sú nasledovné:

- Jediné dedičstvo: Podradená trieda odvodená priamo od základnej triedy
- Viacnásobné dedičstvo: Podradená trieda odvodená z viacerých základných tried.
- Viacúrovňová dedičnosť: Podradená trieda odvodená od triedy, ktorá je tiež odvodená od inej základnej triedy.
- Hierarchická dedičnosť: Viacero podradených tried odvodených z jednej základnej triedy.
- Hybridná dedičnosť: Dedičstvo pozostávajúce z viacerých typov dedenia vyššie uvedených.
Poznámka: Typ podporovaného dedenia závisí od jazyka. Java napríklad nepodporuje viacnásobnú dedičnosť.
19. Čo je rozhranie?
Jedinečný typ triedy známy ako rozhranie obsahuje metódy, ale nie ich definície. V rámci rozhrania je povolená iba deklarácia metódy. Objekty nemôžete vytvárať pomocou rozhrania. Namiesto toho musíte použiť toto rozhranie a špecifikovať postupy, ako to urobiť.
20. Ako sa abstraktná trieda líši od rozhrania?
Abstraktné triedy aj rozhrania sú špeciálne typy tried, ktoré obsahujú iba deklaráciu metód, nie ich implementáciu. Abstraktná trieda je však úplne odlišná od rozhrania. Nasleduje niekoľko hlavných rozdielov medzi abstraktnou triedou a rozhraním.
Abstraktná trieda | Rozhranie |
|---|---|
| Keď sa však abstraktná trieda zdedí, podtrieda nemusí poskytnúť definíciu abstraktnej metódy, kým a pokiaľ ju podtrieda skutočne nepoužíva. | Keď je implementované rozhranie, podtrieda musí špecifikovať všetky metódy rozhrania, ako aj ich implementáciu. |
| Trieda, ktorá je abstraktná, môže mať abstraktné aj neabstraktné metódy. | Rozhranie môže mať iba abstraktné metódy. |
| Abstraktná trieda môže mať konečné, nefinálne, statické a nestatické premenné. | Rozhranie má iba statické a konečné premenné. |
| Abstraktná trieda nepodporuje viacnásobné dedenie. | Rozhranie podporuje viacnásobné dedičstvo. |
21. Koľko pamäte zaberá trieda?
Triedy nepoužívajú pamäť. Slúžia len ako šablóna, z ktorej sa vyrábajú predmety. Teraz objekty v skutočnosti inicializujú členov triedy a metódy, keď sú vytvorené, pomocou pamäte v procese.
22. Je vždy potrebné vytvárať objekty z triedy?
Nie Ak základná trieda obsahuje nestatické metódy, musí byť skonštruovaný objekt. Ak však trieda obsahuje statické metódy, nie je potrebné generovať žiadne objekty. V tomto prípade môžete použiť názov triedy na priame volanie týchto statických metód.
23. Aký je rozdiel medzi štruktúrou a triedou v C++?
Štruktúra je tiež užívateľsky definovaný dátový typ v C++ podobný triede s nasledujúcimi rozdielmi:
- Hlavný rozdiel medzi štruktúrou a triedou je v tom, že v štruktúre sú členovia štandardne nastavení na verejné, zatiaľ čo v triede sú členovia štandardne privátni.
- Ďalším rozdielom je, že používame štrukturovať na deklarovanie štruktúry a trieda na deklarovanie triedy v C++.
24. Čo je Constructor?
Konštruktor je blok kódu, ktorý inicializuje novovytvorený objekt. Konštruktor sa podobá metóde inštancie, ale nie je to metóda, pretože nemá návratový typ. Vo všeobecnosti je to metóda s rovnakým názvom ako trieda, ale v niektorých jazykoch sa môže líšiť. Napríklad:
V pythone je pomenovaný konštruktor __horúce__.
V C++ a Java je konštruktor pomenovaný rovnako ako názov triedy.
Príklad:
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. Aké sú rôzne typy konštruktorov v C++?
Najbežnejšia klasifikácia konštruktérov zahŕňa:
- Predvolený konštruktor
- Neparametrizovaný konštruktor
- Parametrizovaný konštruktor
- Kopírovať konštruktor
1. Predvolený konštruktor
Predvolený konštruktor je konštruktor, ktorý neberie žiadne argumenty. Je to neparametrizovaný konštruktor, ktorý je automaticky definovaný kompilátorom, keď nie je poskytnutá žiadna explicitná definícia konštruktora.
Inicializuje dátové členy na ich predvolené hodnoty.
2. Neparametrizovaný konštruktor
Je to užívateľom definovaný konštruktor, ktorý nemá žiadne argumenty ani parametre.
Príklad:
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. Parametrizovaný konštruktor
Konštruktory, ktoré preberajú niektoré argumenty, sú známe ako parametrizované konštruktory.
Príklad:
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. Kopírovať konštruktor
Kopírovací konštruktor je členská funkcia, ktorá inicializuje objekt pomocou iného objektu rovnakej triedy.
Príklad:
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 Pythone nemáme vstavané kopírovacie konštruktory ako Java a C++, ale môžeme to vyriešiť pomocou rôznych metód.
26. Čo je to deštruktor?
Deštruktor je metóda, ktorá sa automaticky volá, keď je objekt vytvorený z rozsahu alebo zničený.
java swing tutoriál
V C++ je názov deštruktora rovnaký ako názov triedy, ale s ( ~ ) symbol tildy ako predpona.
V Pythone je deštruktor pomenovaný __z__ .
Príklad:
C++ class base { public: ~base() { cout << 'This is a destructor'; } }> Python class base: def __del__(self): print('This is destructor')>
V Jave zberač odpadu automaticky vymaže nepotrebné objekty, takže v Jave neexistuje koncept deštruktora. Ako riešenie pre java deštruktor sme mohli použiť metódu finalize(), ale od Java 9 je tiež zastaraná.
27. Môžeme preťažiť konštruktor v triede?
Áno Môžeme preťažiť konštruktor v triede v jazyku Java. Preťaženie konštruktora sa vykonáva, keď chceme konštruktor s iným konštruktorom s iným parametrom (číslo a typ).
28. Môžeme preťažiť deštruktor v triede?
Nie. Deštruktor nemôže byť v triede preťažený. V triede môže byť prítomný iba jeden deštruktor.
29. Čo je to virtuálna funkcia?
Virtuálna funkcia je funkcia, ktorá sa používa na prepísanie metódy nadradenej triedy v odvodenej triede. Používa sa na poskytovanie abstrakcie v triede.
V C++ je virtuálna funkcia deklarovaná pomocou kľúčového slova virtual,
V Jave je každá verejná, nestatická a nefinálna metóda virtuálnou funkciou.
Metódy Pythonu sú vždy virtuálne.
Príklad:
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. Čo je čistá virtuálna funkcia?
Čistá virtuálna funkcia, známa aj ako abstraktná funkcia, je členská funkcia, ktorá neobsahuje žiadne príkazy. Táto funkcia je v prípade potreby definovaná v odvodenej triede.
Príklad:
C++ class base { virtual void pureVirFunc() = 0; }> Java abstract class base { abstract void prVirFunc(); }>
V Pythone to dosiahneme pomocou @abstractmethod z modulu ABC (Abstract Base Class).
Bonusová otázka
Čo je abstraktná trieda?
Vo všeobecnosti je abstraktná trieda trieda, ktorá je určená na použitie pri dedení. Nedá sa vytvoriť inštancia. Abstraktná trieda môže pozostávať z abstraktných aj neabstraktných metód.
V C++ je abstraktná trieda trieda, ktorá obsahuje aspoň jednu čisto virtuálnu funkciu.
V jazyku Java je abstraktná trieda deklarovaná s a abstraktné kľúčové slovo.
Príklad:
C++ class absClass { public: virtual void pvFunc() = 0; }> Java abstract class absClass { // body }>
V Pythone používame modul ABC (Abstract Base Class) na vytvorenie abstraktnej triedy.
Musí odkazovať:
- OOP v C++
- OOP v jazyku Java
- OOP v Pythone
- Triedy a objekty v C++
- Triedy a objekty v Jave
- Triedy a objekty v Pythone
- Úvod do programovacích paradigiem
- Rozhranie v jazyku Java
- Abstraktná trieda v jazyku Java
- Otázky na pohovor v C++