logo

30 OOPs intervijas jautājumi un atbildes (2024)

Objektorientētā programmēšana jeb OOP ir programmēšanas paradigma, kas īsteno koncepciju objektus programmā. Tā mērķis ir nodrošināt vienkāršāku risinājumu reālās pasaules problēmām, programmēšanā ieviešot tādas reālas entītijas kā mantojums, abstrakcija, polimorfisms utt. OOPs koncepcija tiek plaši izmantota daudzās populārās valodās, piemēram, Java, Python, C++ utt.

OOPs intervijas jautājumi un atbildes

OOPs ir arī viens no svarīgākajiem programmēšanas interviju tematiem. Šajā rakstā ir daži populārākie interviju jautājumi par OOPs koncepciju.



OOPs intervijas jautājumi

1. Kas ir objektorientētā programmēšana (OOP)?

O objekts O orientēts P rogrammēšana (pazīstama arī kā OOP) ir programmēšanas paradigma, kurā visa programmatūra darbojas kā objektu kopums, kas runā viens ar otru. Objekts ir datu kopums un metodes, kas darbojas ar šiem datiem.

2. Kāpēc OOPs?

Galvenā OOP priekšrocība ir labāk pārvaldāms kods, kas aptver tālāk norādīto.

  1. Programmatūras vispārējā izpratne palielinās, palielinoties attālumam starp valodu, kurā runā izstrādātāji, un valodu, ko runā lietotāji.
  2. Objekta orientācija atvieglo apkopi, izmantojot iekapsulēšanu. Var viegli mainīt pamatā esošo attēlojumu, saglabājot metodes nemainīgas.
  3. OOP paradigma galvenokārt ir noderīga salīdzinoši lielai programmatūrai.

3. Kas ir klase?

A klasē ir objektorientētu programmu pamatelements. Tas ir lietotāja definēts datu tips, kas satur datu dalībniekus un dalībnieku funkcijas, kas darbojas ar datu dalībniekiem. Tas ir kā objektu projekts vai veidne ar kopīgām īpašībām un metodēm.



4. Kas ir objekts?

An objektu ir klases gadījums. Klases datu dalībniekus un metodes nevar izmantot tieši. Lai tos izmantotu, mums ir jāizveido klases objekts (vai gadījums). Vienkārši izsakoties, tās ir patiesās pasaules būtnes, kurām ir stāvoklis un uzvedība.

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);  } }>

Izvade
student1.name: Rahul>

5. Kādas ir OOP galvenās iezīmes?

OOP galvenā iezīme, kas pazīstama arī kā 4 pīlāri vai OOP pamatprincipi, ir šāda:

  1. Iekapsulēšana
  2. Datu abstrakcija
  3. Polimorfisms
  4. Mantojums
pīlāri ups

OOPs galvenās funkcijas



6. Kas ir iekapsulēšana?

Iekapsulēšana ir datu un metožu saistīšana, kas ar tiem manipulē vienā vienībā tā, lai sensitīvie dati būtu paslēpti no lietotājiem.
Tas tiek īstenots kā tālāk minētie procesi:

  1. Datu slēpšana: Valodas līdzeklis, lai ierobežotu piekļuvi objekta dalībniekiem. Piemēram, privātie un aizsargātie dalībnieki programmā C++.
  2. Datu un metožu apvienošana kopā: Dati un metodes, kas darbojas ar šiem datiem, tiek apvienotas kopā. Piemēram, datu elementi un dalībnieku metodes, kas ar tiem darbojas, ir ietītas vienā vienībā, kas pazīstama kā klase.
iekapsulēšana

7. Kas ir abstrakcija?

Abstrakcija ir līdzīga datu iekapsulēšanai un ir ļoti svarīga OOP. Tas nozīmē rādīt tikai nepieciešamo informāciju un slēpt no lietotāja pārējo nebūtisko informāciju. Abstrakcija tiek realizēta, izmantojot klases un saskarnes.

