Objektinis programavimas arba OOP yra programavimo paradigma, įgyvendinanti koncepciją objektų programoje. Juo siekiama pateikti lengvesnį realaus pasaulio problemų sprendimą, programuojant įdiegiant realaus pasaulio esybes, tokias kaip paveldėjimas, abstrakcija, polimorfizmas ir kt. OOP koncepcija plačiai naudojama daugelyje populiarių kalbų, tokių kaip Java, Python, C++ ir kt.

OOP taip pat yra viena iš svarbiausių programavimo interviu temų. Šiame straipsnyje yra keletas populiariausi interviu klausimai apie OOP koncepciją.
OOPs interviu klausimai
1. Kas yra objektinis programavimas (OOP)?
O objektas O orientuotas P programavimas (taip pat žinomas kaip OOP) yra programavimo paradigma, kai visa programinė įranga veikia kaip objektų, kalbančių tarpusavyje, krūva. Objektas yra duomenų rinkinys ir metodai, kurie veikia tuos duomenis.
2. Kodėl OOP?
Pagrindinis OOP pranašumas yra geriau valdomas kodas, apimantis šiuos dalykus:
- Bendras programinės įrangos supratimas didėja, nes atstumas tarp kalbos, kuria kalba kūrėjai, ir tos, kuria kalba vartotojai.
- Objekto orientacija palengvina priežiūrą naudojant kapsuliavimą. Galima nesunkiai pakeisti pagrindinį vaizdavimą, išlaikant tokius pačius metodus.
- OOP paradigma daugiausia naudinga santykinai didelei programinei įrangai.
3. Kas yra klasė?
A klasė yra objektinių programų elementas. Tai vartotojo apibrėžtas duomenų tipas, kuriame yra duomenų nariai ir narių funkcijos, veikiančios su duomenų nariais. Tai tarsi objektų, turinčių bendras savybes ir metodus, projektas arba šablonas.
4. Kas yra objektas?
An objektas yra klasės pavyzdys. Klasės duomenų nariai ir metodai negali būti naudojami tiesiogiai. Norėdami juos naudoti, turime sukurti klasės objektą (arba egzempliorių). Paprastai tariant, jie yra tikrosios pasaulio būtybės, turinčios būseną ir elgesį.
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); } }> Išvestis
student1.name: Rahul>
5. Kokios yra pagrindinės OOP savybės?
Pagrindinė OOP, dar vadinama 4 ramsčiais arba pagrindiniais OOP principais, ypatybė yra tokia:
- Inkapsuliavimas
- Duomenų abstrakcija
- Polimorfizmas
- Paveldėjimas

Pagrindinės OOP savybės
6. Kas yra Inkapsuliavimas?
Inkapsuliavimas yra duomenų ir metodų, kuriais jie manipuliuojami, sujungimas į vieną vienetą, kad neskelbtini duomenys būtų paslėpti nuo vartotojų.
Jis įgyvendinamas pagal toliau nurodytus procesus:
- Duomenų slėpimas: Kalbos funkcija, apribojanti prieigą prie objekto narių. Pavyzdžiui, privatūs ir apsaugoti nariai C++.
- Duomenų ir metodų sujungimas kartu: Duomenys ir metodai, kurie veikia su tais duomenimis, yra sujungti. Pavyzdžiui, su jais veikiantys duomenų nariai ir narių metodai yra sujungti į vieną vienetą, vadinamą klase.

7. Kas yra abstrakcija?
Abstrakcija yra panaši į duomenų inkapsuliavimą ir yra labai svarbi OOP. Tai reiškia, kad reikia rodyti tik reikiamą informaciją, o kitą nereikšmingą informaciją slėpti nuo vartotojo. Abstrakcija įgyvendinama naudojant klases ir sąsajas.

