¿Qué significa DIP en el contexto de los principios SOLID?
Dependency Inversion Principle
¿Qué es un módulo de alto nivel?
Contiene la lógica de negocio principal
¿Qué es la inyección de dependencias?
Pasar dependencias desde fuera, en lugar de crearlas
¿Qué palabra clave se usa para definir una interfaz en Java?
interface
¿Qué mejora DIP en el diseño del software?
Flexibilidad
¿Cuál es el objetivo principal del DIP?
Desacoplar los módulos de alto y bajo nivel
¿Qué es un módulo de bajo nivel?
Se encarga de detalles como bases de datos o APIs
¿En qué parte del código se suele inyectar una dependencia?
En el constructor
¿Cómo se implementa una interfaz en una clase?
Con la palabra implements
¿Cómo afecta DIP a la mantenibilidad del código?
La mejora, facilita cambios
¿Qué es una abstracción en programación?
Una interfaz o clase abstracta
¿Qué ocurre cuando un módulo de alto nivel depende del bajo nivel?
Se rompe el principio DIP y hay fuerte acoplamiento
¿Qué tipo de dependencia rompe DIP: una clase concreta o una interfaz?
Clase concreta
¿Qué método debería tener la interfaz PersistenceService?
void save(User user);
¿Qué pasa si una implementación cambia, pero usamos DIP correctamente?
El módulo de alto nivel no necesita cambiar
¿Por qué es malo depender de implementaciones concretas?
Limita la flexibilidad y dificulta el mantenimiento
¿Qué elemento permite conectar ambos niveles sin acoplamiento directo?
Una interfaz (abstracción)
¿Por qué facilita la inyección de dependencias las pruebas unitarias?
Porque permite usar mocks o stubs
¿Dónde se rompe DIP en esta línea: this.databaseService = new ...?
Porque se instancia directamente una implementación
¿Qué característica del código mejora cuando se desacopla correctamente?
Reutilización y testeo
¿Qué otros principios forman SOLID además de DIP?
Single responsibility principle, Open/closed principle, Liskov substitution principle, Interface segregation principle
¿Qué ventaja tiene usar una interfaz entre alto y bajo nivel?
Permite cambiar implementaciones sin afectar el sistema
¿Qué patrón de diseño se relaciona con DIP e inyección de dependencias?
Inversión de control (IoC) o patrón Strategy
¿Qué tipo de clase se usaría en tests para reemplazar DatabaseService?
Un mock o stub
Cuál es el resultado final de aplicar DIP junto con el resto de SOLID?
Un sistema más limpio, escalable y mantenible