logo

30 de întrebări și răspunsuri la interviu OOP (2024)

Programarea orientată pe obiecte, sau POO, este o paradigmă de programare care implementează conceptul de obiecte în program. Acesta își propune să ofere o soluție mai ușoară la problemele din lumea reală prin implementarea entităților din lumea reală, cum ar fi moștenirea, abstracția, polimorfismul etc. în programare. Conceptul OOP este utilizat pe scară largă în multe limbaje populare precum Java, Python, C++ etc.

Întrebări și răspunsuri la interviu OOP

OOP este, de asemenea, unul dintre cele mai importante subiecte pentru programarea interviurilor. Acest articol conține câteva întrebări de top la interviu despre conceptul OOP.



Întrebări de interviu OOP

1. Ce este programarea orientată pe obiecte (OOP)?

O obiect O rientate P programarea (cunoscut și ca OOP) este o paradigmă de programare în care software-ul complet funcționează ca o grămadă de obiecte care vorbesc între ele. Un obiect este o colecție de date și metodele care operează pe acele date.

2. De ce POO?

Principalul avantaj al OOP este un cod mai ușor de gestionat, care acoperă următoarele:

  1. Înțelegerea generală a software-ului crește odată cu distanța dintre limba vorbită de dezvoltatori și cea vorbită de utilizatori.
  2. Orientarea obiectelor ușurează întreținerea prin utilizarea încapsulării. Se poate schimba cu ușurință reprezentarea de bază, păstrând aceleași metode.
  3. Paradigma OOPs este utilă în principal pentru software relativ mare.

3. Ce este o clasă?

A clasă este un bloc al programelor orientate pe obiecte. Este un tip de date definit de utilizator care conține membrii de date și funcțiile de membru care operează pe membrii de date. Este ca un model sau un șablon de obiecte care au proprietăți și metode comune.



4. Ce este un obiect?

Un obiect este o instanță a unei clase. Membrii de date și metodele unei clase nu pot fi utilizate direct. Trebuie să creăm un obiect (sau o instanță) a clasei pentru a le folosi. În termeni simpli, ele sunt entitățile reale ale lumii care au o stare și un comportament.

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

Ieșire
student1.name: Rahul>

5. Care sunt principalele caracteristici ale POO?

Caracteristica principală a OOP, cunoscută și sub numele de 4 piloni sau principii de bază ale POO, sunt următoarele:

  1. Încapsulare
  2. Abstracția datelor
  3. Polimorfism
  4. Moştenire
stâlpii de oops

Caracteristici principale OOP



6. Ce este încapsularea?

Încapsularea este legarea datelor și a metodelor care le manipulează într-o singură unitate, astfel încât datele sensibile să fie ascunse de utilizatori
Este implementat ca procesele menționate mai jos:

  1. Ascunderea datelor: O caracteristică de limbă pentru a restricționa accesul la membrii unui obiect. De exemplu, membri privați și protejați în C++.
  2. Gruparea datelor și a metodelor împreună: Datele și metodele care funcționează pe acele date sunt grupate împreună. De exemplu, membrii de date și metodele de membri care operează pe ele sunt împachetate într-o singură unitate cunoscută sub numele de clasă.
încapsulare

7. Ce este abstracția?

Abstracția este similară cu încapsularea datelor și este foarte importantă în OOP. Înseamnă să arăți doar informațiile necesare și să ascunzi de utilizator celelalte informații irelevante. Abstracția este implementată folosind clase și interfețe.

abstractizare în POO

8. Ce este polimorfismul?

Cuvantul Polimorfism înseamnă a avea mai multe forme. Este proprietatea unui cod de a se comporta diferit pentru diferite contexte. De exemplu, în limbajul C++, putem defini mai multe funcții având același nume, dar funcționând diferit în funcție de context.

Polimorfismul poate fi clasificat în două tipuri în funcție de momentul în care apelul la obiect sau funcție este rezolvat. Acestea sunt după cum urmează:

  • Polimorfismul timpului de compilare
  • Polimorfismul de rulare

A) Polimorfism în timp de compilare