abstrakcija OOP

8. Kas ir polimorfisms?

Vārds Polimorfisms nozīmē, ka tam ir daudz formu. Dažam kodam ir īpašība dažādos kontekstos rīkoties atšķirīgi. Piemēram, C++ valodā mēs varam definēt vairākas funkcijas, kurām ir vienāds nosaukums, taču tās darbojas atšķirīgi atkarībā no konteksta.

Polimorfismu var iedalīt divos veidos, pamatojoties uz laiku, kad tiek atrisināts objekta vai funkcijas izsaukums. Tie ir šādi:

dateformat.format java
  • Sastādīt laika polimorfismu
  • Izpildes laika polimorfisms

A) Kompilēšanas laika polimorfisms

Kompilēšanas laika polimorfisms, kas pazīstams arī kā statiskais polimorfisms vai agrīnā saistīšana, ir polimorfisma veids, kurā izsaukuma saistīšana ar tā kodu tiek veikta kompilēšanas laikā. Metodes pārslodze vai operatora pārslodze ir kompilēšanas laika polimorfisma piemēri.

B) izpildlaika polimorfisms

Pazīstams arī kā dinamiskais polimorfisms vai vēlīna saistīšana, izpildlaika polimorfisms ir polimorfisma veids, kurā funkcijas faktiskā ieviešana tiek noteikta izpildlaika vai izpildes laikā. Metodes ignorēšana ir šīs metodes piemērs.

9. Kas ir mantošana? Kāds ir tās mērķis?

Mantojuma ideja ir vienkārša, klase tiek atvasināta no citas klases un izmanto šīs citas klases datus un implementāciju. Atvasināto klasi sauc par atvasinātu vai atvasinātu vai apakšklasi, un klasi, no kuras atvasināta atvasinātā klase, sauc par pamatklasi vai pamatklasi vai virsklasi.

Mantojuma galvenais mērķis ir palielināt koda atkārtotu izmantošanu. To izmanto arī, lai sasniegtu izpildlaika polimorfismu.

10. Kas ir piekļuves norādītāji? Kāda ir to nozīme OOP?

Piekļuves specifikācijas ir īpaši atslēgvārdu veidi, kas tiek izmantoti, lai norādītu vai kontrolētu entītiju, piemēram, klašu, metožu un tā tālāk, pieejamību. Privāts , Publisks , un Aizsargāts ir piekļuves specifikatoru vai piekļuves modifikatoru piemēri.
OOP galvenie komponenti, iekapsulēšana un datu slēpšana, lielā mērā tiek sasniegti šo piekļuves specifikāciju dēļ.

11. Kādas ir OOP priekšrocības un trūkumi?

OOP priekšrocības

OOP trūkumi

OOP nodrošina uzlabotu koda atkārtotu izmantošanu.Programmētājam jābūt labi kvalificētam un izcilai domāšanai par objektiem, jo ​​OOPs viss tiek uzskatīts par objektu.
Kodu ir vieglāk uzturēt un atjaunināt.Ir nepieciešama pareiza plānošana, jo OOP ir nedaudz sarežģīta.
Tas nodrošina labāku datu drošību, ierobežojot piekļuvi datiem un izvairoties no nevajadzīgas iedarbības.OOPs koncepcija nav piemērota visu veidu problēmām.
Ātri ieviešama un viegli pārveidojama, kā rezultātā tiek samazināta visas programmas sarežģītība.Programmu garums ir daudz lielāks, salīdzinot ar procesuālo pieeju.

12. Kādas citas programmēšanas paradigmas pastāv bez OOP?

Programmēšanas paradigma attiecas uz programmas rakstīšanas paņēmienu vai pieeju. Programmēšanas paradigmas var iedalīt šādos veidos:

programmēšanas paradigmu veidi

1. Imperatīvās programmēšanas paradigma

