logo

Preguntes i respostes de l'entrevista de 30 OOPs (2024)

La programació orientada a objectes, o POO, és un paradigma de programació que implementa el concepte de objectes al programa. Pretén proporcionar una solució més fàcil als problemes del món real mitjançant la implementació d'entitats del món real com l'herència, l'abstracció, el polimorfisme, etc. en la programació. El concepte OOP s'utilitza àmpliament en molts llenguatges populars com Java, Python, C++, etc.

Preguntes i respostes de l'entrevista OOP

Els POO també són un dels temes més importants per programar entrevistes. Aquest article en conté alguns preguntes principals de l'entrevista sobre el concepte OOP.



Preguntes d'entrevista OOP

1. Què és la Programació Orientada a Objectes (POO)?

O objecte O rient P programació (també conegut com a POO) és un paradigma de programació on el programari complet funciona com un munt d'objectes parlant entre ells. Un objecte és una col·lecció de dades i els mètodes que funcionen amb aquestes dades.

2. Per què OOP?

El principal avantatge de la POO és un codi més manejable que cobreix el següent:

  1. La comprensió general del programari s'incrementa amb la distància entre l'idioma que parlen els desenvolupadors i el que parlen els usuaris.
  2. L'orientació d'objectes facilita el manteniment mitjançant l'ús de l'encapsulació. Es pot canviar fàcilment la representació subjacent mantenint els mateixos mètodes.
  3. El paradigma OOPs és útil principalment per a programari relativament gran.

3. Què és una classe?

A classe és un bloc de construcció de programes orientats a objectes. És un tipus de dades definit per l'usuari que conté els membres de dades i les funcions de membre que operen sobre els membres de dades. És com un plànol o una plantilla d'objectes amb propietats i mètodes comuns.



4. Què és un objecte?

An objecte és una instància d'una classe. Els membres de dades i els mètodes d'una classe no es poden utilitzar directament. Hem de crear un objecte (o instància) de la classe per utilitzar-los. En termes senzills, són les entitats del món real que tenen un estat 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);  } }>
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);  } }>

Sortida
student1.name: Rahul>

5. Quines són les característiques principals dels POO?

La característica principal dels POO, també coneguts com 4 pilars o principis bàsics dels POO, són les següents:

  1. Encapsulació
  2. Abstracció de dades
  3. Polimorfisme
  4. Herència
pilars de oops

Característiques principals dels OOP



6. Què és l'encapsulació?

L'encapsulació és l'enllaç de dades i mètodes que les manipulen en una sola unitat de manera que les dades sensibles s'amaguen als usuaris.
S'implementa segons els processos esmentats a continuació:

  1. Ocultació de dades: Una característica de llenguatge per restringir l'accés als membres d'un objecte. Per exemple, membres privats i protegits en C++.
  2. Agrupació de dades i mètodes junts: Les dades i els mètodes que funcionen amb aquestes dades s'agrupen. Per exemple, els membres de dades i els mètodes de membres que hi operen s'emboliquen en una única unitat coneguda com a classe.
encapsulació

7. Què és l'abstracció?

L'abstracció és similar a l'encapsulació de dades i és molt important en POO. Significa mostrar només la informació necessària i ocultar l'altra informació irrellevant a l'usuari. L'abstracció s'implementa mitjançant classes i interfícies.

abstracció en POO

8. Què és el polimorfisme?

La paraula Polimorfisme vol dir tenir moltes formes. És propietat d'algun codi comportar-se de manera diferent per a diferents contextos. Per exemple, en llenguatge C++, podem definir diverses funcions amb el mateix nom però que funcionen diferent segons el context.

El polimorfisme es pot classificar en dos tipus segons el moment en què es resol la crida a l'objecte o funció. Són els següents:

  • Compilar el polimorfisme temporal
  • Polimorfisme en temps d'execució

A) Polimorfisme en temps de compilació

El polimorfisme en temps de compilació, també conegut com a polimorfisme estàtic o enllaç primerenc, és el tipus de polimorfisme on l'enllaç de la crida al seu codi es fa en el moment de la compilació. La sobrecàrrega de mètodes o la sobrecàrrega d'operadors són exemples de polimorfisme en temps de compilació.

B) Polimorfisme en temps d'execució

També conegut com a polimorfisme dinàmic o vinculació tardana, el polimorfisme en temps d'execució és el tipus de polimorfisme on la implementació real de la funció es determina durant el temps d'execució o l'execució. La substitució del mètode és un exemple d'aquest mètode.

9. Què és l'herència? Quina és la seva finalitat?

La idea de l'herència és simple, una classe es deriva d'una altra classe i utilitza dades i implementació d'aquesta altra classe. La classe que es deriva s'anomena fill o derivat o subclasse i la classe de la qual es deriva la classe fill s'anomena pare o base o superclasse.