Polimorfismul în timp de compilare, cunoscut și sub denumirea de polimorfism static sau legarea timpurie, este tipul de polimorfism în care legarea apelului la codul său se face în momentul compilării. Supraîncărcarea metodei sau supraîncărcarea operatorului sunt exemple de polimorfism în timp de compilare.

B) Polimorfismul de rulare

Cunoscut și sub denumirea de polimorfism dinamic sau legare tardivă, polimorfismul de rulare este tipul de polimorfism în care implementarea efectivă a funcției este determinată în timpul rulării sau execuției. Suprascrierea metodei este un exemplu al acestei metode.

9. Ce este Moștenirea? Care este scopul ei?

Ideea de moștenire este simplă, o clasă este derivată dintr-o altă clasă și folosește datele și implementarea acelei clase. Clasa care este derivată se numește copil sau derivată sau subclasă, iar clasa din care este derivată clasa copil se numește părinte sau bază sau superclasă.

Scopul principal al Moștenirii este de a crește reutilizarea codului. Este, de asemenea, utilizat pentru a realiza polimorfismul de rulare.

sortare arraylist

10. Ce sunt specificatorii de acces? Care este semnificația lor în POO?

Specificatorii de acces sunt tipuri speciale de cuvinte cheie care sunt utilizate pentru a specifica sau controla accesibilitatea entităților precum clase, metode și așa mai departe. Privat , Public , și Protejat sunt exemple de specificatori de acces sau modificatori de acces.
Componentele cheie ale POO, încapsularea și ascunderea datelor, sunt realizate în mare măsură datorită acestor specificatori de acces.

11. Care sunt avantajele și dezavantajele POO?

Avantajele POO

Dezavantajele POO

OOP oferă o reutilizare îmbunătățită a codului.Programatorul ar trebui să fie bine calificat și ar trebui să aibă o gândire excelentă în ceea ce privește obiectele, deoarece totul este tratat ca un obiect în POO.
Codul este mai ușor de întreținut și actualizat.Este necesară o planificare adecvată, deoarece OOP-urile sunt puțin complicate.
Oferă o mai bună securitate a datelor prin restricționarea accesului la date și evitând expunerea inutilă.Conceptul OOP nu este potrivit pentru toate tipurile de probleme.
Rapid de implementat și ușor de reproiectat, ceea ce duce la minimizarea complexității unui program general.Durata programelor este mult mai mare în comparație cu abordarea procedurală.

12. Ce alte paradigme de programare există în afară de POO?

Paradigma de programare se referă la tehnica sau abordarea scrierii unui program. Paradigmele de programare pot fi clasificate în următoarele tipuri:

tipuri de paradigme de programare

1. Paradigma de programare imperativă

Este o paradigmă de programare care funcționează prin schimbarea stării programului prin instrucțiuni de atribuire. Accentul principal în această paradigmă este asupra modului de atingere a scopului. Următoarele paradigme de programare intră în această categorie:

  1. Paradigma de programare procedurală : Această paradigmă de programare se bazează pe conceptul de apel de procedură. Procedurile, cunoscute și ca rutine sau funcții, sunt elementele de bază ale unui program în această paradigmă.
  2. Programare orientată pe obiecte sau POO : În această paradigmă, vizualizăm fiecare entitate ca un obiect și încercăm să structurem programul pe baza stării și comportamentului acelui obiect.
  3. Programare paralelă : Paradigma de programare paralelă este procesarea instrucțiunilor prin împărțirea lor în mai multe părți mai mici și executarea lor concomitent.

2. Paradigma de programare declarativă

Programarea declarativă se concentrează mai degrabă pe ceea ce urmează să fie executat decât pe modul în care ar trebui să fie executat. În această paradigmă, exprimăm logica unui calcul fără a lua în considerare fluxul său de control. Paradigma declarativă mai poate fi clasificată în:

  1. Paradigma de programare logica : Se bazează pe logica formală în care instrucțiunile programului exprimă faptele și regulile despre problemă în formă logică.
  2. Paradigma de programare funcțională : Programele sunt create prin aplicarea și compunerea funcțiilor în această paradigmă.
  3. Paradigma de programare a bazelor de date : Pentru a gestiona datele și informațiile organizate ca câmpuri, înregistrări și fișiere, sunt utilizate modele de programare a bazelor de date.

