option
Cuestiones
ayuda
daypo
buscar.php

Quiz-Poo-Python

COMENTARIOS ESTADÍSTICAS RÉCORDS
REALIZAR TEST
Título del Test:
Quiz-Poo-Python

Descripción:
Programación orientada a objetos en Python

Fecha de Creación: 2026/05/27

Categoría: Informática

Número Preguntas: 50

Valoración:(0)
COMPARTE EL TEST
Nuevo ComentarioNuevo Comentario
Comentarios
NO HAY REGISTROS
Temario:

¿Cuál es uno de los principales fundamentos que motivan la implementación del paradigma de Programación Orientada a Objetos (POO)?. Minimizar el uso de memoria a través de estructuras planas. Ejecutar código secuencial sin interrupciones. Usar exclusivamente métodos estáticos en lugar de atributos. Organizar el código fuente y reusar código fuente en contextos similares.

En el contexto de la POO, ¿qué son los atributos de un objeto?. Funciones que definen el comportamiento del objeto. Mensajes que se envían a otros objetos. El ámbito superior de los métodos. Variables que pertenecen a los objetos y definen sus características (estado interno).

¿Qué elemento fundamental define a un objeto, además de su tipo y su valor?. Su identidad. Su polimorfismo. Su interfaz. Su cohesión.

En Python, ¿cómo se denomina el método especial que actúa como constructor al instanciar un objeto?. __del__. __str__. __new__. __init__.

Según la POO, ¿qué concepto permite que un elemento pueda aislarse del resto y centrarse en lo que hace y no en cómo lo hace (caja negra)?. Abstracción. Polimorfismo. Encapsulación. Herencia.

Si definimos una variable mutable (como una lista) como variable de clase en Python, ¿cuál es el riesgo principal al manipularla desde una instancia?. Se lanzará automáticamente un AttributeError. El dato compartido puede tener efectos inesperados, ya que la misma lista será compartida por todas las instancias de la clase. Solo se puede acceder a ella usando métodos classmethod. La variable se convierte en inmutable para todas las instancias.

En Python, ¿qué hace el parámetro self dentro de un método de instancia?. Hace referencia al propio objeto que llama al método. Es el nombre por defecto del primer parámetro, pero puede ser omitido. Indica que el método pertenece a la clase y no a la instancia. Es una palabra reservada que indica que el método es estático.

¿Qué mecanismo, visto como protección de datos, garantiza que solo se pueda acceder al interior de un objeto mediante las operaciones que forman su barrera de abstracción?. Modularidad. Encapsulación. Abstracción. Ciudadanía de primera clase.

En Python, si un miembro (atributo o método) dentro de una clase comienza (pero no termina) con doble guion bajo (__), ¿qué tipo de visibilidad se le asigna?. Visible desde fuera de la clase, pero solo para lectura. Privada (activando el mecanismo de name mangling). Protegida por convención (_atributo). Pública (ya que los métodos mágicos usan doble guion bajo).

Para manipular el valor contenido en una variable de instancia privada desde fuera del objeto, ¿qué tipo de métodos se deben definir?. Accesores (getters) y Mutadores (setters). Métodos mágicos (__str__). Métodos de inicialización (__init__). Métodos de clase (class methods).

Considere la siguiente clase en Python: class Producto: def __init__(self, precio): self.__precio_base = precio # Atributo privado p = Producto(50) print(p.__precio_base) ¿Qué ocurrirá al ejecutar este código?. Imprimirá 50, ya que el atributo es accesible directamente. Imprimirá 50, porque en Python la visibilidad privada es solo una convención. Lanzará un ‘AttributeError’, ya que se intenta acceder a un atributo privado desde fuera de la clase. Lanzará un NameError.

¿Cuál es el principal objetivo del mecanismo de ocultamiento de información (information hiding)?. Exponer todos los detalles internos para facilitar la depuración. Garantizar que todos los atributos sean ciudadanos de primera clase. Definir la API pública de un paquete. Exponer solo lo necesario y ocultar detalles internos para reducir el acoplamiento.

¿Qué decorador de Python se utiliza típicamente para controlar acceso/validación de un valor sin cambiar la API del objeto?. @abstractmethod. @classmethod. @dataclass. @property (y su contraparte @setter).

Aplicación: Si en una clase Cuenta se define un método saldo() usando @property para devolver el _saldo, ¿cómo se accedería desde una instancia c?. c.saldo(). c.saldo. c.saldo.get(). c.get_saldo().

Un objeto que es un "ciudadano de primera clase" (first-class citizen) cumple con las siguientes características: Puede ser instanciado y destruido. Puede ser referenciado y manipularse por completo. Agrupa datos y operaciones en una sola unidad sintáctica. Puede ser pasado como argumento, devuelto como resultado de una operación y asignado a una variable.