Tā ir programmēšanas paradigma, kas darbojas, mainot programmas stāvokli, izmantojot piešķiršanas paziņojumus. Šajā paradigmā galvenā uzmanība tiek pievērsta tam, kā sasniegt mērķi. Šajā kategorijā ietilpst šādas programmēšanas paradigmas:

  1. Procesuālās programmēšanas paradigma : šī programmēšanas paradigma ir balstīta uz procedūras izsaukšanas koncepciju. Procedūras, kas pazīstamas arī kā rutīnas vai funkcijas, ir programmas pamatelementi šajā paradigmā.
  2. Objektorientētā programmēšana vai OOP : Šajā paradigmā mēs vizualizējam katru entītiju kā objektu un mēģinām strukturēt programmu, pamatojoties uz šī objekta stāvokli un uzvedību.
  3. Paralēlā programmēšana Paralēlā programmēšanas paradigma ir instrukciju apstrāde, sadalot tās vairākās mazākās daļās un izpildot tās vienlaikus.

2. Deklaratīvas programmēšanas paradigma

Deklaratīva programmēšana koncentrējas uz to, kas ir jāizpilda, nevis uz to, kā tas būtu jāizpilda. Šajā paradigmā mēs izsakām aprēķina loģiku, neņemot vērā tā kontroles plūsmu. Deklarācijas paradigmu var iedalīt tālāk:

  1. Loģiskās programmēšanas paradigma : Tā ir balstīta uz formālu loģiku, kur programmas paziņojumi izsaka faktus un noteikumus par problēmu loģiskā formā.
  2. Funkcionālās programmēšanas paradigma : Programmas tiek veidotas, izmantojot un veidojot funkcijas šajā paradigmā.
  3. Datu bāzes programmēšanas paradigma : lai pārvaldītu datus un informāciju, kas sakārtota kā lauki, ieraksti un faili, tiek izmantoti datu bāzes programmēšanas modeļi.

13. Kāda ir atšķirība starp strukturēto programmēšanu un objektorientēto programmēšanu?

Strukturētā programmēšana ir metode, kas tiek uzskatīta par OOP priekšteci un parasti sastāv no labi strukturētiem un atdalītiem moduļiem. Tā ir procesuālās programmēšanas apakškopa. Atšķirība starp OOP un strukturēto programmēšanu ir šāda:

Objektorientētā programmēšana

Strukturālā programmēšana

Programmēšana, kas ir orientēta uz objektu, ir balstīta uz objektiem, kuriem ir stāvoklis un uzvedība.Programmas loģisko struktūru nodrošina strukturālā programmēšana, kas sadala programmas tām atbilstošajās funkcijās.
Tā ievēro pieeju no apakšas uz augšu.Tas atbilst pieejai no augšas uz leju.
Ierobežo atvērto datu plūsmu tikai autorizētām daļām, nodrošinot labāku datu drošību.Nav ierobežojumu datu plūsmai. Ikviens var piekļūt datiem.
Uzlabota koda atkārtota izmantošana, pateicoties polimorfisma un mantojuma jēdzieniem.Koda atkārtota izmantošana tiek panākta, izmantojot funkcijas un cilpas.
Tajā metodes tiek rakstītas globāli un koda rindas tiek apstrādātas pa vienai, t.i., palaist secīgi.Šajā gadījumā metode darbojas dinamiski, veicot zvanus atbilstoši koda nepieciešamībai noteiktu laiku.
Koda modificēšana un atjaunināšana ir vienkāršāka.Salīdzinot ar OOP, koda modificēšana ir sarežģīta.
Datiem tiek piešķirta lielāka nozīme OOP.Kodam tiek piešķirta lielāka nozīme.

14. Kādas ir dažas biežāk lietotās objektorientētās programmēšanas valodas?

OOPs paradigma ir viena no populārākajām programmēšanas paradigmām. To plaši izmanto daudzās populārās programmēšanas valodās, piemēram:

