First 50 of 200 questions. Each one lists the choices, the correct answer, and an explanation. The checker at the top of this page saves progress in this browser when it is available.
Continue in the practice tool above to load more questions, 50 at a time.
Question 1Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el diseño de software, el principio de responsabilidad única (SRP) establece que una clase debe tener:
- una sola razón para cambiar, es decir, un único actor o stakeholder al que sirve Correct answer.
- una única dependencia externa inyectada por constructor
- un único método público y ningún atributo de instancia
- una sola instancia en todo el sistema durante su ciclo de vida
Explanation
SRP se formula como que un módulo debe ser responsable ante un solo actor, de modo que solo exista una razón de negocio para modificarlo. No limita el número de métodos ni impone unicidad de instancias, que corresponden a otros conceptos.
Question 2Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un equipo detecta que al modificar el cálculo de impuestos se rompe también el módulo de generación de reportes PDF. ¿Qué principio SOLID se está violando con mayor claridad?
- Principio de inversión de dependencias
- Principio de sustitución de Liskov
- Principio de responsabilidad única Correct answer.
- Principio de segregación de interfaces
Explanation
Dos responsabilidades distintas, cálculo fiscal y generación de reportes, están acopladas en una misma unidad, por lo que un cambio en una afecta a la otra. SRP busca que cada módulo tenga un solo motivo de cambio para aislar el impacto.
Question 3Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el patrón Observer, el sujeto notifica a sus observadores principalmente para:
- permitir que los observadores modifiquen el estado interno del sujeto sin encapsulación
- desacoplar al sujeto de los objetos interesados en sus cambios de estado Correct answer.
- serializar el estado del sujeto antes de cada notificación
- garantizar que las notificaciones se ejecuten dentro de una transacción ACID
Explanation
Observer define una dependencia uno a muchos donde el sujeto solo conoce una interfaz de observador y no las clases concretas. Así, nuevos interesados se suscriben sin modificar al sujeto.
Question 4Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Una aplicación necesita crear familias de objetos relacionados (botones y ventanas) sin especificar sus clases concretas y garantizando que toda la familia sea coherente. ¿Qué patrón es el más adecuado?
- Abstract Factory Correct answer.
- Builder
- Chain of Responsibility
- Prototype
Explanation
Abstract Factory declara una interfaz para crear cada producto de una familia y las fábricas concretas aseguran la compatibilidad entre productos. Builder se centra en la construcción paso a paso de un objeto complejo, no en familias.
Question 5Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En una arquitectura hexagonal (puertos y adaptadores), el dominio de negocio debe depender de:
- los repositorios específicos de la base de datos relacional
- las interfaces de puerto definidas por el propio dominio Correct answer.
- los controladores HTTP concretos que reciben las peticiones
- el framework de inyección de dependencias elegido por el equipo
Explanation
El dominio define puertos como abstracciones propias y los adaptadores externos los implementan, invirtiendo la dirección de la dependencia. Así la lógica de negocio no conoce detalles de infraestructura.
Question 6Diseño de Software (módulo específico del programa; no enumerado en la fuente)
¿Cuál es la consecuencia directa de un acoplamiento aferente (Ca) alto en un módulo según las métricas de Martin?
- Muchos módulos dependen de él, por lo que cambiarlo tiene alto impacto Correct answer.
- El módulo es muy inestable porque nadie depende de él
- El módulo tiene baja responsabilidad y debería eliminarse
- El módulo presenta una abstracción igual a cero por definición
Explanation
El acoplamiento aferente cuenta las clases externas que dependen de la clase analizada. Un valor alto indica que muchos clientes se verían afectados por sus cambios, lo que sugiere que el módulo debería ser estable y abstracto.
Question 7Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Al aplicar refactorización, el catálogo de Fowler denomina 'Extract Method' a la técnica que consiste en:
- convertir un método público en privado para reducir la interfaz
- reemplazar un método por un objeto que encapsule su lógica
- agrupar fragmentos de código en un método cuyo nombre explique su propósito Correct answer.
- mover un método de una clase a otra clase relacionada
Explanation
Extract Method toma un bloque cohesionado dentro de un método largo y lo convierte en un método nuevo con nombre revelador. Esto mejora la legibilidad y reduce la duplicación sin cambiar el comportamiento observable.
Question 8Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un desarrollador escribe pruebas unitarias que dependen de la hora del sistema con LocalDateTime.now() dentro de la lógica. ¿Qué técnica de diseño facilita probar ese comportamiento de forma determinista?
- Aumentar el timeout de la prueba para esperar el cambio de hora
- Ejecutar la prueba solo a medianoche para controlar el valor
- Marcar la prueba como ignorada en entornos de integración
- Inyectar una abstracción de reloj (Clock) que pueda sustituirse en pruebas Correct answer.
Explanation
Introducir una abstracción de tiempo permite inyectar una implementación fija o simulada durante las pruebas. Esto elimina la dependencia de estado global no controlado y hace el resultado reproducible.
Question 9Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el contexto de la deuda técnica, la metáfora de Ward Cunningham describe la deuda como:
- la falta de documentación en el código fuente
- una decisión de diseño subóptima que genera intereses en forma de mayor costo futuro Correct answer.
- el retraso acumulado en el cronograma del proyecto
- un error de compilación que impide entregar el producto
Explanation
La deuda técnica es una metáfora financiera: aceptar un atajo hoy genera 'intereses' que se pagan con esfuerzo adicional de mantenimiento. No equivale a errores de compilación ni a simple falta de documentación.
Question 10Diseño de Software (módulo específico del programa; no enumerado en la fuente)
¿Qué describe con precisión una violación del principio de sustitución de Liskov en un diseño orientado a objetos?
- Un subtipo que hereda atributos protegidos del tipo base
- Un subtipo que redefine un método para lanzar una excepción no prevista por el contrato base Correct answer.
- Un subtipo que cumple el contrato del tipo base pero cambia la firma de un método
- Un subtipo que añade métodos nuevos que el tipo base no declara
Explanation
Liskov exige que un subtipo pueda usarse donde se espera el supertipo sin romper sus garantías. Introducir una excepción que el contrato base no contempla rompe la sustituibilidad para los clientes.
Question 11Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En un diagrama de clases UML, una relación de composición se representa con:
- una línea con una flecha triangular hueca en el extremo del supertipo
- una línea punteada con una flecha abierta
- una línea con un rombo hueco en el extremo del todo
- una línea con un rombo relleno en el extremo del todo Correct answer.
Explanation
La composición indica que el todo posee y controla el ciclo de vida de las partes, y se dibuja con un rombo relleno del lado del compuesto. La agregación usa rombo hueco y la herencia usa una flecha triangular hueca.
Question 12Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un sistema de comercio electrónico debe permitir aplicar promociones sobre un pedido y que nuevas reglas se añadan sin modificar la clase Pedido. ¿Qué solución respeta mejor el principio abierto/cerrado?
- Añadir una cadena de condicionales dentro del método calcularTotal de Pedido
- Duplicar la clase Pedido por cada promoción vigente
- Exponer los atributos del pedido para que las promociones se apliquen desde fuera
- Definir una jerarquía de estrategias de descuento que Pedido reciba como colaborador Correct answer.
Explanation
El patrón Strategy encapsula cada regla de descuento detrás de una interfaz y permite añadir nuevas sin editar Pedido. El diseño queda abierto a extensión y cerrado a modificación.
Question 13Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el patrón Repositorio, la responsabilidad principal es:
- validar las reglas de negocio antes de persistir una entidad
- mapear objetos a tablas mediante anotaciones del ORM
- ofrecer una abstracción de colección para acceder a objetos de dominio Correct answer.
- gestionar transacciones de base de datos con bloqueos pesimistas
Explanation
Repository media entre el dominio y la persistencia simulando una colección de agregados, con métodos como agregar o buscar por criterio. Los detalles de transacciones, mapeo y validación pertenecen a otras capas.
Question 14Diseño de Software (módulo específico del programa; no enumerado en la fuente)
¿Qué problema resuelve el patrón Circuit Breaker en una arquitectura de microservicios?
- Evitar que fallos repetidos de un servicio dependiente saturen al llamador Correct answer.
- Garantizar el orden de los mensajes en una cola distribuida
- Reducir el tamaño de las respuestas JSON mediante compresión
- Distribuir la carga entre varias instancias del mismo servicio
Explanation
Circuit Breaker corta las llamadas a un servicio que falla de forma persistente y permite que se recupere, evitando esperas y agotamiento de recursos en el cliente. No es un balanceador ni un mecanismo de ordenamiento de mensajes.
Question 15Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En la programación orientada a interfaces, ¿qué ventaja principal aporta depender de una abstracción en lugar de una clase concreta?
- Garantiza un mejor rendimiento en tiempo de ejecución
- Reduce el número de clases necesarias en el proyecto
- Elimina la necesidad de escribir pruebas automatizadas
- Permite sustituir implementaciones sin recompilar ni modificar el código cliente Correct answer.
Explanation
Depender de una abstracción desacopla al cliente de los detalles de implementación y permite intercambiar variantes mediante polimorfismo. No garantiza rendimiento ni elimina las pruebas; de hecho, facilita probar con dobles.
Question 16Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un equipo aplica el patrón Builder para construir un objeto Configuracion con más de doce parámetros opcionales. ¿Cuál es el beneficio directo frente a un constructor telescópico?
- Impide que el objeto Configuracion tenga atributos mutables
- Reduce el consumo de memoria del objeto construido
- Hace explícita la intención de cada parámetro y evita listas posicionales confusas Correct answer.
- Garantiza la inmutabilidad de la clase sin necesidad de encapsular atributos
Explanation
Builder encadena métodos con nombres significativos, lo que evita constructores con muchos argumentos posicionales difíciles de leer y propensos a errores. La inmutabilidad se logra con otras decisiones de diseño, no por usar Builder.
Question 17Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En un pipeline de integración continua, ¿qué práctica refleja mejor los principios de diseño de software sostenible en las pruebas?
- Ejecutar todas las pruebas de extremo a extremo en cada commit individual
- Ejecutar las pruebas solo antes de cada liberación trimestral
- Eliminar las pruebas unitarias para acelerar la retroalimentación
- Mantener una pirámide de pruebas con muchas unitarias rápidas y pocas de extremo a extremo Correct answer.
Explanation
La pirámide de pruebas equilibra velocidad y confianza: una base amplia de pruebas unitarias rápidas y una cima reducida de pruebas de integración y extremo a extremo. Esto reduce el tiempo de retroalimentación y el costo de mantenimiento.
Question 18Diseño de Software (módulo específico del programa; no enumerado en la fuente)
¿Qué característica distingue a la arquitectura de microservicios de un monolito modular?
- Los microservicios eliminan la necesidad de contratos entre componentes
- Cada microservicio se despliega de forma independiente y posee su propio estado Correct answer.
- Los microservicios siempre comparten el mismo esquema de base de datos
- El monolito modular no permite separar responsabilidades por módulos
Explanation
La independencia de despliegue y la propiedad de sus datos distinguen a los microservicios, lo que permite escalar y evolucionar cada servicio por separado. Un monolito modular también separa responsabilidades, pero se despliega como una sola unidad.
Question 19Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el contexto de los atributos de calidad, la 'modificabilidad' de un sistema se refiere a:
- la facilidad con la que el sistema admite cambios con bajo costo e impacto controlado Correct answer.
- la capacidad de atender más usuarios simultáneos sin degradación
- el tiempo que tarda el sistema en recuperarse de una caída
- la facilidad con la que un usuario nuevo aprende a usar la interfaz
Explanation
La modificabilidad es un atributo de calidad de mantenimiento que mide el costo de introducir cambios sin efectos colaterales. La escalabilidad, la disponibilidad y la usabilidad son atributos distintos.
Question 20Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un sistema debe permitir que diferentes clientes utilicen algoritmos de compresión distintos sin que el cliente conozca los detalles. ¿Qué patrón es más apropiado y por qué?
- Template Method, porque fija el esqueleto del algoritmo en la clase base
- Decorator, porque añade comportamiento dinámico al objeto compresor
- Strategy, porque encapsula algoritmos intercambiables detrás de una interfaz común Correct answer.
- Singleton, porque garantiza una única instancia del compresor
Explanation
Strategy define una familia de algoritmos, encapsula cada uno y los hace intercambiables en tiempo de ejecución. El cliente depende de la interfaz y desconoce la implementación concreta.
Question 21Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En UML, la multiplicidad '0..*' en una asociación indica que:
- el extremo debe tener exactamente una instancia
- pueden existir cero o muchas instancias en ese extremo de la relación Correct answer.
- la relación es una generalización con herencia múltiple
- la asociación es obligatoria en ambos extremos
Explanation
La multiplicidad expresa cuántas instancias pueden participar en la asociación desde un extremo. '0..*' significa cardinalidad opcional y sin límite superior, a diferencia de '1' o '1..*'.
Question 22Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Al diseñar un sistema con arquitectura por capas, ¿qué regla de dependencia se suele imponer para mantener la separación de responsabilidades?
- Todas las capas pueden depender libremente de cualquier otra
- Las capas superiores pueden depender de las inferiores, pero no al contrario Correct answer.
- La capa de presentación debe acceder directamente a la base de datos
- La capa de dominio debe depender de la capa de infraestructura
Explanation
En el estilo por capas las dependencias fluyen hacia abajo: presentación depende de aplicación, aplicación de dominio e infraestructura. Permitir dependencias ascendentes acopla los niveles y dificulta su sustitución.
Question 23Diseño de Software (módulo específico del programa; no enumerado en la fuente)
¿Cuál es el propósito del patrón Adapter en el diseño de software?
- Garantizar que una clase tenga una única instancia global
- Definir una familia de algoritmos intercambiables
- Notificar cambios de estado a múltiples interesados
- Convertir la interfaz de una clase en otra que el cliente espera Correct answer.
Explanation
Adapter permite que clases con interfaces incompatibles colaboren envolviendo al adaptado y traduciendo las llamadas. Es un patrón estructural que resuelve incompatibilidades de contrato.
Question 24Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un módulo presenta alta inestabilidad (I cercano a 1) y baja abstracción (A cercano a 0). Según el principio de estabilidad-abstracción de Martin, ¿qué recomendación es coherente?
- Mantenerlo como está, porque los módulos inestables no requieren abstracción
- Aumentar su abstracción mediante interfaces o clases abstractas para que pueda ser extendido sin cambios Correct answer.
- Eliminar todas sus dependencias salientes para reducir el acoplamiento eferente
- Convertirlo en un módulo estable incrementando las dependencias entrantes
Explanation
El principio sostiene que los módulos inestables deben ser abstractos, de modo que otros puedan extenderlos sin modificarlos. Un módulo concreto y muy inestable queda en la zona de dolor y es difícil de mantener.
Question 25Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el diseño de una API REST, ¿qué decisión refleja mejor los principios de diseño orientado a recursos?
- Devolver siempre el código 200 con el error en el cuerpo de la respuesta
- Usar verbos en la ruta, como /obtenerUsuario/5, para mayor claridad
- Incluir el estado de sesión del cliente en cada URL
- Modelar recursos con sustantivos y usar los métodos HTTP para las acciones Correct answer.
Explanation
El estilo REST identifica recursos mediante sustantivos y utiliza los métodos HTTP como semántica de la operación. Los códigos de estado deben reflejar el resultado real y las URLs no deben transportar estado de sesión.
Question 26Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En un diagrama de clases UML, una asociación con una flecha abierta en un extremo (navegabilidad) indica que:
- La clase destino es una instancia de la clase origen en tiempo de ejecución.
- Existe una dependencia de creación en la que el origen instancia al destino.
- La clase destino hereda de la clase origen.
- La clase origen contiene una referencia a la clase destino y puede navegar hacia ella. Correct answer.
Explanation
La navegabilidad en una asociación UML indica que el objeto del extremo origen puede acceder al objeto del extremo destino, normalmente mediante un atributo de referencia. No implica herencia ni creación; la creación se modela con una dependencia estereotipada «create». La dirección de la flecha muestra el sentido del acceso, no la dirección de la instanciación.
Question 27Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Al aplicar el principio de inversión de dependencias (DIP), un módulo de alto nivel debe:
- Heredar de las clases concretas que utiliza para reutilizar su código.
- Depender de módulos de bajo nivel concretos para garantizar el rendimiento.
- Depender de abstracciones, y las abstracciones no deben depender de detalles. Correct answer.
- Implementar directamente los detalles de persistencia para evitar indirecciones.
Explanation
El DIP establece que los módulos de alto nivel no deben depender de los de bajo nivel, sino de abstracciones, y que las abstracciones no deben depender de los detalles. Así se reduce el acoplamiento y se facilita sustituir implementaciones. Depender de concreciones o heredar de ellas para reutilizar código invierte incorrectamente la dirección deseada.
Question 28Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el patrón de diseño Observer, el sujeto mantiene una lista de observadores y les notifica cuando cambia su estado. ¿Qué ventaja principal aporta este patrón?
- Elimina la necesidad de interfaces entre el sujeto y los observadores.
- Sincroniza automáticamente el estado del sujeto con una base de datos relacional.
- Garantiza que las notificaciones se procesen en orden transaccional.
- Permite que los observadores se suscriban y desuscriban en tiempo de ejecución sin que el sujeto conozca sus clases concretas. Correct answer.
Explanation
Observer desacopla al sujeto de sus observadores: el sujeto solo conoce la interfaz de observador y permite registrar o eliminar suscriptores dinámicamente. Esto facilita añadir nuevas reacciones a los cambios de estado sin modificar al sujeto. No garantiza orden transaccional ni persistencia automática, y precisamente requiere una interfaz común.
Question 29Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el contexto de la arquitectura hexagonal (puertos y adaptadores), un puerto representa:
- Una interfaz que define el contrato de comunicación entre el dominio y el exterior. Correct answer.
- Un adaptador concreto que traduce entre el dominio y una tecnología externa.
- Una capa de presentación que renderiza las vistas del usuario.
- Un módulo de configuración de despliegue del contenedor de aplicaciones.
Explanation
En la arquitectura hexagonal, los puertos son interfaces que expresan las necesidades del dominio o los servicios que este ofrece, y los adaptadores son las implementaciones concretas que conectan con tecnologías externas. El puerto pertenece al núcleo y no conoce detalles tecnológicos. Por eso no es un adaptador ni una capa de presentación.
Question 30Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el diseño de una API REST, el uso correcto de los métodos HTTP implica que una operación idempotente:
- Solo se implementa con el método POST, porque crea recursos nuevos.
- Puede repetirse varias veces produciendo el mismo efecto observable en el servidor. Correct answer.
- Debe modificar el estado del recurso en cada repetición para reflejar el cambio.
- Requiere que el cliente envíe un token de idempotencia en cada solicitud.
Explanation
La idempotencia significa que aplicar la misma solicitud varias veces tiene el mismo efecto observable que aplicarla una vez; PUT y DELETE son idempotentes por definición, mientras que POST no lo es. No exige modificar el estado en cada repetición ni un token adicional, aunque los tokens de idempotencia pueden usarse como técnica complementaria en POST.
Question 31Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el patrón de diseño Strategy, el contexto delega el algoritmo en un objeto estrategia. ¿Qué principio de diseño se ve favorecido principalmente?
- El principio de responsabilidad única, al eliminar todas las interfaces del sistema.
- El principio de abierto/cerrado, al permitir añadir nuevas estrategias sin modificar el contexto. Correct answer.
- El principio de sustitución de Liskov, al prohibir la herencia entre estrategias.
- El principio de inversión de dependencias, al obligar a usar clases abstractas en lugar de interfaces.
Explanation
Strategy encapsula algoritmos intercambiables detrás de una interfaz común, de modo que el contexto no cambia cuando se añade una nueva estrategia; esto materializa el principio abierto/cerrado. No elimina interfaces ni prohíbe la herencia, y la inversión de dependencias se puede lograr con interfaces o clases abstractas indistintamente.
Question 32Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En un pipeline de integración continua, ¿qué práctica refleja mejor el diseño de software sostenible en el tiempo?
- Ejecutar todas las pruebas manualmente antes de cada liberación para reducir el costo de infraestructura.
- Desplegar directamente a producción sin pruebas automatizadas para acelerar la entrega.
- Permitir que cada desarrollador mantenga su propia rama de larga duración sin integrarla.
- Automatizar la compilación y las pruebas en cada cambio, con retroalimentación rápida al equipo. Correct answer.
Explanation
La integración continua sostenible se basa en automatizar compilación y pruebas en cada cambio para detectar defectos temprano y mantener el código integrado. Esto reduce el costo de corrección y evita la degradación del diseño. Las ramas de larga duración y la ausencia de pruebas automatizadas aumentan el riesgo y la deuda técnica.
Question 33Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un equipo detecta que una clase Cliente contiene lógica de cálculo de impuestos, acceso a base de datos y formateo de reportes. ¿Qué principio SOLID se está violando de forma más directa?
- El principio de sustitución de Liskov, porque la clase no puede sustituir a sus subclases.
- El principio de segregación de interfaces, porque la clase implementa demasiados métodos.
- El principio de abierto/cerrado, porque la clase no puede extenderse sin modificarse.
- El principio de responsabilidad única, porque la clase tiene varias razones para cambiar. Correct answer.
Explanation
Una clase que mezcla cálculo de impuestos, persistencia y formateo tiene varias responsabilidades y, por tanto, varias razones para cambiar, lo que viola el SRP. La segregación de interfaces se refiere a interfaces específicas para clientes, y abierto/cerrado a la extensibilidad; ninguno describe mejor esta mezcla de responsabilidades. La sustitución de Liskov regula la relación entre subtipos y supertipos.
Question 34Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En un sistema de reservas, la clase Reserva depende directamente de una clase concreta MySQLReservaDAO. Para cumplir el principio de inversión de dependencias, la refactorización más adecuada es:
- Introducir una interfaz ReservaRepository que Reserva use y que MySQLReservaDAO implemente. Correct answer.
- Sustituir MySQLReservaDAO por una clase abstracta que herede de Reserva.
- Hacer que Reserva herede de MySQLReservaDAO para reutilizar sus métodos.
- Mover la lógica de acceso a datos dentro de Reserva para eliminar la dependencia externa.
Explanation
El DIP propone que el módulo de alto nivel (Reserva) dependa de una abstracción (ReservaRepository) y que el detalle (MySQLReservaDAO) implemente esa abstracción. Así se invierte la dirección de la dependencia y se facilita cambiar la persistencia. Heredar de la clase concreta o mover la persistencia dentro de Reserva aumenta el acoplamiento y mezcla responsabilidades.
Question 35Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En UML, una relación de dependencia entre dos clases se representa con:
- Una línea discontinua con una flecha abierta que apunta a la clase de la que se depende. Correct answer.
- Una línea continua con un rombo relleno en el extremo de la clase contenedora.
- Una línea continua con una flecha abierta que apunta a la clase asociada.
- Una línea continua con un triángulo hueco que apunta a la superclase.
Explanation
La dependencia en UML se dibuja con una línea discontinua y una flecha abierta hacia el elemento del que se depende, e indica que un cambio en el destino puede afectar al origen. La asociación usa línea continua con flecha de navegabilidad, la herencia usa triángulo hueco y la composición usa rombo relleno. Por eso las demás opciones corresponden a otras relaciones.
Question 36Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un equipo aplica el patrón Repository para desacoplar el dominio de la persistencia. ¿Qué responsabilidad corresponde típicamente al repositorio?
- Validar las reglas de negocio del agregado antes de guardarlo.
- Ofrecer una interfaz de colección para acceder y persistir agregados, ocultando los detalles de almacenamiento. Correct answer.
- Gestionar las transacciones distribuidas entre microservicios.
- Renderizar las vistas que muestran los datos del agregado al usuario.
Explanation
El patrón Repository actúa como una abstracción de colección sobre los agregados, proporcionando operaciones de consulta y persistencia sin exponer los detalles tecnológicos de la base de datos. Las reglas de negocio pertenecen al dominio, la renderización a la presentación y las transacciones distribuidas a la infraestructura o a la coordinación de servicios. Así se mantiene separado el modelo de dominio del acceso a datos.
Question 37Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el diseño de una API REST, un cliente necesita actualizar parcialmente un recurso sin reemplazar todos sus campos. ¿Qué método HTTP es el más adecuado según su semántica estándar?
- PATCH, porque aplica modificaciones parciales al recurso. Correct answer.
- POST, porque crea un subrecurso con los cambios.
- PUT, porque reemplaza el recurso completo con la representación enviada.
- DELETE, porque elimina los campos que no se envían.
Explanation
PATCH se define para aplicar modificaciones parciales a un recurso, enviando solo los cambios deseados. PUT reemplaza la representación completa del recurso, por lo que omitir campos puede borrarlos o sobrescribirlos. POST se usa para crear o procesar entidades y DELETE para eliminar el recurso, no para actualizar campos.
Question 38Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el patrón de diseño Adapter, ¿cuál es el propósito principal?
- Añadir responsabilidades a un objeto dinámicamente sin modificar su clase.
- Garantizar que una clase tenga una única instancia y un punto de acceso global.
- Convertir la interfaz de una clase en otra que el cliente espera, permitiendo colaborar a clases con interfaces incompatibles. Correct answer.
- Definir una familia de algoritmos intercambiables y encapsular cada uno.
Explanation
Adapter actúa como puente entre una interfaz existente y la que el cliente espera, envolviendo al adaptado para traducir las llamadas. Strategy encapsula algoritmos intercambiables, Singleton controla la instanciación y Decorator añade responsabilidades dinámicamente. Por eso la opción correcta describe la esencia estructural del adaptador.
Question 39Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un arquitecto evalúa un módulo con inestabilidad I = 0.9 y abstracción A = 0.1. Según el principio de estabilidad de Martin, este módulo se encuentra en:
- La zona de dolor, porque es altamente abstracto y estable.
- La zona de estabilidad, porque su inestabilidad es baja.
- La zona principal de la secuencia, porque cumple la relación A + I = 1.
- La zona de inutilidad, porque es altamente concreto e inestable. Correct answer.
Explanation
Con I cercano a 1 y A cercano a 0, el módulo es concreto y depende de muchos otros, pero nadie depende de él; Martin lo ubica en la zona de inutilidad. La zona de dolor corresponde a alta abstracción y baja inestabilidad, y la secuencia principal exige que A + I se acerque a 1, lo que aquí no ocurre porque 0.1 + 0.9 = 1.0 sí, pero la zona de inutilidad se define por los valores extremos de A bajo e I alto. La respuesta correcta es la zona de inutilidad.
Question 40Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el contexto de la deuda técnica, un equipo decide posponer la refactorización de un módulo para cumplir una fecha de entrega. ¿Qué implica esta decisión desde la perspectiva del diseño?
- Impide que el equipo pueda aplicar pruebas automatizadas en el futuro.
- Convierte automáticamente la deuda en un defecto funcional reportado por el usuario.
- Genera intereses: el costo de mantener y modificar el módulo aumentará si la deuda no se paga. Correct answer.
- Elimina la deuda técnica porque la entrega se completa a tiempo.
Explanation
La metáfora de la deuda técnica implica que posponer una solución de diseño genera intereses, es decir, un costo creciente de mantenimiento y cambio. No elimina la deuda ni la convierte automáticamente en un defecto funcional, y no impide por sí misma adoptar pruebas automatizadas. La decisión debe gestionarse y pagarse antes de que los intereses sean excesivos.
Question 41Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Al diseñar una jerarquía de clases, una subclase sobrescribe un método de la superclase y lanza una excepción no declarada por el método original. ¿Qué principio SOLID se ve más directamente comprometido?
- El principio de abierto/cerrado, porque la subclase modifica el comportamiento heredado.
- El principio de segregación de interfaces, porque la subclase no implementa todos los métodos.
- El principio de sustitución de Liskov, porque la subclase no puede usarse en lugar de la superclase sin alterar el contrato. Correct answer.
- El principio de responsabilidad única, porque la subclase tiene más de una responsabilidad.
Explanation
El principio de sustitución de Liskov exige que un subtipo pueda reemplazar a su supertipo sin romper el contrato establecido; lanzar una excepción no declarada rompe ese contrato y afecta a los clientes que usan la superclase. La segregación de interfaces se refiere a interfaces específicas, y la responsabilidad única a la cohesión de la clase. Abierto/cerrado se refiere a extender sin modificar, pero la violación contractual descrita es propia de LSP.
Question 42Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En una arquitectura de microservicios, el patrón Circuit Breaker evita que un servicio siga invocando a una dependencia que está fallando. ¿Qué estado del circuito permite probar si la dependencia se ha recuperado?
- Estado de reinicio, porque reinicia el servicio dependiente de forma automática.
- Estado semiabierto, porque deja pasar un número limitado de solicitudes de prueba. Correct answer.
- Estado abierto, porque rechaza todas las solicitudes inmediatamente.
- Estado cerrado, porque permite el paso normal de todas las solicitudes.
Explanation
El Circuit Breaker pasa a estado abierto cuando detecta fallos y rechaza llamadas; tras un tiempo de espera entra en estado semiabierto, donde permite un número limitado de solicitudes para comprobar si la dependencia se recuperó. Si las pruebas tienen éxito, vuelve a cerrado; si fallan, regresa a abierto. El estado cerrado es el funcionamiento normal y el abierto no prueba la recuperación.
Question 43Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el diseño de software, el principio de segregación de interfaces (ISP) recomienda:
- Crear interfaces grandes y completas para reducir el número de archivos del proyecto.
- Obligar a todas las clases a implementar todos los métodos de una interfaz común.
- Sustituir todas las interfaces por clases abstractas para facilitar la herencia.
- Dividir las interfaces amplias en interfaces más pequeñas y específicas para cada cliente. Correct answer.
Explanation
El ISP sostiene que ningún cliente debe verse obligado a depender de métodos que no utiliza; por eso conviene definir interfaces pequeñas y orientadas a cada cliente. Interfaces grandes obligan a implementaciones vacías o excepciones, lo que indica un diseño deficiente. No se trata de reducir archivos ni de sustituir interfaces por clases abstractas.
Question 44Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un equipo necesita que un objeto pueda añadir responsabilidades adicionales en tiempo de ejecución sin modificar su clase ni afectar a otras instancias. ¿Qué patrón de diseño es el más adecuado?
- Decorator, porque envuelve al objeto y añade comportamiento de forma dinámica. Correct answer.
- Observer, porque notifica cambios a los objetos suscritos.
- Facade, porque simplifica el acceso a un subsistema complejo.
- Singleton, porque garantiza una única instancia del objeto.
Explanation
Decorator permite envolver un objeto con uno o más decoradores que implementan la misma interfaz y añaden responsabilidades en tiempo de ejecución sin modificar la clase original. Singleton controla la instanciación, Facade simplifica el acceso a un subsistema y Observer gestiona notificaciones. Solo Decorator satisface el requisito de añadir comportamiento dinámicamente.
Question 45Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el diseño de una API REST, un recurso Pedido expone la operación para cancelar un pedido. ¿Qué diseño se alinea mejor con los principios de diseño orientado a recursos?
- Un endpoint GET /pedidos/{id}/cancelar que ejecuta la cancelación.
- Un endpoint PUT /pedidos/{id} que reemplaza el pedido por uno cancelado.
- Un endpoint POST /pedidos/{id}/cancelar que cambia el estado del pedido. Correct answer.
- Un endpoint DELETE /pedidos/{id} que elimina físicamente el pedido.
Explanation
La cancelación es una transición de estado del recurso Pedido; modelarla como un subrecurso de acción con POST es una práctica aceptada cuando la operación no encaja en la semántica de los métodos CRUD. GET no debe usarse para modificar estado, DELETE elimina el recurso en lugar de cancelarlo y PUT reemplaza la representación completa, lo que no expresa la intención de cancelar. Por eso la opción del subrecurso de acción es la más alineada.
Question 46Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el contexto de los atributos de calidad, la interoperabilidad de un sistema se refiere a:
- El tiempo que tarda el sistema en recuperarse de un fallo.
- La facilidad con la que el sistema puede modificarse para corregir defectos.
- La facilidad con la que un usuario puede aprender a usar el sistema.
- La capacidad de intercambiar información y utilizar la información intercambiada con otros sistemas. Correct answer.
Explanation
La interoperabilidad es la capacidad de dos o más sistemas para intercambiar información y utilizarla de forma efectiva, generalmente mediante interfaces y formatos acordados. La modificabilidad se refiere al cambio, la disponibilidad o recuperabilidad al tiempo de recuperación y la usabilidad al aprendizaje por parte del usuario. Por eso la definición correcta es la del intercambio y uso de información.
Question 47Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un sistema debe permitir que diferentes clientes utilicen algoritmos de compresión distintos sin que el cliente conozca la implementación concreta. ¿Qué patrón de diseño resuelve este requisito de forma más directa?
- Singleton, porque garantiza que solo exista una instancia del compresor.
- Strategy, porque define una familia de algoritmos encapsulados e intercambiables. Correct answer.
- Proxy, porque controla el acceso al objeto compresor.
- Facade, porque oculta la complejidad de un subsistema de compresión.
Explanation
Strategy encapsula cada algoritmo de compresión detrás de una interfaz común, de modo que el cliente selecciona la estrategia sin conocer su implementación. Singleton no ofrece variación de algoritmos, Facade simplifica el acceso a un subsistema pero no necesariamente permite intercambiar algoritmos, y Proxy controla el acceso. Por tanto, Strategy es el patrón que satisface directamente el requisito.
Question 48Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En el contexto de la arquitectura por capas, la regla de dependencia entre capas establece que:
- Las capas superiores pueden depender de las inferiores, pero las inferiores no deben depender de las superiores. Correct answer.
- Todas las capas deben depender de la capa de presentación para coordinar la interfaz.
- Las capas pueden depender indistintamente entre sí siempre que se usen interfaces.
- Las capas inferiores deben conocer los detalles de la capa de negocio para optimizar consultas.
Explanation
En una arquitectura por capas, las dependencias deben dirigirse hacia las capas inferiores o hacia abstracciones estables, de modo que la presentación dependa del negocio y este de la persistencia, pero no al contrario. Permitir que las capas inferiores dependan de las superiores acopla el núcleo a los detalles de presentación. Las dependencias indiscriminadas, aunque usen interfaces, rompen la separación de preocupaciones.
Question 49Diseño de Software (módulo específico del programa; no enumerado en la fuente)
Un equipo aplica el patrón Builder para construir un objeto Configuracion con más de doce parámetros opcionales. ¿Cuál es la ventaja principal de este patrón frente a un constructor telescópico?
- Reduce el número de clases del sistema al eliminar la clase producto.
- Elimina la necesidad de validar los parámetros antes de construir el objeto.
- Garantiza que el objeto construido sea inmutable en todos sus campos.
- Permite construir el objeto paso a paso con una API fluida y evita constructores con listas largas de parámetros. Correct answer.
Explanation
Builder separa la construcción de la representación final y ofrece métodos encadenados para establecer solo los parámetros deseados, evitando constructores telescópicos difíciles de leer y propensos a errores. No elimina la validación, que sigue siendo necesaria, ni garantiza por sí mismo la inmutabilidad, aunque puede facilitarla. Tampoco elimina la clase producto, que sigue existiendo.
Question 50Diseño de Software (módulo específico del programa; no enumerado en la fuente)
En la evaluación de un diseño orientado a objetos, se afirma que un módulo cumple el principio de abierto/cerrado cuando:
- Todas sus clases son públicas y accesibles desde cualquier otro módulo.
- Su interfaz pública cambia con cada nueva funcionalidad para reflejar los requisitos.
- Su código fuente no puede modificarse una vez compilado.
- Puede extenderse con nuevo comportamiento sin modificar el código existente que ya funciona. Correct answer.
Explanation
El principio abierto/cerrado de Bertrand Meyer establece que los módulos deben estar abiertos a la extensión pero cerrados a la modificación; se logra mediante abstracciones y polimorfismo que permiten añadir comportamiento sin editar el código estable. No se refiere a la imposibilidad de recompilar ni a la visibilidad de las clases. Cambiar la interfaz pública con cada funcionalidad contradice el principio.