13. Care este diferența dintre programarea structurată și programarea orientată pe obiecte?

Programarea structurată este o tehnică care este considerată un precursor al OOP și constă de obicei din module bine structurate și separate. Este un subset al programării procedurale. Diferența dintre POO și programarea structurată este următoarea:

Programare orientată pe obiecte

Programare structurală

Programarea care este orientată pe obiecte este construită pe obiecte care au o stare și un comportament.Structura logică a unui program este furnizată de programarea structurală, care împarte programele în funcțiile lor corespunzătoare.
Urmează o abordare de jos în sus.Urmează o abordare de sus în jos.
Restricționează fluxul deschis de date la părțile autorizate, oferind doar o mai bună securitate a datelor.Nicio restricție la fluxul de date. Oricine poate accesa datele.
Reutilizabilitate îmbunătățită a codului datorită conceptelor de polimorfism și moștenire.Reutilizarea codului se realizează prin utilizarea funcțiilor și buclelor.
În aceasta, metodele sunt scrise global și liniile de cod sunt procesate una câte una, adică rulează secvenţial.În acest sens, metoda funcționează dinamic, efectuând apeluri conform nevoii de cod pentru un anumit timp.
Modificarea și actualizarea codului este mai ușoară.Modificarea codului este dificilă în comparație cu OOP.
Datele primesc mai multă importanță în POO.Codului i se acordă mai multă importanță.

14. Care sunt unele limbaje de programare orientate pe obiecte utilizate în mod obișnuit?

Paradigma OOP este una dintre cele mai populare paradigme de programare. Este utilizat pe scară largă în multe limbaje de programare populare, cum ar fi:

15. Care sunt diferitele tipuri de polimorfism?

Polimorfismul poate fi clasificat în două tipuri în funcție de momentul în care apelul la obiect sau funcție este rezolvat. Acestea sunt după cum urmează:

  1. Polimorfismul timpului de compilare
  2. Polimorfismul de rulare
tipuri de polimorfism

Tipuri de polimorfism

A) Polimorfism în timp de compilare

Polimorfismul în timp de compilare, cunoscut și sub denumirea de polimorfism static sau legarea timpurie, este tipul de polimorfism în care legarea apelului la codul său se face în momentul compilării. Supraîncărcarea metodei sau supraîncărcarea operatorului sunt exemple de polimorfism în timp de compilare.

B) Polimorfismul de rulare

De asemenea cunoscut ca si polimorfism dinamic sau legarea tardivă, polimorfismul de rulare este tipul de polimorfism în care implementarea efectivă a funcției este determinată în timpul rulării sau execuției. Anularea metodei este un exemplu al acestei metode.

16. Care este diferența dintre supraîncărcare și suprasolicitare?

O caracteristică de polimorfism în timp de compilare numită supraîncărcare permite unei entități să aibă numeroase implementări cu același nume. Supraîncărcarea metodei și supraîncărcarea operatorului sunt două exemple.

Depășirea este o formă de polimorfism de rulare în care este executată o entitate cu același nume, dar o implementare diferită. Este implementat cu ajutorul funcțiilor virtuale.

17. Există limitări privind moștenirea?

Da, sunt mai multe provocări atunci când ai mai multă autoritate. Deși moștenirea este o caracteristică OOP foarte puternică, are și dezavantaje semnificative.

  • Deoarece trebuie să treacă prin mai multe clase pentru a fi implementat, procesarea moștenirii durează mai mult.
  • Clasa de bază și clasa copil, care sunt ambele implicate în moștenire, sunt, de asemenea, strâns legate între ele (numite strâns cuplate). Prin urmare, dacă trebuie făcute modificări, este posibil să fie nevoie să fie făcute în ambele clase în același timp.
  • Implementarea moștenirii ar putea fi, de asemenea, dificilă. Prin urmare, dacă nu este implementat corect, acest lucru ar putea duce la greșeli neprevăzute sau rezultate inexacte.