15. Kādi ir dažādi polimorfisma veidi?

Polimorfismu var iedalīt divos veidos, pamatojoties uz laiku, kad tiek atrisināts objekta vai funkcijas izsaukums. Tie ir šādi:

  1. Sastādīt laika polimorfismu
  2. Izpildes laika polimorfisms
polimorfisma veidi

Polimorfisma veidi

A) Kompilēšanas laika polimorfisms

Kompilēšanas laika polimorfisms, kas pazīstams arī kā statiskais polimorfisms vai agrīnā saistīšana, ir polimorfisma veids, kurā izsaukuma saistīšana ar tā kodu tiek veikta kompilēšanas laikā. Metodes pārslodze vai operatora pārslodze ir kompilēšanas laika polimorfisma piemēri.

B) izpildlaika polimorfisms

Zināms arī kā dinamiskais polimorfisms vai novēlota saistīšana, izpildlaika polimorfisms ir polimorfisma veids, kurā funkcijas faktiskā ieviešana tiek noteikta izpildlaika vai izpildes laikā. Metodes ignorēšana ir šīs metodes piemērs.

16. Kāda ir atšķirība starp pārslodzi un ignorēšanu?

Kompilēšanas laika polimorfisma līdzeklis, ko sauc pārslodze ļauj entītijai izmantot vairākas viena nosaukuma implementācijas. Metodes pārslodze un operatora pārslodze ir divi piemēri.

Pārsvarā ir izpildlaika polimorfisma forma, kurā tiek izpildīta entītija ar tādu pašu nosaukumu, bet atšķirīgu realizāciju. Tas tiek īstenots ar virtuālo funkciju palīdzību.

17. Vai mantojumam ir kādi ierobežojumi?

Jā, ir vairāk izaicinājumu, ja jums ir lielāka autoritāte. Lai gan mantošana ir ļoti spēcīga OOP iezīme, tai ir arī būtiski trūkumi.

  • Tā kā tam ir jāiziet cauri vairākām klasēm, lai to ieviestu, mantojuma apstrāde prasa ilgāku laiku.
  • Bāzes klase un bērnu klase, kuras abas nodarbojas ar mantošanu, arī ir cieši saistītas viena ar otru (sauktas par cieši saistītām). Tāpēc, ja ir jāveic izmaiņas, tās var būt jāveic abās klasēs vienlaikus.
  • Arī mantojuma ieviešana var būt sarežģīta. Tāpēc, ja tas netiek pareizi ieviests, tas var izraisīt neparedzētas kļūdas vai neprecīzus rezultātus.

18. Kādi dažādi mantojuma veidi pastāv?

Mantojumu var iedalīt 5 veidos, kas ir šādi:

mantojuma veidi
  1. Viens mantojums: Bērnu klase, kas iegūta tieši no bāzes klases
  2. Daudzkārtēja mantošana: Bērnu klase, kas iegūta no vairākām bāzes klasēm.
  3. Daudzlīmeņu mantošana: Bērnu klase, kas atvasināta no klases, kas ir arī atvasināta no citas bāzes klases.
  4. Hierarhiskā mantošana: Vairākas bērnu klases, kas iegūtas no vienas bāzes klases.
  5. Hibrīda mantošana: Mantojums, kas sastāv no vairākiem iepriekš norādītajiem mantojuma veidiem.

Piezīme: Atbalstītā mantojuma veids ir atkarīgs no valodas. Piemēram, Java neatbalsta vairākkārtēju mantojumu.

19. Kas ir interfeiss?

Unikāls klases tips, kas pazīstams kā saskarne, satur metodes, bet ne to definīcijas. Saskarnē ir atļauta tikai metodes deklarēšana. Jūs nevarat izveidot objektus, izmantojot saskarni. Tā vietā jums ir jāievieš šī saskarne un jānorāda procedūras.