L'objectiu principal de l'herència és augmentar la reutilització del codi. També s'utilitza per aconseguir el polimorfisme en temps d'execució.

10. Què són els especificadors d'accés? Quina és la seva importància en les POO?

Els especificadors d'accés són tipus especials de paraules clau que s'utilitzen per especificar o controlar l'accessibilitat d'entitats com les classes, els mètodes, etc. Privat , Públic , i Protegit són exemples d'especificadors d'accés o modificadors d'accés.
Els components clau dels POO, l'encapsulació i l'amagat de dades, s'aconsegueixen en gran mesura gràcies a aquests especificadors d'accés.

11. Quins són els avantatges i els inconvenients dels POO?

Avantatges dels POO

Desavantatges dels POO

Els POO ofereixen una reutilització millorada del codi.El programador ha de ser ben qualificat i ha de tenir un pensament excel·lent en termes d'objectes, ja que tot es tracta com un objecte als POO.
El codi és més fàcil de mantenir i actualitzar.Es requereix una planificació adequada perquè els POO són ​​una mica complicats.
Proporciona una millor seguretat de les dades restringint l'accés a les dades i evitant l'exposició innecessària.El concepte OOP no és adequat per a tot tipus de problemes.
Ràpid d'implementar i fàcil de redissenyar, per la qual cosa es minimitza la complexitat d'un programa global.La durada dels programes és molt més gran en comparació amb l'enfocament procedimental.

12. Quins altres paradigmes de programació existeixen a més dels POO?

El paradigma de programació es refereix a la tècnica o enfocament d'escriure un programa. Els paradigmes de programació es poden classificar en els següents tipus:

algorismes d'ordenació
Tipus de paradigmes de programació

1. Paradigma de programació imperatiu

És un paradigma de programació que funciona canviant l'estat del programa mitjançant declaracions d'assignació. El focus principal en aquest paradigma és com assolir l'objectiu. Els següents paradigmes de programació entren en aquesta categoria:

  1. Paradigma de programació procedimental : Aquest paradigma de programació es basa en el concepte de trucada de procediment. Els procediments, també coneguts com a rutines o funcions, són els components bàsics d'un programa en aquest paradigma.
  2. Programació Orientada a Objectes o POO : En aquest paradigma, visualitzem cada entitat com un objecte i intentem estructurar el programa en funció de l'estat i el comportament d'aquest objecte.
  3. Programació paral·lela : El paradigma de programació paral·lela és el processament d'instruccions dividint-les en múltiples parts més petites i executant-les simultàniament.

2. Paradigma de programació declarativa

La programació declarativa se centra en què s'ha d'executar en lloc de com s'ha d'executar. En aquest paradigma, expressem la lògica d'un càlcul sense considerar el seu flux de control. El paradigma declaratiu es pot classificar en:

  1. Paradigma de programació lògica : Es basa en la lògica formal on els enunciats del programa expressen els fets i les regles sobre el problema en la forma lògica.
  2. Paradigma de programació funcional : Els programes es creen aplicant i composant funcions en aquest paradigma.
  3. Paradigma de programació de bases de dades : Per gestionar dades i informació organitzada com a camps, registres i fitxers, s'utilitzen models de programació de bases de dades.

13. Quina diferència hi ha entre la Programació Estructurada i la Programació Orientada a Objectes?

La programació estructurada és una tècnica que es considera una precursora de la POO i que normalment consta de mòduls ben estructurats i separats. És un subconjunt de la programació procedimental. La diferència entre els POO i la programació estructurada és la següent:

Programació Orientada a Objectes

Programació Estructural

La programació orientada a objectes es basa en objectes que tenen un estat i un comportament.L'estructura lògica d'un programa la proporciona la programació estructural, que divideix els programes en les seves funcions corresponents.
Segueix un enfocament de baix a dalt.Segueix un enfocament de dalt a baix.
Restringeix el flux obert de dades a parts autoritzades només proporcionant una millor seguretat de les dades.Sense restriccions al flux de dades. Qualsevol persona pot accedir a les dades.
Reutilitzabilitat del codi millorada gràcies als conceptes de polimorfisme i herència.La reutilització del codi s'aconsegueix mitjançant l'ús de funcions i bucles.
En això, els mètodes s'escriuen globalment i les línies de codi es processen una per una, és a dir, executar seqüencialment.En això, el mètode funciona de manera dinàmica, fent trucades segons la necessitat del codi durant un temps determinat.
Modificar i actualitzar el codi és més fàcil.Modificar el codi és difícil en comparació amb els POO.
Les dades es donen més importància als POO.El codi té més importància.