18. Ce tipuri diferite de moștenire există?

Moștenirea poate fi clasificată în 5 tipuri, care sunt după cum urmează:

tipuri de moștenire
  1. Moștenire unică: Clasa copil derivată direct din clasa de bază
  2. Moștenire multiplă: Clasa copil derivată din mai multe clase de bază.
  3. Moștenire pe mai multe niveluri: Clasa copil derivată din clasa care este, de asemenea, derivată dintr-o altă clasă de bază.
  4. Moștenirea ierarhică: Clase copii multiple derivate dintr-o singură clasă de bază.
  5. Moștenirea hibridă: Moștenirea constând din mai multe tipuri de moștenire ale celor specificate mai sus.

Notă: Tipul de moștenire acceptat depinde de limbă. De exemplu, Java nu acceptă moștenirea multiplă.

19. Ce este o interfață?

Un tip de clasă unic cunoscut sub numele de interfață conține metode, dar nu și definițiile acestora. În interiorul unei interfețe, este permisă doar declararea metodei. Nu puteți crea obiecte folosind o interfață. În schimb, trebuie să utilizați acea interfață și să specificați procedurile pentru a face acest lucru.

20. Cum este o clasă abstractă diferită de o interfață?

Atât clasele abstracte, cât și interfețele sunt tipuri speciale de clase care includ doar declararea metodelor, nu implementarea lor. Totuși, o clasă abstractă este complet diferită de o interfață. Următoarele sunt câteva diferențe majore între o clasă abstractă și o interfață.

Clasa abstracte

Interfață

Când o clasă abstractă este moștenită, totuși, subclasa nu este obligată să furnizeze definiția metodei abstracte până când și cu excepția cazului în care subclasa o folosește efectiv.Când o interfață este implementată, subclasa trebuie să specifice toate metodele interfeței, precum și implementarea lor.
O clasă abstractă poate avea atât metode abstracte, cât și non-abstracte.O interfață poate avea doar metode abstracte.
O clasă abstractă poate avea variabile finale, nefinale, statice și nestatice.Interfața are doar variabile statice și finale.
Clasa abstractă nu acceptă moștenirea multiplă.O interfață acceptă moștenirea multiplă.

21. Câtă memorie ocupă o clasă?

Clasele nu folosesc memoria. Ele servesc doar ca șablon din care sunt făcute articolele. Acum, obiectele inițializează efectiv membrii clasei și metodele atunci când sunt create, folosind memoria în proces.

tutorial seleniu

22. Este întotdeauna necesar să creați obiecte din clasă?

Nu. Dacă clasa de bază include metode non-statice, trebuie construit un obiect. Dar nu trebuie generate obiecte dacă clasa include metode statice. În acest caz, puteți folosi numele clasei pentru a apela direct acele metode statice.

23. Care este diferența dintre o structură și o clasă în C++?

Structura este, de asemenea, un tip de date definit de utilizator în C++ similar cu clasa, cu următoarele diferențe:

  • Diferența majoră dintre o structură și o clasă este că într-o structură, membrii sunt setați la public în mod implicit, în timp ce într-o clasă, membrii sunt privați în mod implicit.
  • Cealaltă diferență este că folosim struct pentru declararea structurii și clasă pentru declararea unei clase în C++.

24. Ce este Constructor?

Un constructor este un bloc de cod care inițializează obiectul nou creat. Un constructor seamănă cu o metodă de instanță, dar nu este o metodă, deoarece nu are un tip de returnare. În general, este metoda care are același nume ca și clasa, dar în unele limbi poate diferi. De exemplu:

În python, un constructor este numit __Fierbinte__.

În C++ și Java, constructorul este numit la fel ca și numele clasei.

Exemplu:

C++
class base {  public:  base() { cout << 'This is a constructor'; } }>
Java
class base {  base() { System.out.printIn('This is a constructor'); } }>
Piton
class base: def __init__(self): print('This is a constructor')>

25. Care sunt diferitele tipuri de constructori în C++?

Cea mai comună clasificare a constructorilor include:

  1. Constructor implicit
  2. Constructor neparametrizat
  3. Constructor parametrizat
  4. Copie constructor