20. Kā abstrakta klase atšķiras no interfeisa?

Gan abstraktās klases, gan saskarnes ir īpaši klašu veidi, kas ietver tikai metožu deklarāciju, nevis to ieviešanu. Tomēr abstraktā klase pilnībā atšķiras no saskarnes. Tālāk ir norādītas dažas galvenās atšķirības starp abstrakto klasi un saskarni.

Abstraktā klase

Interfeiss

Tomēr, ja abstraktā klase tiek mantota, apakšklasei nav jāiesniedz abstraktās metodes definīcija, kamēr apakšklase to faktiski neizmanto.Kad saskarne ir ieviesta, apakšklasei ir jānorāda visas saskarnes metodes, kā arī to ieviešana.
Abstraktai klasei var būt gan abstraktas, gan neabstraktas metodes.Interfeisam var būt tikai abstraktas metodes.
Abstraktajai klasei var būt galīgi, negalīgi, statiski un nestatiski mainīgie.Interfeisam ir tikai statiski un galīgie mainīgie.
Abstraktā klase neatbalsta vairākkārtēju mantojumu.Interfeiss atbalsta vairāku mantojumu.

21. Cik daudz atmiņas aizņem klase?

Klases neizmanto atmiņu. Tie kalpo tikai kā veidne, no kuras tiek izgatavoti priekšmeti. Tagad objekti faktiski inicializē klases dalībniekus un metodes, kad tie tiek izveidoti, šajā procesā izmantojot atmiņu.

22. Vai vienmēr ir jāveido objekti no klases?

Nē. Ja bāzes klase ietver nestatiskas metodes, ir jākonstruē objekts. Bet objekti nav jāģenerē, ja klasē ir iekļautas statiskas metodes. Šajā gadījumā varat izmantot klases nosaukumu, lai tieši izsauktu šīs statiskās metodes.

23. Kāda ir atšķirība starp struktūru un klasi C++ valodā?

Struktūra ir arī lietotāja definēts C++ datu tips, kas ir līdzīgs klasei ar šādām atšķirībām:

  • Galvenā atšķirība starp struktūru un klasi ir tā, ka struktūrā dalībnieki pēc noklusējuma ir iestatīti kā publiski, savukārt klasē dalībnieki pēc noklusējuma ir privāti.
  • Otra atšķirība ir tā, ka mēs izmantojam struktūra struktūras deklarēšanai un klasē klases deklarēšanai C++ valodā.

24. Kas ir konstruktors?

Konstruktors ir koda bloks, kas inicializē jaunizveidoto objektu. Konstruktors atgādina instances metodi, taču tā nav metode, jo tai nav atgriešanas veida. Parasti tā ir metode ar tādu pašu nosaukumu kā klasei, taču dažās valodās tā var atšķirties. Piemēram:

Python valodā konstruktors tiek nosaukts __karsts__.

Programmā C++ un Java konstruktors tiek nosaukts tāpat kā klases nosaukums.

Piemērs:

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. Kādi ir dažādi C++ konstruktoru veidi?

Visizplatītākā konstruktoru klasifikācija ietver:

  1. Noklusējuma konstruktors
  2. Neparametrēts konstruktors
  3. Parametrizēts konstruktors
  4. Kopēšanas konstruktors

1. Noklusējuma konstruktors

Noklusējuma konstruktors ir konstruktors, kas neizmanto argumentus. Tas ir neparametrizēts konstruktors, ko kompilators definē automātiski, ja nav sniegta skaidra konstruktora definīcija.

Tas inicializē datu dalībniekus uz to noklusējuma vērtībām.

2. Neparametrizēts konstruktors

Tas ir lietotāja definēts konstruktors, kam nav argumentu vai parametru.

Piemērs:

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. Parametrizēts konstruktors

Konstruktorus, kas izmanto dažus argumentus, sauc par parametrizētiem konstruktoriem.