14. Quins són els llenguatges de programació orientats a objectes que s'utilitzen habitualment?

El paradigma OOP és un dels paradigmes de programació més populars. S'utilitza àmpliament en molts llenguatges de programació populars com ara:

15. Quins són els diferents tipus de polimorfisme?

El polimorfisme es pot classificar en dos tipus segons el moment en què es resol la crida a l'objecte o funció. Són els següents:

  1. Compilar el polimorfisme temporal
  2. Polimorfisme en temps d'execució
tipus de polimorfisme

Tipus de polimorfisme

A) Polimorfisme en temps de compilació

El polimorfisme en temps de compilació, també conegut com a polimorfisme estàtic o enllaç primerenc, és el tipus de polimorfisme on l'enllaç de la crida al seu codi es fa en el moment de la compilació. Sobrecàrrega del mètode o sobrecàrrega de l'operador són exemples de polimorfisme en temps de compilació.

B) Polimorfisme en temps d'execució

També conegut com polimorfisme dinàmic o vinculació tardana, el polimorfisme en temps d'execució és el tipus de polimorfisme on es determina la implementació real de la funció durant el temps d'execució o l'execució. Anul·lació del mètode és un exemple d'aquest mètode.

16. Quina diferència hi ha entre sobrecàrrega i anul·lació?

Una característica de polimorfisme en temps de compilació anomenada sobrecàrrega permet que una entitat tingui nombroses implementacions del mateix nom. La sobrecàrrega del mètode i la sobrecàrrega de l'operador són dos exemples.

Anul·lació és una forma de polimorfisme en temps d'execució on s'executa una entitat amb el mateix nom però una implementació diferent. S'implementa amb l'ajuda de funcions virtuals.

17. Hi ha alguna limitació a l'herència?

Sí, hi ha més reptes quan tens més autoritat. Tot i que l'herència és una característica OOP molt forta, també té inconvenients importants.

  • Com que ha de passar per diverses classes per implementar-se, l'herència triga més a processar-se.
  • La classe base i la classe fill, que es dediquen a l'herència, també estan estretament relacionades entre si (anomenades estretament acoblades). Per tant, si cal fer canvis, és possible que s'hagin de fer a les dues classes alhora.
  • Implementar l'herència també pot ser difícil. Per tant, si no s'implementa correctament, això podria provocar errors imprevistos o sortides inexactes.

18. Quins diferents tipus d'herència hi ha?

L'herència es pot classificar en 5 tipus que són els següents:

tipus d'herència
  1. Herència única: Classe infantil derivada directament de la classe base
  2. Herència múltiple: Classe fill derivada de múltiples classes base.
  3. Herència multinivell: Classe infantil derivada de la classe que també es deriva d'una altra classe base.
  4. Herència jeràrquica: Diverses classes secundàries derivades d'una única classe base.
  5. Herència híbrida: Herència que consta de diversos tipus d'herència dels especificats anteriorment.

Nota: El tipus d'herència admesa depèn de l'idioma. Per exemple, Java no admet l'herència múltiple.

19. Què és una interfície?

Un tipus de classe únic conegut com a interfície conté mètodes però no les seves definicions. Dins d'una interfície, només es permet la declaració de mètodes. No podeu crear objectes amb una interfície. En comptes d'això, heu d'utilitzar aquesta interfície i especificar els procediments per fer-ho.

20. En què es diferencia una classe abstracta d'una interfície?

Tant les classes abstractes com les interfícies són tipus especials de classes que només inclouen la declaració dels mètodes, no la seva implementació. Tanmateix, una classe abstracta és completament diferent d'una interfície. A continuació es mostren algunes diferències importants entre una classe abstracta i una interfície.

Classe abstracta

Interfície

Tanmateix, quan s'hereta una classe abstracta, la subclasse no ha de proporcionar la definició del mètode abstracte fins i tret que la subclasse l'utilitzi realment.Quan s'implementa una interfície, la subclasse ha d'especificar tots els mètodes de la interfície així com la seva implementació.
Una classe que és abstracta pot tenir mètodes tant abstractes com no abstractes.Una interfície només pot tenir mètodes abstractes.
Una classe abstracta pot tenir variables finals, no finals, estàtiques i no estàtiques.La interfície només té variables estàtiques i finals.
La classe abstracta no admet l'herència múltiple.Una interfície admet l'herència múltiple.

21. Quanta memòria ocupa una classe?

Les classes no utilitzen memòria. Només serveixen com a plantilla a partir de la qual es fan els elements. Ara, els objectes en realitat inicialitzen els membres de la classe i els mètodes quan es creen, utilitzant la memòria en el procés.

22. Sempre és necessari crear objectes des de la classe?