1. Constructor implicit

Constructorul implicit este un constructor care nu acceptă niciun argument. Este un constructor neparametrat care este definit automat de compilator atunci când nu este furnizată nicio definiție explicită a constructorului.

Inițializează membrii datelor la valorile lor implicite.

2. Constructor neparametrizat

Este un constructor definit de utilizator care nu are argumente sau parametri.

Exemplu:

C++
class base {  base()  {  cout << 'This is a non-parameterized contructor';  } }>
Java
class base {  base()  {  System.out.printIn(  'This is a non-parameterized constructor.');  } }>
Piton
class base: def __init__(self): print('This is a non-parameterized constructor')>

3. Constructor parametrizat

Constructorii care preiau unele argumente sunt cunoscuți ca constructori parametrizați.

Exemplu:


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);  } }>
Piton
class base: def __init__(self, a): print('Constructor with argument: {}'.format(a))>

4. Copiați constructorul

Un constructor de copiere este o funcție membru care inițializează un obiect folosind un alt obiect din aceeași clasă.

toate majusculele comandă excel

Exemplu:

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


În Python, nu avem constructori de copiere încorporați precum Java și C++, dar putem face o soluție folosind diferite metode.

26. Ce este un destructor?

Un destructor este o metodă care este apelată automat atunci când obiectul este alcătuit din scop sau este distrus.

În C++, numele destructorului este, de asemenea, același cu numele clasei, dar cu ( ~ ) simbol tilde ca prefix.

În Python, destructorul este numit __din __ .

Exemplu:

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


În Java, colectorul de gunoi șterge automat obiectele inutile, așa că nu există un concept de destructor în Java. Am fi putut folosi metoda finalize() ca o soluție pentru destructorul java, dar este, de asemenea, depreciată din Java 9.

27. Putem supraîncărca constructorul într-o clasă?

Da Putem supraîncărca constructorul într-o clasă în Java. Supraîncărcarea constructorului se face atunci când dorim un constructor cu constructor diferit cu parametru diferit (Număr și Tip).

28. Putem supraîncărca destructorul într-o clasă?

Nu. Un destructor nu poate fi supraîncărcat într-o clasă. Poate fi un singur destructor prezent într-o clasă.

29. Ce este funcția virtuală?

O funcție virtuală este o funcție care este utilizată pentru a suprascrie o metodă a clasei părinte din clasa derivată. Este folosit pentru a oferi abstractizare într-o clasă.

În C++, o funcție virtuală este declarată folosind cuvântul cheie virtual,

În Java, fiecare metodă publică, non-statică și non-finală este o funcție virtuală.

Metodele Python sunt întotdeauna virtuale.

Exemplu:

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')  } }>
Piton
class base: def func(self): print('This is a virtual function')>

30. Ce este funcția virtuală pură?

O funcție virtuală pură, cunoscută și ca funcție abstractă, este o funcție membru care nu conține nicio declarație. Această funcție este definită în clasa derivată dacă este necesar.

Exemplu:

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


În Python, realizăm acest lucru folosind @abstractmethod din modulul ABC (Abstract Base Class).

Întrebare bonus

Ce este o clasă abstractă?

În termeni generali, o clasă abstractă este o clasă care este destinată a fi utilizată pentru moștenire. Nu poate fi instanțiată. O clasă abstractă poate consta atât din metode abstracte, cât și din metode non-abstracte.

În C++, o clasă abstractă este o clasă care conține cel puțin o funcție virtuală pură.

În Java, o clasă abstractă este declarată cu un abstract cuvânt cheie.

Exemplu:

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


În Python, folosim modulul ABC (Abstract Base Class) pentru a crea o clasă abstractă.

Trebuie să se refere:

  1. OOP-uri în C++
  2. OOP în Java
  3. OOP în Python
  4. Clase și obiecte în C++
  5. Clase și obiecte în Java
  6. Clase și obiecte în Python
  7. Introducere în paradigmele de programare
  8. Interfață în Java
  9. Clasă abstractă în Java
  10. Întrebări de interviu C++