WorksheetsCuestionario de Programación Orientada a Objetos
Total questions: 24
Worksheet time: 12mins
¿Cuál de los siguientes es un principio fundamental de la Programación Orientada a Objetos que se refiere al agrupamiento de datos y métodos que operan sobre esos datos en una sola unidad?
Herencia
Polimorfismo
Encapsulamiento
Abstracción
¿En .NET, ¿qué palabra clave se utiliza para definir una nueva clase?
struct
interface
class
enum
¿Cuál es la función principal de un constructor en una clase de C#?
Destruir un objeto cuando ya no se necesita.
Definir métodos estáticos de la clase.
Inicializar el estado de un objeto cuando se crea.
Hacer que los miembros de la clase sean accesibles desde fuera de la clase.
¿Qué modificador de acceso permite que un miembro de clase sea accesible solo desde dentro de la propia clase?
public
protected
internal
private
¿Qué es una instancia de una clase en C#?
La definición o el plano de un objeto.
Un tipo de valor que almacena datos directamente.
Una variable que almacena un método estático.
Un objeto concreto creado a partir de una clase.
¿Cuál es la diferencia principal entre una clase abstracta y una interfaz en C#?
Una clase abstracta puede tener campos no estáticos, mientras que una interfaz no.
Las interfaces pueden tener implementaciones de métodos por defecto, mientras que las clases abstractas no.
Una clase abstracta puede implementar múltiples interfaces, pero una interfaz solo puede heredar de una clase abstracta.
Una clase abstracta fuerza a las clases derivadas a implementar todos sus métodos, mientras que una interfaz permite la implementación opcional.
¿Cómo se logra el polimorfismo en tiempo de ejecución (runtime polymorphism) en C#?
Mediante la sobrecarga de métodos (method overloading).
Utilizando la palabra clave new para ocultar un miembro de la clase base.
Empleando métodos virtual en la clase base y override en la clase derivada.
Definiendo múltiples constructores para una clase.
¿Qué problema resuelve el uso de propiedades (properties) en C# en lugar de campos públicos directos?
Permiten que los datos se almacenen en la pila en lugar del 'heap'.
Facilitan la inicialización diferida de los campos.
Proporcionan un mecanismo para controlar el acceso a los datos y añadir lógica de validación o transformación.
Mejoran el rendimiento al reducir las llamadas a métodos.
¿Qué principio de la POO se ejemplifica cuando una clase base define un contrato (a través de métodos virtuales o abstractos) que sus clases derivadas deben cumplir?
Encapsulamiento
Herencia
Polimorfismo
Abstracción
¿Qué es la inyección de dependencias (Dependency Injection - DI) y cómo contribuye al diseño POO?
Un patrón de diseño que permite que una clase herede propiedades y métodos de múltiples clases base.
Una técnica para que una clase reciba las dependencias que necesita de una fuente externa, en lugar de crearlas por sí misma.
Un método para ocultar los detalles de implementación interna de un objeto.
La capacidad de un objeto de cambiar su comportamiento en tiempo de ejecución.
¿Cuál es el propósito de la palabra clave base en C#?
Para acceder a miembros de la clase derivada.
Para invocar un constructor de la misma clase.
Para acceder a miembros de la clase
¿Cuál es el propósito de la palabra clave base en C#?
Para acceder a miembros de la clase derivada.
Para invocar un constructor de la misma clase.
Para acceder a miembros de la clase base, como constructores o métodos sobrescritos.
Para declarar que una clase es la clase raíz de una jerarquía de herencia.
¿Qué es el 'boxing' y 'unboxing' en C#?
El 'boxing' es la conversión de un tipo de referencia a un tipo de valor, y el 'unboxing' es lo contrario.
El 'boxing' es el proceso de envolver una excepción en un bloque try-catch, y el 'unboxing' es la extracción de la excepción.
El 'boxing' es la conversión de un tipo de valor a object o a un tipo de interfaz implementado por el tipo de valor, y el 'unboxing' es la conversión inversa explícita.
La 'boxing' es la compilación de código fuente a lenguaje intermedio, y el 'unboxing' es la ejecución del lenguaje intermedio.
¿Cuál es la diferencia entre un método override y un método que usa new para ocultar un método de la clase base?
override crea un nuevo método sin relación con el de la clase base, mientras que new lo reemplaza completamente.
override solo funciona con métodos estáticos, mientras que new funciona con métodos de instancia.
Cuando se usa override, el método de la clase derivada se llama incluso a través de una referencia de la clase base (polimorfismo); cuando se usa new, el método de la clase base se llama si se usa una referencia de la clase base.
override es para interfaces, y new es para clases abstractas.
¿Cómo se maneja la sobrecarga de un método abstracto en C# si una clase derivada concreta no quiere implementarlo?
La clase derivada puede simplemente no implementar el método, y el compilador lo ignorará.
La clase derivada debe ser declarada también como abstracta o proporcionar una implementación.
Puede usar la palabra clave new para ocultar el método abstracto.
Debe lanzar una NotImplementedException dentro del método.
¿Cuál de los siguientes escenarios representa mejor el Polimorfismo en tiempo de ejecución en C#?
Tener múltiples métodos con el mismo nombre pero diferente número o tipo de parámetros en una misma clase.
La capacidad de una clase derivada de proveer su propia implementación para un método virtual heredado de su clase base.
La ocultación de un método de la clase base por un nuevo método con la misma firma en la clase derivada usando la palabra clave new.
La creación de diferentes constructores para una misma clase.
En el contexto de las Interfaces, ¿qué principio de diseño se refuerza al utilizarlas para definir contratos claros sin implementación?
Principio de Abierto/Cerrado (Open/Closed Principle)
Principio de Sustitución de Liskov (Liskov Substitution Principle)
Principio de Inversión de Dependencias (Dependency Inversion Principle)
Principio de Responsabilidad Única (Single Responsibility Principle)
Si la ClaseA hereda de la ClaseB, y la ClaseB hereda de la ClaseC, ¿cuál es el orden correcto de invocación de los constructores al crear una instancia de ClaseA?
ClaseA, luego ClaseB, luego ClaseC.
ClaseC, luego ClaseB, luego ClaseA.
ClaseA, ClaseC, luego ClaseB.
El orden de invocación no está garantizado.
¿Cómo contribuye el Encapsulamiento al mantenimiento y la escalabilidad del código en un sistema .NET?
Permite que las clases derivadas modifiquen directamente el estado interno de sus clases base.
Facilita el acceso directo a todos los miembros de un objeto desde cualquier parte del código.
Oculta los detalles de implementación interna de un objeto, permitiendo cambios internos sin afectar a los usuarios externos de la clase, lo que mejora la modularidad.
Garantiza que todos los métodos de una clase sean polimórficos.
¿Cuál es la principal característica de la relación de Agrupación (también conocida como Agregación) entre objetos en POO?
Un objeto contiene a otro, y si el objeto contenedor es destruido, el contenido también lo es.
Los objetos comparten una relación "es un tipo de" (is-a-kind-of), implicando herencia.
Un objeto "tiene un" (has-a) o "usa un" (uses-a) a otro, pero los objetos pueden existir independientemente de su contenedor.
Un objeto es una implementación de un contrato definido por otro objeto.
¿Qué es la Composición en POO y cuál es su relación con la Agrupación?
La Composición es un tipo de herencia múltiple, mientras que la Agrupación es para interfaces.
La Composición es un tipo de relación "es un" (is-a), mientras que la Agrupación es una relación "tiene un" (has-a).
La Composición es una forma fuerte de Agrupación, donde la existencia del objeto contenido depende de la existencia del contenedor ("parte de todo"), implicando que si el contenedor es destruido, el contenido también lo es.
La Composición se refiere a métodos estáticos, y la Agrupación a métodos de instancia.
¿Qué beneficio clave ofrece la Herencia en la POO, más allá de la simple reutilización de código?
Asegura que todas las clases sean inmutables.
Facilita la implementación de la Inyección de Dependencias de forma automática.
Permite la creación de jerarquías de tipos, lo que habilita el polimorfismo y la especialización de comportamientos comunes.
Reduce la necesidad de modificadores de acceso.
Si tienes una interfaz IMiInterfaz y una clase MiClase que la implementa, ¿qué ocurre si MiClase no implementa todos los miembros de IMiInterfaz (y no tiene implementaciones por defecto)?
Se produce un error en tiempo de ejecución.
El compilador ignorará los miembros no implementados.
El código no compilará, ya que una clase concreta debe implementar todos los miembros de la interfaz que declara.
El compilador generará una advertencia que puede ser ignorada.
¿Cuál de los principios SOLID establece que "una entidad de software (clase, módulo, función, etc.) debe estar abierta para extensión, pero cerrada para modificación"?
Principio de Responsabilidad Única (Single Responsibility Principle)
Principio de Abierto/Cerrado (Open/Closed Principle)
Principio de Sustitución de Liskov (Liskov Substitution Principle)
Principio de Inversión de Dependencias (Dependency Inversion Principle)