8. Kas yra polimorfizmas?
Žodis Polimorfizmas reiškia turėti daug formų. Tam tikro kodo savybė skirtinguose kontekstuose elgtis skirtingai. Pavyzdžiui, C++ kalboje galime apibrėžti kelias funkcijas, turinčias tą patį pavadinimą, bet skirtingai veikiančias priklausomai nuo konteksto.
Polimorfizmas gali būti suskirstytas į du tipus pagal laiką, kada išspręstas iškvietimas į objektą arba funkciją. Jie yra tokie:
- Sudarykite laiko polimorfizmą
- Vykdymo laiko polimorfizmas
A) Kompiliavimo laiko polimorfizmas
Kompiliavimo laiko polimorfizmas, taip pat žinomas kaip statinis polimorfizmas arba ankstyvas susiejimas, yra polimorfizmo tipas, kai iškvietimas susiejamas su jo kodu kompiliavimo metu. Metodo perkrova arba operatoriaus perkrova yra kompiliavimo laiko polimorfizmo pavyzdžiai.
B) Vykdymo laiko polimorfizmas
Taip pat žinomas kaip dinaminis polimorfizmas arba vėlyvas susiejimas, vykdymo laiko polimorfizmas yra polimorfizmo tipas, kai tikrasis funkcijos įgyvendinimas nustatomas vykdymo ar vykdymo metu. Metodo nepaisymas yra šio metodo pavyzdys.
9. Kas yra paveldėjimas? Koks jo tikslas?
Paveldėjimo idėja yra paprasta, klasė yra kilusi iš kitos klasės ir naudoja tos kitos klasės duomenis bei įgyvendinimą. Išvestinė klasė vadinama antriniu arba išvestiniu, arba poklasiu, o klasė, iš kurios gaunama antrinė klasė, vadinama pirmine, bazine arba superklase.
Pagrindinis paveldėjimo tikslas yra padidinti kodo pakartotinį naudojimą. Jis taip pat naudojamas vykdymo laiko polimorfizmui pasiekti.
10. Kas yra prieigos specifikatoriai? Kokia jų reikšmė OOP?
Prieigos specifikacijos yra specialūs raktinių žodžių tipai, naudojami objektų, pvz., klasių, metodų ir pan., pasiekiamumui nurodyti arba valdyti. Privatus , Viešas , ir Apsaugotas yra prieigos specifikatorių arba prieigos modifikatorių pavyzdžiai.
Pagrindiniai OOP komponentai, inkapsuliavimas ir duomenų slėpimas, iš esmės pasiekiami dėl šių prieigos specifikacijų.
java eilutė isempty
11. Kokie yra OOP privalumai ir trūkumai?
OOP privalumai | OOP trūkumai |
|---|---|
| OOP suteikia patobulintą kodo pakartotinį naudojimą. | Programuotojas turi būti gerai kvalifikuotas ir puikiai mąstyti apie objektus, nes OOP viskas traktuojama kaip objektas. |
| Kodą lengviau prižiūrėti ir atnaujinti. | Reikia tinkamai planuoti, nes OOP yra šiek tiek sudėtinga. |
| Tai užtikrina geresnį duomenų saugumą, nes riboja prieigą prie duomenų ir išvengiama nereikalingo poveikio. | OOPs koncepcija netinka visų rūšių problemoms spręsti. |
| Greitai įgyvendinamas ir lengvai perkuriamas, todėl visos programos sudėtingumas sumažinamas iki minimumo. | Programų trukmė yra daug didesnė, palyginti su procedūriniu požiūriu. |
12. Kokios dar programavimo paradigmos egzistuoja be OOP?
Programavimo paradigma yra susijusi su programos rašymo technika arba požiūriu. Programavimo paradigmas galima suskirstyti į šiuos tipus:

