logo

30 preguntas y respuestas de la entrevista de programación orientada a objetos (2024)

La Programación Orientada a Objetos, o POO, es un paradigma de programación que implementa el concepto de objetos en el programa. Su objetivo es proporcionar una solución más sencilla a los problemas del mundo real mediante la implementación de entidades del mundo real como herencia, abstracción, polimorfismo, etc. en la programación. El concepto de programación orientada a objetos se utiliza ampliamente en muchos lenguajes populares como Java, Python, C++, etc.

Preguntas y respuestas de la entrevista de POO

La programación orientada a objetos es también uno de los temas más importantes para las entrevistas de programación. Este artículo contiene algunos Preguntas principales de la entrevista sobre el concepto de POO.



Preguntas de la entrevista de OOP

1. ¿Qué es la programación orientada a objetos (POO)?

oh objeto oh orientado PAG programación (también conocido como OOP) es un paradigma de programación en el que el software completo opera como un conjunto de objetos que se comunican entre sí. Un objeto es una colección de datos y los métodos que operan con esos datos.

2. ¿Por qué POO?

La principal ventaja de la programación orientada a objetos es un código mejor manejable que cubre lo siguiente:

  1. La comprensión general del software aumenta a medida que aumenta la distancia entre el idioma hablado por los desarrolladores y el hablado por los usuarios.
  2. La orientación a objetos facilita el mantenimiento mediante el uso de encapsulación. Se puede cambiar fácilmente la representación subyacente manteniendo los mismos métodos.
  3. El paradigma de programación orientada a objetos es principalmente útil para software relativamente grande.

3. ¿Qué es una Clase?

A clase es un componente básico de los programas orientados a objetos. Es un tipo de datos definido por el usuario que contiene los miembros de datos y las funciones miembro que operan en los miembros de datos. Es como un modelo o plantilla de objetos que tienen propiedades y métodos comunes.



4. ¿Qué es un Objeto?

Un objeto es una instancia de una clase. Los miembros de datos y métodos de una clase no se pueden utilizar directamente. Necesitamos crear un objeto (o instancia) de la clase para usarlos. En términos simples, son las entidades del mundo real que tienen un estado y un comportamiento.

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);  } }>
Pitón
# 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);  } }>

Producción
student1.name: Rahul>

5. ¿Cuáles son las características principales de la programación orientada a objetos?

La característica principal de los OOP, también conocidos como 4 pilares o principios básicos de los OOP, son los siguientes:

  1. Encapsulación
  2. Abstracción de datos
  3. Polimorfismo
  4. Herencia
pilares de ups

Características principales de la programación orientada a objetos



6. ¿Qué es la encapsulación?

La encapsulación es la unión de datos y métodos que los manipulan en una sola unidad de modo que los datos confidenciales queden ocultos a los usuarios.
Se implementa según los procesos que se mencionan a continuación:

  1. Ocultación de datos: Una característica de lenguaje para restringir el acceso a los miembros de un objeto. Por ejemplo, miembros privados y protegidos en C++.
  2. Agrupación de datos y métodos juntos: Los datos y los métodos que operan con esos datos se agrupan. Por ejemplo, los miembros de datos y los métodos de miembros que operan sobre ellos están agrupados en una única unidad conocida como clase.
encapsulación

7. ¿Qué es la abstracción?

La abstracción es similar a la encapsulación de datos y es muy importante en la programación orientada a objetos. Significa mostrar solo la información necesaria y ocultar al usuario el resto de información irrelevante. La abstracción se implementa mediante clases e interfaces.

abstracción en programación orientada a objetos

8. ¿Qué es el polimorfismo?

La palabra Polimorfismo significa tener muchas formas. Es propiedad de algún código comportarse de manera diferente en diferentes contextos. Por ejemplo, en el lenguaje C++, podemos definir múltiples funciones que tengan el mismo nombre pero que funcionen de manera diferente según el contexto.

