Conceptos Clave
Alto vs Bajo Nivel
Inyección de Dependencias
Código en Java
Ventajas del DIP
100

¿Qué significa DIP en el contexto de los principios SOLID?

Dependency Inversion Principle

100

¿Qué es un módulo de alto nivel?

Contiene la lógica de negocio principal

100

¿Qué es la inyección de dependencias?

Pasar dependencias desde fuera, en lugar de crearlas

100

¿Qué palabra clave se usa para definir una interfaz en Java?

interface

100

¿Qué mejora DIP en el diseño del software?

Flexibilidad

200

¿Cuál es el objetivo principal del DIP?

Desacoplar los módulos de alto y bajo nivel

200

¿Qué es un módulo de bajo nivel?

Se encarga de detalles como bases de datos o APIs

200

¿En qué parte del código se suele inyectar una dependencia?

En el constructor

200

¿Cómo se implementa una interfaz en una clase?

Con la palabra implements

200

¿Cómo afecta DIP a la mantenibilidad del código?

La mejora, facilita cambios

300

¿Qué es una abstracción en programación?

Una interfaz o clase abstracta

300

¿Qué ocurre cuando un módulo de alto nivel depende del bajo nivel?

Se rompe el principio DIP y hay fuerte acoplamiento

300

¿Qué tipo de dependencia rompe DIP: una clase concreta o una interfaz?

Clase concreta

300

¿Qué método debería tener la interfaz PersistenceService?

void save(User user);

300

¿Qué pasa si una implementación cambia, pero usamos DIP correctamente?

El módulo de alto nivel no necesita cambiar

400

¿Por qué es malo depender de implementaciones concretas?

Limita la flexibilidad y dificulta el mantenimiento

400

¿Qué elemento permite conectar ambos niveles sin acoplamiento directo?

Una interfaz (abstracción)

400

¿Por qué facilita la inyección de dependencias las pruebas unitarias?

Porque permite usar mocks o stubs

400

¿Dónde se rompe DIP en esta línea: this.databaseService = new ...?

Porque se instancia directamente una implementación

400

¿Qué característica del código mejora cuando se desacopla correctamente?

Reutilización y testeo

500

¿Qué otros principios forman SOLID además de DIP?

Single responsibility principle, Open/closed principle, Liskov substitution principle, Interface segregation principle

500

¿Qué ventaja tiene usar una interfaz entre alto y bajo nivel?

Permite cambiar implementaciones sin afectar el sistema

500

¿Qué patrón de diseño se relaciona con DIP e inyección de dependencias?

Inversión de control (IoC) o patrón Strategy

500

¿Qué tipo de clase se usaría en tests para reemplazar DatabaseService?

Un mock o stub

500

Cuál es el resultado final de aplicar DIP junto con el resto de SOLID?

Un sistema más limpio, escalable y mantenible