No. Si la classe base inclou mètodes no estàtics, s'ha de construir un objecte. Però no cal generar cap objecte si la classe inclou mètodes estàtics. En aquest cas, podeu utilitzar el nom de la classe per cridar directament aquests mètodes estàtics.

23. Quina diferència hi ha entre una estructura i una classe en C++?

L'estructura també és un tipus de dades definit per l'usuari en C++ similar a la classe amb les diferències següents:

  • La diferència principal entre una estructura i una classe és que en una estructura, els membres es configuren com a públics per defecte, mentre que en una classe, els membres són privats per defecte.
  • L'altra diferència és que fem servir estructura per declarar l'estructura i classe per declarar una classe en C++.

24. Què és Constructor?

Un constructor és un bloc de codi que inicialitza l'objecte acabat de crear. Un constructor s'assembla a un mètode d'instància, però no és un mètode ja que no té un tipus de retorn. En general, és el mètode que té el mateix nom que la classe, però en alguns idiomes pot ser diferent. Per exemple:

A Python, s'anomena un constructor __calent__.

En C++ i Java, el constructor s'anomena igual que el nom de la classe.

Exemple:

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. Quins són els diferents tipus de constructors en C++?

La classificació més comuna de constructors inclou:

  1. Constructor per defecte
  2. Constructor no parametritzat
  3. Constructor parametritzat
  4. Copia el constructor

1. Constructor per defecte

El constructor per defecte és un constructor que no pren cap argument. És un constructor no parametritzat que el compilador defineix automàticament quan no es proporciona cap definició de constructor explícita.

Inicialitza els membres de dades als seus valors predeterminats.

2. Constructor no parametritzat

És un constructor definit per l'usuari que no té arguments ni paràmetres.

Exemple:

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. Constructor parametritzat

Els constructors que prenen alguns arguments es coneixen com a constructors parametritzats.

Exemple:


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. Copia Constructor

Un constructor de còpia és una funció membre que inicialitza un objecte utilitzant un altre objecte de la mateixa classe.

Exemple:

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


A Python, no tenim constructors de còpia integrats com Java i C++, però podem fer una solució alternativa utilitzant diferents mètodes.

26. Què és un destructor?

Un destructor és un mètode que s'anomena automàticament quan l'objecte es fa d'abast o es destrueix.

En C++, el nom del destructor també és el mateix que el nom de la classe, però amb el ( ~ ) tilde symbol com el prefix.

A Python, s'anomena el destructor __del__ .

Exemple:

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


A Java, el col·lector d'escombraries elimina automàticament els objectes inútils, de manera que no hi ha cap concepte de destructor a Java. Podríem haver utilitzat el mètode finalize() com a solució alternativa per al destructor de Java, però també està obsolet des de Java 9.

27. Podem sobrecarregar el constructor en una classe?

Sí Podem sobrecarregar el constructor en una classe en Java. La sobrecàrrega del constructor es fa quan volem un constructor amb un constructor diferent amb un paràmetre diferent (nombre i tipus).

28. Podem sobrecarregar el destructor en una classe?

No. No es pot sobrecarregar un destructor en una classe. Només pot ser un destructor present en una classe.

29. Què és la funció virtual?

Una funció virtual és una funció que s'utilitza per anul·lar un mètode de la classe pare a la classe derivada. S'utilitza per proporcionar abstracció en una classe.

En C++, una funció virtual es declara mitjançant la paraula clau virtual,

A Java, cada mètode públic, no estàtic i no final és una funció virtual.

Els mètodes Python sempre són virtuals.

Exemple:

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. Què és la funció virtual pura?

Una funció virtual pura, també coneguda com a funció abstracta, és una funció membre que no conté cap declaració. Aquesta funció es defineix a la classe derivada si cal.

Exemple:

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


A Python, ho aconseguim utilitzant @abstractmethod del mòdul ABC (Abstract Base Class).

Pregunta de bonificació

Què és una classe abstracta?

En termes generals, una classe abstracta és una classe que està pensada per ser utilitzada per a l'herència. No es pot instanciar. Una classe abstracta pot consistir tant en mètodes abstractes com no abstractes.

En C++, una classe abstracta és una classe que conté almenys una funció virtual pura.

A Java, una classe abstracta es declara amb un abstracte paraula clau.

Exemple:

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


A Python, utilitzem el mòdul ABC (Abstract Base Class) per crear una classe abstracta.

Cal consultar:

  1. OOP en C++
  2. OOP a Java
  3. OOP en Python
  4. Classes i objectes en C++
  5. Classes i objectes en Java
  6. Classes i objectes en Python
  7. Introducció als paradigmes de programació
  8. Interfície en Java
  9. Classe abstracta en Java
  10. Preguntes d'entrevista C++