modelo de referencia osi en redes

El polimorfismo se puede clasificar en dos tipos según el momento en que se resuelve la llamada al objeto o función. Son los siguientes:

  • Polimorfismo en tiempo de compilación
  • Polimorfismo en tiempo de ejecución

A) Polimorfismo en tiempo de compilación

El polimorfismo en tiempo de compilación, también conocido como polimorfismo estático o enlace temprano, es el tipo de polimorfismo en el que la vinculación de la llamada a su código se realiza en el momento de la compilación. La sobrecarga de métodos o la sobrecarga de operadores son ejemplos de polimorfismo en tiempo de compilación.

B) Polimorfismo en tiempo de ejecución

También conocido como polimorfismo dinámico o enlace tardío, el polimorfismo en tiempo de ejecución es el tipo de polimorfismo en el que la implementación real de la función se determina durante el tiempo de ejecución o la ejecución. La anulación de métodos es un ejemplo de este método.

9. ¿Qué es la herencia? ¿Cual es su propósito?

La idea de herencia es simple, una clase se deriva de otra clase y usa datos e implementación de esa otra clase. La clase derivada se llama hija, derivada o subclase y la clase de la que se deriva la clase hija se llama padre, base o superclase.

El objetivo principal de la herencia es aumentar la reutilización del código. También se utiliza para lograr polimorfismo en tiempo de ejecución.

10. ¿Qué son los especificadores de acceso? ¿Cuál es su importancia en la programación orientada a objetos?

Los especificadores de acceso son tipos especiales de palabras clave que se utilizan para especificar o controlar la accesibilidad de entidades como clases, métodos, etc. Privado , Público , y Protegido son ejemplos de especificadores de acceso o modificadores de acceso.
Los componentes clave de la programación orientada a objetos, la encapsulación y la ocultación de datos, se logran en gran medida gracias a estos especificadores de acceso.

11. ¿Cuáles son las ventajas y desventajas de la programación orientada a objetos?

Ventajas de la programación orientada a objetos

Desventajas de la programación orientada a objetos

La programación orientada a objetos proporciona una reutilización mejorada del código.El programador debe estar bien capacitado y tener un pensamiento excelente en términos de objetos, ya que todo se trata como un objeto en la programación orientada a objetos.
El código es más fácil de mantener y actualizar.Se requiere una planificación adecuada porque la programación orientada a objetos es un poco complicada.
Proporciona una mejor seguridad de los datos al restringir el acceso a los datos y evitar la exposición innecesaria.El concepto de programación orientada a objetos no es adecuado para todo tipo de problemas.
Rápido de implementar y fácil de rediseñar, lo que minimiza la complejidad de un programa general.La duración de los programas es mucho mayor en comparación con el enfoque procesal.

12. ¿Qué otros paradigmas de programación existen además de la programación orientada a objetos?

El paradigma de programación se refiere a la técnica o enfoque de escribir un programa. Los paradigmas de programación se pueden clasificar en los siguientes tipos:

tipos de paradigmas de programación

1. Paradigma de programación imperativo

Es un paradigma de programación que funciona cambiando el estado del programa mediante declaraciones de asignación. El enfoque principal en este paradigma es cómo lograr el objetivo. Los siguientes paradigmas de programación entran en esta categoría:

  1. Paradigma de programación procesal : Este paradigma de programación se basa en el concepto de llamada a procedimiento. Los procedimientos, también conocidos como rutinas o funciones, son los componentes básicos de un programa en este paradigma.
  2. Programación Orientada a Objetos o POO : En este paradigma, visualizamos cada entidad como un objeto e intentamos estructurar el programa en función del estado y comportamiento de ese objeto.
  3. Programación paralela : El paradigma de programación paralela es el procesamiento de instrucciones dividiéndolas en múltiples partes más pequeñas y ejecutándolas simultáneamente.

2. Paradigma de programación declarativa