1. Imperatyvaus programavimo paradigma
Tai programavimo paradigma, kuri veikia keičiant programos būseną priskyrimo sakiniais. Šioje paradigmoje pagrindinis dėmesys skiriamas tam, kaip pasiekti tikslą. Šiai kategorijai priskiriamos šios programavimo paradigmos:
- Procedūrinio programavimo paradigma : Ši programavimo paradigma yra pagrįsta procedūros iškvietimo koncepcija. Procedūros, taip pat žinomos kaip rutina arba funkcijos, yra pagrindiniai šios paradigmos programos elementai.
- Objektinis programavimas arba OOP : Šioje paradigmoje mes vizualizuojame kiekvieną esybę kaip objektą ir bandome struktūrizuoti programą pagal to objekto būseną ir elgesį.
- Lygiagretusis Programavimas : Lygiagretus programavimo paradigma yra instrukcijų apdorojimas, padalijant jas į kelias mažesnes dalis ir vykdant jas vienu metu.
2. Deklaratyvaus programavimo paradigma
Deklaratyvus programavimas sutelkia dėmesį į tai, kas turi būti vykdoma, o ne į tai, kaip tai turėtų būti vykdoma. Šioje paradigmoje mes išreiškiame skaičiavimo logiką neatsižvelgdami į jo valdymo srautą. Deklaracinė paradigma gali būti toliau skirstoma į:
- Loginio programavimo paradigma : Jis pagrįstas formalia logika, kai programos teiginiai išreiškia faktus ir taisykles apie problemą logine forma.
- Funkcinio programavimo paradigma : Programos kuriamos taikant ir sudarant funkcijas šioje paradigmoje.
- Duomenų bazių programavimo paradigma : Duomenims ir informacijai, suskirstytiems į laukus, įrašus ir failus, tvarkyti naudojami duomenų bazių programavimo modeliai.
13. Kuo skiriasi struktūrinis programavimas nuo objektinio programavimo?
Struktūrinis programavimas yra metodas, kuris laikomas OOP pirmtaku ir paprastai susideda iš gerai struktūruotų ir atskirtų modulių. Tai yra procedūrinio programavimo pogrupis. Skirtumas tarp OOP ir struktūrinio programavimo yra toks:
Objektinis programavimas | Struktūrinis programavimas |
|---|---|
| Programavimas, kuris yra orientuotas į objektą, yra pagrįstas objektais, turinčiais būseną ir elgesį. | Programos loginę struktūrą suteikia struktūrinis programavimas, kuris suskirsto programas į atitinkamas funkcijas. |
| Taikant metodą „iš apačios į viršų“. | Taikomas metodas „iš viršaus į apačią“. |
| Apriboja atvirą duomenų srautą tik įgaliotoms dalims, kad būtų užtikrinta geresnė duomenų apsauga. | Duomenų srauto apribojimų nėra. Kiekvienas gali pasiekti duomenis. |
| Patobulintas kodo pakartotinis naudojimas dėl polimorfizmo ir paveldėjimo sąvokų. | Kodo pakartotinis naudojimas pasiekiamas naudojant funkcijas ir kilpas. |
| Čia metodai rašomi globaliai, o kodo eilutės apdorojamos po vieną, ty paleisti nuosekliai. | Šiuo atveju metodas veikia dinamiškai, skambindamas pagal kodo poreikį tam tikrą laiką. |
| Modifikuoti ir atnaujinti kodą yra lengviau. | Palyginti su OOP, kodo modifikavimas yra sudėtingas. |
| OOP duomenims suteikiama didesnė reikšmė. | Kodui suteikiama didesnė reikšmė. |
14. Kokios yra dažniausiai naudojamos objektinio programavimo kalbos?
OOP paradigma yra viena iš populiariausių programavimo paradigmų. Jis plačiai naudojamas daugelyje populiarių programavimo kalbų, tokių kaip:
- C++
- Java
- Python
- Javascript
- C#
- Rubinas
15. Kokie yra skirtingi polimorfizmo tipai?
Polimorfizmas gali būti suskirstytas į du tipus pagal laiką, kada išspręstas iškvietimas į objektą arba funkciją. Jie yra tokie:
- Sudarykite laiko polimorfizmą
- Vykdymo laiko polimorfizmas