Piemērs:


C++
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ēšanas konstruktors

Kopiju konstruktors ir biedra funkcija, kas inicializē objektu, izmantojot citu tās pašas klases objektu.

Piemērs:

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;  } }>


Programmā Python mums nav iebūvētu kopiju konstruktoru, piemēram, Java un C++, taču mēs varam veikt risinājumu, izmantojot dažādas metodes.

26. Kas ir destruktors?

Destruktors ir metode, kas tiek automātiski izsaukta, kad objekts ir izveidots vai iznīcināts.

Programmā C++ iznīcinātāja nosaukums arī ir tāds pats kā klases nosaukums, bet ar ( ~ ) tildes simbols kā prefiksu.

Python valodā iznīcinātājs tiek nosaukts __no__ .

Piemērs:

C++
class base { public:  ~base() { cout << 'This is a destructor'; } }>
Python
class base: def __del__(self): print('This is destructor')>


Java valodā atkritumu savācējs automātiski izdzēš nederīgos objektus, tāpēc Java nav iznīcinātāja jēdziena. Mēs būtu varējuši izmantot metodi finalize () kā risinājumu java iznīcinātājam, taču tā arī ir novecojusi kopš Java 9.

27. Vai klasē varam pārslogot konstruktoru?

Jā Mēs varam pārslogot konstruktoru klasē Java. Konstruktora pārslodze tiek veikta, ja vēlamies konstruktoru ar citu konstruktoru ar dažādiem parametriem (numurs un tips).

28. Vai mēs varam pārslogot destruktoru klasē?

Nē. Destruktoru nevar pārslogot klasē. Klasē var būt tikai viens iznīcinātājs.

29. Kas ir virtuālā funkcija?

Virtuālā funkcija ir funkcija, ko izmanto, lai atvasinātajā klasē ignorētu vecākklases metodi. To izmanto, lai klasē nodrošinātu abstrakciju.

Programmā C++ virtuālā funkcija tiek deklarēta, izmantojot virtuālo atslēgvārdu,

Java versijā katra publiskā, nestatiskā un negalīgā metode ir virtuāla funkcija.

Python metodes vienmēr ir virtuālas.

Piemērs:

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 ir tīrā virtuālā funkcija?

Tīri virtuāla funkcija, kas pazīstama arī kā abstraktā funkcija, ir dalībnieka funkcija, kas nesatur nekādus paziņojumus. Ja nepieciešams, šī funkcija ir definēta atvasinātajā klasē.

Piemērs:

C++
class base {  virtual void pureVirFunc() = 0; }>
Java
abstract class base {  abstract void prVirFunc(); }>


Python mēs to panākam, izmantojot @abstractmethod no ABC (abstract Base Class) moduļa.

Bonusa jautājums

Kas ir abstraktā klase?

Vispārīgi runājot, abstraktā klase ir klase, kuru paredzēts izmantot mantošanai. To nevar izveidot. Abstraktā klase var sastāvēt gan no abstraktām, gan neabstraktām metodēm.

C++ valodā abstraktā klase ir klase, kurā ir vismaz viena tīra virtuāla funkcija.

Java valodā abstraktā klase tiek deklarēta ar an abstrakts atslēgvārds.

Piemērs:

C++
class absClass { public:  virtual void pvFunc() = 0; }>
Java
abstract class absClass {  // body }>


Python mēs izmantojam ABC (abstraktās bāzes klases) moduli, lai izveidotu abstraktu klasi.

Jāatsaucas:

  1. OOPs valodā C++
  2. OOPs Java
  3. OOPs programmā Python
  4. Klases un objekti C++ valodā
  5. Klases un objekti Java valodā
  6. Klases un objekti Python
  7. Ievads programmēšanas paradigmās
  8. Interfeiss Java valodā
  9. Abstraktā klase Java valodā
  10. C++ intervijas jautājumi