La programación declarativa se centra en lo que se va a ejecutar y no en cómo se debe ejecutar. En este paradigma, expresamos la lógica de un cálculo sin considerar su flujo de control. El paradigma declarativo se puede clasificar además en:

  1. Paradigma de programación lógica : Se basa en la lógica formal donde las declaraciones del programa expresan los hechos y reglas sobre el problema en forma lógica.
  2. Paradigma de programación funcional : Los programas se crean aplicando y componiendo funciones en este paradigma.
  3. Paradigma de programación de bases de datos : Para gestionar datos e información organizada como campos, registros y archivos, se utilizan modelos de programación de bases de datos.

13. ¿Cuál es la diferencia entre programación estructurada y programación orientada a objetos?

La Programación Estructurada es una técnica que se considera precursora de la POO y generalmente consta de módulos bien estructurados y separados. Es un subconjunto de la programación procesal. La diferencia entre programación orientada a objetos y programación estructurada es la siguiente:

Programación orientada a objetos

Programación estructural

La programación orientada a objetos se basa en objetos que tienen un estado y un comportamiento.La estructura lógica de un programa la proporciona la programación estructural, que divide los programas en sus funciones correspondientes.
Sigue un enfoque de abajo hacia arriba.Sigue un enfoque de arriba a abajo.
Restringe el flujo abierto de datos a partes autorizadas únicamente proporcionando una mejor seguridad de los datos.Sin restricciones al flujo de datos. Cualquiera puede acceder a los datos.
Reutilización de código mejorada debido a los conceptos de polimorfismo y herencia.La reutilización del código se logra mediante el uso de funciones y bucles.
En esto, los métodos se escriben globalmente y las líneas de código se procesan una por una, es decir, se ejecutan secuencialmente.En esto, el método funciona dinámicamente, realizando llamadas según la necesidad de código durante un tiempo determinado.
Modificar y actualizar el código es más fácil.Modificar el código es difícil en comparación con la programación orientada a objetos.
Los datos reciben más importancia en la programación orientada a objetos.Se le da más importancia al código.

14. ¿Cuáles son algunos lenguajes de programación orientados a objetos de uso común?

El paradigma OOP es uno de los paradigmas de programación más populares. Es ampliamente utilizado en muchos lenguajes de programación populares como:

15. ¿Cuáles son los diferentes tipos de polimorfismo?

El polimorfismo se puede clasificar en dos tipos según el momento en que se resuelve la llamada al objeto o función. Son los siguientes:

  1. Polimorfismo en tiempo de compilación
  2. Polimorfismo en tiempo de ejecución
tipos de polimorfismo

Tipos de polimorfismo

A) Polimorfismo en tiempo de compilación

El polimorfismo en tiempo de compilación, también conocido como polimorfismo estático o enlace temprano, es el tipo de polimorfismo en el que la vinculación de la llamada a su código se realiza en el momento de la compilación. Sobrecarga de métodos o sobrecarga del operador son ejemplos de polimorfismo en tiempo de compilación.

B) Polimorfismo en tiempo de ejecución

También conocido como polimorfismo dinámico o enlace tardío, el polimorfismo en tiempo de ejecución es el tipo de polimorfismo donde la implementación real de la función se determina durante el tiempo de ejecución o la ejecución. Anulación del método es un ejemplo de este método.

16. ¿Cuál es la diferencia entre sobrecargar y anular?

Una característica de polimorfismo en tiempo de compilación llamada sobrecargar permite que una entidad tenga numerosas implementaciones del mismo nombre. La sobrecarga de métodos y la sobrecarga de operadores son dos ejemplos.

Primordial es una forma de polimorfismo en tiempo de ejecución donde se ejecuta una entidad con el mismo nombre pero con una implementación diferente. Se implementa con la ayuda de funciones virtuales.

17. ¿Existen limitaciones a la herencia?