Polimorfizmo rūšys
A) Kompiliavimo laiko polimorfizmas
Kompiliavimo laiko polimorfizmas, taip pat žinomas kaip statinis polimorfizmas arba ankstyvas susiejimas, yra polimorfizmo tipas, kai iškvietimas susiejamas su jo kodu kompiliavimo metu. Metodo perkrova arba operatoriaus perkrova yra kompiliavimo laiko polimorfizmo pavyzdžiai.
B) Vykdymo laiko polimorfizmas
Taip pat žinomas kaip dinaminis polimorfizmas arba vėlyvas susiejimas, vykdymo laiko polimorfizmas yra polimorfizmo tipas, kai tikrasis funkcijos įgyvendinimas nustatomas vykdymo ar vykdymo metu. Metodo viršenybė yra šio metodo pavyzdys.
16. Kuo skiriasi perkrovimas ir nepaisymas?
Kompiliavimo laiko polimorfizmo savybė, vadinama perkrovimas leidžia subjektui turėti daugybę to paties pavadinimo įgyvendinimų. Metodo perkrova ir operatoriaus perkrova yra du pavyzdžiai.
Nepaisymas yra vykdymo laiko polimorfizmo forma, kai vykdomas objektas tuo pačiu pavadinimu, bet skirtingu įgyvendinimu. Jis įgyvendinamas virtualių funkcijų pagalba.
17. Ar yra kokių nors paveldėjimo apribojimų?
taip, yra daugiau iššūkių, kai turi daugiau autoritetų. Nors paveldėjimas yra labai stipri OOP savybė, ji taip pat turi reikšmingų trūkumų.
- Kadangi jis turi praeiti per kelias klases, kad būtų įgyvendintas, paveldėjimo apdorojimas užtrunka ilgiau.
- Pagrindinė klasė ir vaikų klasė, kurios abi užsiima paveldėjimu, taip pat yra glaudžiai susijusios viena su kita (vadinamos glaudžiai susietomis). Todėl, jei reikia atlikti pakeitimus, gali tekti juos atlikti abiejose klasėse vienu metu.
- Paveldėjimo įgyvendinimas taip pat gali būti sudėtingas. Todėl netinkamai įgyvendinus tai gali sukelti nenumatytų klaidų arba netikslių rezultatų.
18. Kokie yra skirtingi paveldėjimo tipai?
Paveldėjimas gali būti suskirstytas į 5 tipus, kurie yra tokie:
dvigubai java