En Python, el mecanismo de name mangling activado por __atributo está diseñado principalmente para: Crear automáticamente un método getter. Permitir que solo los métodos mágicos puedan acceder a ese atributo. Evitar colisiones de nombres en la herencia (ofuscación leve). Imponer una seguridad estricta para que nadie acceda al atributo.

En Python, un módulo se define sintácticamente como: Una carpeta que contiene un archivo __init__.py. Una función que devuelve múltiples valores. Una clase con el decorador @abstractmethod. Un archivo con extensión .py.

Para controlar qué nombres de un módulo se exponen con ‘from mi_modulo import *’, ¿qué mecanismo se utiliza dentro de mi_modulo.py?. La variable especial __all__. La función re.findall(). El prefijo de guion bajo (_). La definición de getters públicos.

Si un paquete llamado banco tiene un __init__.py que reexporta solo Cuenta y RepoEnMemoria, ¿cuál es el objetivo clave?. Asegurar que todas las clases sean abstractas. Forzar el uso de importaciones relativas. Garantizar que el paquete pueda ejecutarse como script. Ocultar la estructura interna del paquete y exportar solo la API pública.

¿Qué propiedad clave se activa al usar @dataclass(frozen=True) en un objeto?. Hace el objeto inmutable y (por defecto) hashable, permitiendo su uso como clave en diccionarios o en sets. Permite que se creen atributos dinámicos. Genera automáticamente métodos de ordenación (<, <, >). Ahorra memoria evitando el atributo __dict__.

Si defines una clase con @dataclass y omites __init__, __repr__ y __eq__, y creas p1 y p2 con los mismos campos, ¿qué da p1 == p2?. Se producirá TypeError, ya que falta __eq__. False, ya que la comparación por defecto es por identidad. True, porque @dataclass genera __eq__ y permite comparación por valor. Dependerá de si se usó frozen=True.

Cuando un campo de una dataclass es mutable (lista), ¿cuál es la forma correcta de valor por defecto para instancias independientes?. Marcar la dataclass con frozen=True. Usar tags: List[str] = []. Usar tags: List[str] = field(default_factory=list). Usar tags: List[str] = None.

¿Qué utilidad de dataclasses permite crear una nueva instancia a partir de otra aplicando cambios (ideal con frozen=True)?. replace(). __post_init__. field(default_factory=...). asdict().

Si se desea ejecutar un .py como módulo importable y como script, ¿qué bloque se usa para el comportamiento exclusivo del script?. def main(). if __name__ == "__module__":. try: except:. if __name__ == "__main__":.

En Python, ¿qué forma define contratos nominales con @abstractmethod, forzando a subclases a implementarlos?. Clases abstractas (ABCs, heredando de abc.ABC). Name mangling. Protocolos (typing.Protocol). Duck typing (convención).

Si una subclase de una ABC no implementa un @abstractmethod, ¿qué ocurre al instanciarla?. Se permite si el método tiene un cuerpo por defecto. Python lo ignora por ser duck typing. El intérprete impide la instanciación lanzando un TypeError. El método abstracto se convierte en público vacío.

¿Cuál es el orden correcto para declarar una propiedad abstracta que incluye un getter?. @abstractmethod @property def nombre(self): ... def nombre(self): @abstractmethod ... @dataclass @property def nombre(self): ... @property @abstractmethod def nombre(self): ...

¿Cuál de los siguientes escenarios es una aplicación típica de ABCs en Python?. Integrar clases de terceros que no puedes modificar. Validar tipos de datos en tiempo estático sin imponer herencia. Forzar que las subclases implementen ciertos métodos en una arquitectura de capas (ej. Repositorios). Definir estructuras de datos inmutables.

¿Cuál es una buena práctica al diseñar una interfaz o una ABC?. Incluir la lógica de acceso a datos (__init__) en la interfaz. Definir la mayor cantidad de métodos posibles para máxima flexibilidad. Usar importaciones relativas en lugar de absolutas. Mantener la interfaz mínima (favoreciendo la segregación de interfaces).

Al utilizar el patrón Template Method, la clase abstracta define: Solamente la lógica de pre-validación común. Los pasos abstractos pero no el flujo general. Las dependencias de abstracciones de bajo nivel. El esqueleto (flujo fijo) del algoritmo, mientras las subclases redefinen los pasos abstractos.

Si un método está marcado con @abstractmethod pero contiene un cuerpo, ¿qué debe hacer la subclase para poder instanciarse?. Solo si hereda también de otra ABC. Debe sobrescribir el método de todos modos o seguirá siendo abstracta. Debe llamar obligatoriamente a super() dentro del método. Puede instanciarse sin sobrescribir el método.

¿Cuál es el acrónimo de los autores del libro "Design Patterns"?. GOF (Gang of Four). SOLID. DDD. MVC.

¿A qué categoría de patrones GOF pertenece Factory Method?. Creacional. Estructural. Arquitectura. Comportamiento.

¿Qué patrón asegura que una clase tenga solo una instancia y proporciona un punto de acceso global a ella?. Singleton. Decorator. Factory Method. Adapter.