Sí, hay más desafíos cuando tienes más autoridad. Aunque la herencia es una característica muy importante de la programación orientada a objetos, también tiene importantes desventajas.

  • Como debe pasar por varias clases para ser implementada, la herencia tarda más en procesarse.
  • La clase base y la clase secundaria, que participan en la herencia, también están estrechamente relacionadas entre sí (lo que se denomina estrechamente acoplado). Por lo tanto, si es necesario realizar cambios, es posible que sea necesario realizarlos en ambas clases al mismo tiempo.
  • Implementar la herencia también puede resultar difícil. Por lo tanto, si no se implementa correctamente, esto podría dar lugar a errores imprevistos o resultados inexactos.

18. ¿Qué diferentes tipos de herencia existen?

La herencia se puede clasificar en 5 tipos que son los siguientes:

tipos de herencia
  1. Herencia única: Clase secundaria derivada directamente de la clase base.
  2. Herencia múltiple: Clase secundaria derivada de múltiples clases base.
  3. Herencia multinivel: Clase secundaria derivada de la clase que también se deriva de otra clase base.
  4. Herencia jerárquica: Varias clases secundarias derivadas de una única clase base.
  5. Herencia híbrida: Herencia que consta de múltiples tipos de herencia de los especificados anteriormente.

Nota: El tipo de herencia admitida depende del idioma. Por ejemplo, Java no admite herencia múltiple.

19. ¿Qué es una interfaz?

Un tipo de clase único conocido como interfaz contiene métodos pero no sus definiciones. Dentro de una interfaz, sólo se permite la declaración de métodos. No puedes crear objetos usando una interfaz. En su lugar, debe poner en uso esa interfaz y especificar los procedimientos para hacerlo.

20. ¿En qué se diferencia una clase abstracta de una interfaz?

Tanto las clases abstractas como las interfaces son tipos especiales de clases que solo incluyen la declaración de los métodos, no su implementación. Sin embargo, una clase abstracta es completamente distinta de una interfaz. A continuación se presentan algunas diferencias importantes entre una clase abstracta y una interfaz.

Clase abstracta

Interfaz

Sin embargo, cuando se hereda una clase abstracta, no se requiere que la subclase proporcione la definición del método abstracto hasta que la subclase realmente lo use.Cuando se implementa una interfaz, se requiere que la subclase especifique todos los métodos de la interfaz, así como su implementación.
Una clase abstracta puede tener métodos tanto abstractos como no abstractos.Una interfaz sólo puede tener métodos abstractos.
Una clase abstracta puede tener variables finales, no finales, estáticas y no estáticas.La interfaz solo tiene variables estáticas y finales.
La clase abstracta no admite herencia múltiple.Una interfaz admite herencia múltiple.

21. ¿Cuánta memoria ocupa una clase?

Las clases no utilizan memoria. Simplemente sirven como plantilla a partir de la cual se fabrican los artículos. Ahora, los objetos en realidad inicializan los miembros y métodos de la clase cuando se crean, utilizando memoria en el proceso.

22. ¿Siempre es necesario crear objetos desde la clase?

No. Si la clase base incluye métodos no estáticos, se debe construir un objeto. Pero no es necesario generar objetos si la clase incluye métodos estáticos. En este caso, puede usar el nombre de la clase para llamar directamente a esos métodos estáticos.

23. ¿Cuál es la diferencia entre una estructura y una clase en C++?

La estructura también es un tipo de datos definido por el usuario en C++ similar a la clase con las siguientes diferencias:

  • La principal diferencia entre una estructura y una clase es que en una estructura, los miembros están configurados como públicos de forma predeterminada, mientras que en una clase, los miembros son privados de forma predeterminada.
  • La otra diferencia es que usamos estructura para declarar estructura y clase para declarar una clase en C++.

24. ¿Qué es Constructor?