- Vienkartinis paveldėjimas: Vaikų klasė, tiesiogiai kilusi iš bazinės klasės
- Daugkartinis paveldėjimas: Vaikų klasė, gauta iš kelių bazinių klasių.
- Daugiapakopis paveldėjimas: Vaikų klasė, kilusi iš klasės, kuri taip pat yra kilusi iš kitos pagrindinės klasės.
- Hierarchinis paveldėjimas: Kelios antrinės klasės, gautos iš vienos pagrindinės klasės.
- Hibridinis paveldėjimas: Paveldėjimas, susidedantis iš kelių pirmiau nurodytų paveldėjimo tipų.
Pastaba: Palaikomo paveldėjimo tipas priklauso nuo kalbos. Pavyzdžiui, „Java“ nepalaiko daugialypio paveldėjimo.
19. Kas yra sąsaja?
Unikalus klasės tipas, žinomas kaip sąsaja, apima metodus, bet ne jų apibrėžimus. Sąsajos viduje leidžiama tik metodo deklaracija. Negalite kurti objektų naudodami sąsają. Vietoj to turite naudoti tą sąsają ir nurodyti procedūras, kaip tai padaryti.
20. Kuo abstrakčioji klasė skiriasi nuo sąsajos?
Tiek abstrakčios klasės, tiek sąsajos yra specialūs klasių tipai, kuriuose yra tik metodų deklaravimas, o ne jų įgyvendinimas. Vis dėlto abstrakčioji klasė visiškai skiriasi nuo sąsajos. Toliau pateikiami keli pagrindiniai abstrakčios klasės ir sąsajos skirtumai.
Abstrakti klasė | Sąsaja |
|---|---|
| Tačiau kai abstrakčioji klasė yra paveldima, poklasis neprivalo pateikti abstrakčiojo metodo apibrėžimo tol, kol poklasis jo tikrai nenaudoja. | Kai sąsaja yra įdiegta, poklasis turi nurodyti visus sąsajos metodus ir jų įgyvendinimą. |
| Abstrakčioji klasė gali turėti ir abstrakčius, ir neabstrakčius metodus. | Sąsaja gali turėti tik abstrakčius metodus. |
| Abstrakčioji klasė gali turėti galutinius, negalutinius, statinius ir nestatinius kintamuosius. | Sąsaja turi tik statinius ir galutinius kintamuosius. |
| Abstrakčioji klasė nepalaiko daugybinio paveldėjimo. | Sąsaja palaiko daugialypį paveldėjimą. |
21. Kiek atminties užima klasė?
Klasės nenaudoja atminties. Jie yra tik šablonas, iš kurio gaminami daiktai. Dabar objektai iš tikrųjų inicijuoja klasės narius ir metodus, kai jie yra kuriami, naudodami atmintį.
22. Ar visada reikia kurti objektus iš klasės?
Nr. Jei bazinėje klasėje yra nestatiniai metodai, reikia sukurti objektą. Tačiau nereikia generuoti objektų, jei klasėje yra statiniai metodai. Šiuo atveju galite naudoti klasės pavadinimą, kad tiesiogiai iškviestumėte tuos statinius metodus.
23. Kuo skiriasi struktūra ir klasė C++ kalboje?
Struktūra taip pat yra vartotojo apibrėžtas duomenų tipas C++, panašus į klasę su šiais skirtumais:
- Pagrindinis skirtumas tarp struktūros ir klasės yra tas, kad pagal numatytuosius nustatymus struktūroje nariai yra vieši, o klasėje nariai yra privatūs.
- Kitas skirtumas yra tas, kad mes naudojame struktūra deklaruoti struktūrą ir klasė Klasės deklaravimui C++ kalba.
24. Kas yra Konstruktorius?
Konstruktorius yra kodo blokas, kuris inicijuoja naujai sukurtą objektą. Konstruktorius primena egzemplioriaus metodą, bet tai nėra metodas, nes jis neturi grąžinimo tipo. Paprastai tai yra metodas, turintis tą patį pavadinimą kaip ir klasė, tačiau kai kuriomis kalbomis jis gali skirtis. Pavyzdžiui:
Python'e konstruktorius yra pavadintas __karšta__.
C++ ir Java, konstruktorius pavadintas taip pat kaip ir klasės pavadinimas.
Pavyzdys:
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. Kokie yra C++ konstruktorių tipai?
Dažniausia konstruktorių klasifikacija apima:
- Numatytasis konstruktorius
- Neparametrinis konstruktorius
- Parametrizuotas konstruktorius
- Kopijavimo konstruktorius
1. Numatytasis konstruktorius
Numatytasis konstruktorius yra konstruktorius, kuris nepriima jokių argumentų. Tai neparametrinis konstruktorius, kurį automatiškai apibrėžia kompiliatorius, kai nepateikiamas aiškus konstruktoriaus apibrėžimas.
Ji inicijuoja duomenų narius į numatytąsias vertes.
2. Neparametrinis konstruktorius
Tai vartotojo apibrėžtas konstruktorius, neturintis argumentų ar parametrų.
Pavyzdys:
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. Parametrizuotas konstruktorius
Konstruktoriai, kurie priima tam tikrus argumentus, yra žinomi kaip parametrizuoti konstruktoriai.
Pavyzdys:
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. Kopijavimo konstruktorius
Kopijavimo konstruktorius yra nario funkcija, kuri inicijuoja objektą naudojant kitą tos pačios klasės objektą.
Pavyzdys:
java eilutės funkcijosC++
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; } }>
„Python“ neturime įmontuotų kopijavimo konstruktorių, tokių kaip „Java“ ir „C++“, tačiau galime išspręsti problemą naudodami skirtingus metodus.
26. Kas yra destruktorius?
Destruktorius yra metodas, kuris automatiškai iškviečiamas, kai objektas yra aprėpiamas arba sunaikinamas.
C++ kalboje destruktoriaus pavadinimas taip pat yra toks pat kaip klasės pavadinimas, bet su ( ~ ) tildės simbolis kaip priešdėlis.
į styginių metodą java
Python kalboje naikintojas pavadintas __iš__ .
Pavyzdys:
C++ class base { public: ~base() { cout << 'This is a destructor'; } }> Python class base: def __del__(self): print('This is destructor')>
Java programoje šiukšlių rinkėjas automatiškai ištrina nenaudingus objektus, todėl Java programoje nėra destruktoriaus sąvokos. Galėjome naudoti finalize() metodą kaip „Java destructor“ sprendimą, tačiau jis taip pat nebenaudojamas nuo „Java 9“.
27. Ar galime klasėje perkrauti konstruktorių?
Taip Mes galime perkrauti konstruktorių klasėje Java. Konstruktorius perkraunamas, kai norime konstruktoriaus su skirtingu konstruktoriumi su skirtingais parametrais (skaičiumi ir tipu).
28. Ar galime klasėje perkrauti destruktorių?
Ne. Destruktorius klasėje negali būti perkrautas. Klasėje gali būti tik vienas naikintojas.
29. Kas yra virtuali funkcija?
Virtuali funkcija yra funkcija, kuri naudojama pirminės klasės metodui nepaisyti išvestinėje klasėje. Jis naudojamas abstrakcijai teikti klasėje.
C++ kalboje virtuali funkcija deklaruojama naudojant virtualų raktinį žodį,
Java programoje kiekvienas viešas, nestatinis ir ne galutinis metodas yra virtuali funkcija.
Python metodai visada yra virtualūs.
Pavyzdys:
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. Kas yra gryna virtuali funkcija?
Gryna virtuali funkcija, taip pat žinoma kaip abstrakčioji funkcija, yra nario funkcija, kurioje nėra jokių teiginių. Jei reikia, ši funkcija apibrėžiama išvestinėje klasėje.
Pavyzdys:
C++ class base { virtual void pureVirFunc() = 0; }> Java abstract class base { abstract void prVirFunc(); }>
„Python“ tai pasiekiame naudodami @abstractmethod iš ABC (abstract Base Class) modulio.
Papildomas klausimas
Kas yra abstrakti klasė?
Apskritai, abstrakčioji klasė yra klasė, skirta paveldėti. Jo negalima kartoti. Abstrakčiąją klasę gali sudaryti tiek abstrakčių, tiek neabstrakčių metodų.
C++ kalboje abstrakčioji klasė yra klasė, kurioje yra bent viena gryna virtuali funkcija.
„Java“ abstrakčioji klasė deklaruojama su abstrakčiai raktažodį.
Pavyzdys:
C++ class absClass { public: virtual void pvFunc() = 0; }> Java abstract class absClass { // body }>
„Python“ abstrakčiai klasei sukurti naudojame modulį ABC (Abstract Base Class).
Būtina nurodyti:
- OOPs C++
- OOPs Java
- OOPs Python
- Klasės ir objektai C++ kalba
- Klasės ir objektai Java
- „Python“ klasės ir objektai
- Įvadas į programavimo paradigmas
- Sąsaja Java
- Abstrakti klasė Java
- C++ interviu klausimai