Si OldService tiene una interfaz incompatible con tu sistema, ¿qué patrón permite usarlo como "traductor"?. Composite. Strategy. Adapter (Adaptador). Decorator.

El patrón Decorator permite: Crear objetos complejos paso a paso. Proporcionar una interfaz simplificada a un subsistema complejo. Compartir instancias para minimizar memoria. Agregar dinámicamente responsabilidades/comportamientos a un objeto sin modificar su estructura original.

En una cafetería se calcula el coste de un café añadiendo ingredientes dinámicamente (leche, crema) envolviendo al objeto base. ¿Qué patrón es?. Strategy. Factory. Decorator. Singleton.

Diferentes lógicas de descuento (sin, porcentaje, fijo) seleccionadas al finalizar compra. ¿Qué patrón encaja mejor?. Factory. Singleton. Strategy. Decorator.

¿Cuál es la ventaja clave del patrón Repository?. Añadir funcionalidad a un objeto dinámicamente. Encapsular la lógica de acceso a datos, separando negocio de persistencia (mejor testabilidad). Garantizar una única instancia de la clase de datos. Definir una familia de algoritmos intercambiables.

¿Qué principio SOLID establece que las subclases deben ser sustituibles por su clase base sin alterar el funcionamiento esperado?. OCP (Open-Closed Principle). DIP (Dependency Inversion Principle). SRP (Single Responsibility Principle). LSP (Liskov Substitution Principle).

¿Qué principio SOLID indica que una clase debe tener una única razón para cambiar?. OCP (Open-Closed Principle). LSP (Liskov Substitution Principle). SRP (Single Responsibility Principle). ISP (Interface Segregation Principle).

En Python, ¿qué diferencia principal existe entre un método de clase (@classmethod) y un método estático (@staticmethod)?. El método estático recibe cls como primer parámetro; el de clase no recibe ninguno. El método de clase recibe cls (la propia clase) como primer parámetro, mientras que el estático no recibe ni self ni cls. Ambos son equivalentes; solo difieren en sintaxis. El método estático solo puede llamarse desde subclases.

¿Cuál es la salida del siguiente código? class Animal: def hablar(self): return "..." class Perro(Animal): def hablar(self): return "Guau" class Gato(Animal): def hablar(self): return "Miau" animales = [Perro(), Gato(), Animal()] for a in animales: print(a.hablar()). Error, porque Animal no puede instanciarse. "Guau", "Miau", "..." (polimorfismo). Siempre "..." (método de la clase base). TypeError.

¿Qué patrón GOF pertenece a la categoría estructural y permite componer objetos en estructuras de árbol para representar jerarquías parte-todo?. Strategy. Observer. Composite. Builder.

El principio DIP (Dependency Inversion Principle) establece que: Los módulos de alto nivel deben depender de módulos de bajo nivel directamente. Las clases concretas deben heredar siempre de otras clases concretas. Tanto los módulos de alto como de bajo nivel deben depender de abstracciones, no de detalles. Cada módulo debe tener una única dependencia externa.

En Python, ¿cuál es el resultado de usar super() dentro del __init__ de una subclase?. Crea una nueva instancia de la clase padre independiente. Llama al __init__ de la clase padre para inicializar la parte heredada del objeto. Reemplaza completamente al __init__ de la subclase. Genera un RecursionError si la clase base también usa super().

¿Qué patrón de comportamiento define una dependencia uno-a-muchos entre objetos, de modo que cuando uno cambia de estado, todos sus dependientes son notificados automáticamente?. Strategy. Command. Template Method. Observer.

Aplicación: Tienes una clase RepoArchivo y una clase RepoMemoria, ambas con los métodos guardar() y buscar(). ¿Qué mecanismo de Python garantiza en tiempo de ejecución que ambas implementen dichos métodos obligatoriamente?. Duck typing (basta con que tengan los métodos por convención). Decorador @dataclass. Hacer que ambas hereden de una ABC con @abstractmethod en guardar y buscar. Usar @staticmethod en cada método.

¿Cuál es la diferencia clave entre los patrones Factory Method y Abstract Factory?. Factory Method crea objetos de múltiples familias relacionadas; Abstract Factory crea un solo tipo de objeto. Factory Method delega la creación a subclases para un tipo de objeto, mientras que Abstract Factory crea familias de objetos relacionados sin especificar sus clases concretas. Ambos son equivalentes; solo difieren en el número de parámetros. Abstract Factory solo se aplica en lenguajes con tipado estático.

En Python, ¿qué ocurre si dos clases base en herencia múltiple definen el mismo método y una subclase hereda de ambas sin sobreescribirlo?. Se lanza un TypeError en tiempo de definición de la clase. Python usa el MRO (Method Resolution Order, C3 linearization) para determinar qué método se llama, eligiendo el de la primera clase en el orden de herencia. Se llaman ambos métodos en orden. El método queda indefinido hasta que la subclase lo implemente.

Denunciar Test