¿Qué sabes sobre la composición de clases en programación?
sobes.tech AI
Respuesta de la IA
La composición es una relación de "contiene" o "parte de", en la que una clase (composite) contiene una referencia a otra clase (componente) o a sus instancias. El ciclo de vida del componente generalmente está estrechamente ligado al ciclo de vida del composite. Es una relación fuerte donde el componente no puede existir sin el composite.
Ventajas de la composición:
- Flexibilidad: Es más fácil cambiar el comportamiento modificando los componentes.
- Reducción del acoplamiento: Las clases dependen menos unas de otras en comparación con la herencia.
- Reutilización: Se pueden usar los mismos componentes en diferentes composites.
Ejemplo: La clase Automóvil puede contener una referencia a la clase Motor. Si se destruye el Automóvil, el Motor (en este contexto) deja de existir.
class Motor {
// propiedades y métodos del motor
}
class Automovil {
private Motor motor; // composición
public Automovil() {
this.motor = new Motor(); // creación del componente dentro del composite
}
// otras propiedades y métodos del automóvil
}
Diferencia con la agregación: En la agregación, los componentes pueden existir independientemente del composite (relación débil). Ejemplo: La clase Universidad contiene referencias a instancias de la clase Estudiante. Los estudiantes pueden existir fuera de la universidad.
En el desarrollo de Android, la composición se usa activamente, por ejemplo, al crear vistas (ViewGroup contiene View), al trabajar con dependencias a través de Dagger/Hilt. Es un enfoque preferido en comparación con la herencia múltiple (que no existe en Java/Kotlin para clases) y a menudo más flexible que la herencia simple.
class UserRepository(private val apiService: ApiService) {
// UserRepository "utiliza" ApiService (composición/agregación)
fun fetchUser(userId: String) {
// apiService.getUser(userId)
}
}