Un constructor es un bloque de código que inicializa el objeto recién creado. Un constructor se parece a un método de instancia, pero no es un método porque no tiene un tipo de retorno. Generalmente es el método que tiene el mismo nombre que la clase, pero en algunos idiomas puede diferir. Por ejemplo:

En Python, un constructor se llama __caliente__.

En C++ y Java, el constructor tiene el mismo nombre que el nombre de la clase.

Ejemplo:

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

25. ¿Cuáles son los distintos tipos de constructores en C++?

La clasificación más común de constructores incluye:

  1. Constructor predeterminado
  2. Constructor no parametrizado
  3. Constructor parametrizado
  4. Constructor de copias

1. Constructor predeterminado

El constructor predeterminado es un constructor que no acepta ningún argumento. Es un constructor no parametrizado que el compilador define automáticamente cuando no se proporciona una definición explícita del constructor.

Inicializa los miembros de datos a sus valores predeterminados.

2. Constructor no parametrizado

Es un constructor definido por el usuario que no tiene argumentos ni parámetros.

Ejemplo:

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

3. Constructor parametrizado

Los constructores que toman algunos argumentos se conocen como constructores parametrizados.

Ejemplo:


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

4. Copiar constructor

Un constructor de copia es una función miembro que inicializa un objeto usando otro objeto de la misma clase.

Ejemplo:

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


En Python, no tenemos constructores de copia integrados como Java y C++, pero podemos solucionarlo utilizando diferentes métodos.

26. ¿Qué es un destructor?

Un destructor es un método que se llama automáticamente cuando el objeto queda fuera de alcance o se destruye.

En C++, el nombre del destructor también es el mismo que el nombre de la clase pero con el ( ~ ) tilde symbol como prefijo.

En Python, el destructor se llama __del__ .

Ejemplo:

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


En Java, el recolector de basura elimina automáticamente los objetos inútiles, por lo que no existe el concepto de destructor en Java. Podríamos haber utilizado el método finalize() como solución alternativa para el destructor de Java, pero también está en desuso desde Java 9.

27. ¿Podemos sobrecargar el constructor de una clase?

Sí, podemos sobrecargar el constructor de una clase en Java. La sobrecarga de constructores se realiza cuando queremos un constructor con un constructor diferente con un parámetro diferente (Número y Tipo).

28. ¿Podemos sobrecargar el destructor de una clase?

No. Un destructor no se puede sobrecargar en una clase. Sólo puede haber un destructor presente en una clase.

29. ¿Qué es la función virtual?

Una función virtual es una función que se utiliza para anular un método de la clase principal en la clase derivada. Se utiliza para proporcionar abstracción en una clase.

En C++, una función virtual se declara usando la palabra clave virtual,

En Java, cada método público, no estático y no final es una función virtual.

Los métodos de Python siempre son virtuales.

Ejemplo:

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

30. ¿Qué es la función virtual pura?

Una función virtual pura, también conocida como función abstracta, es una función miembro que no contiene ninguna declaración. Esta función se define en la clase derivada si es necesario.

Ejemplo:

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


En Python, logramos esto usando @abstractmethod del módulo ABC (Clase base abstracta).

Pregunta extra

Que es una clase abstracta?

En términos generales, una clase abstracta es una clase destinada a ser utilizada para herencia. No se puede crear una instancia. Una clase abstracta puede constar de métodos tanto abstractos como no abstractos.

En C++, una clase abstracta es una clase que contiene al menos una función virtual pura.

En Java, una clase abstracta se declara con una abstracto palabra clave.

Ejemplo:

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


En Python, usamos el módulo ABC (Clase base abstracta) para crear una clase abstracta.

Debe referirse:

  1. POO en C++
  2. POO en Java
  3. POO en Python
  4. Clases y objetos en C++
  5. Clases y objetos en Java
  6. Clases y objetos en Python
  7. Introducción a los paradigmas de programación
  8. Interfaz en Java
  9. Clase abstracta en Java
  10. Preguntas de la entrevista sobre C++