Sobes.tech
Junior

¿En qué consiste la esencia de la abstracción?

sobes.tech AI

Respuesta de la IA

La abstracción en Flutter, al igual que en la programación en general, se reduce a ocultar implementaciones complejas y proporcionar una interfaz simplificada para la interacción. Esto se logra mediante la creación de vistas de alto nivel que ocultan los detalles subyacentes y permiten trabajar con conceptos en lugar de con implementaciones específicas.

Ideas principales:

  • Ocultación de detalles: La lógica compleja o la estructura de datos se ocultan tras una interfaz sencilla.
  • Facilitación del uso: El desarrollador interactúa con una representación abstracta sin entrar en detalles de implementación.
  • Aumento de la flexibilidad: Cambiar la implementación interna no afecta al código que usa la abstracción, siempre que la interfaz permanezca igual.
  • Reutilización: Los componentes abstractos pueden ser utilizados en diferentes partes de la aplicación.

Ejemplos en Flutter:

  • Widgets: Los widgets son abstracciones sobre elementos de la interfaz de usuario. Usamos Container, Row, Column y otros, sin conocer su implementación interna en detalle.
  • Programación asíncrona: Future y Stream abstraen el trabajo con operaciones asíncronas, ocultando los detalles del manejo de flujos y eventos.
  • Patrones arquitectónicos: El uso de patrones como BLoC, Provider o Riverpod es una forma de abstracción que separa la UI de la lógica de negocio.

Ejemplo de código usando abstracción:

// Clase abstracta para la fuente de datos
abstract class DataSource {
  Future<String> fetchData();
}

// Implementación que usa HTTP
class HttpDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Aquí va la lógica compleja de trabajo con solicitudes HTTP
    return "Datos desde HTTP";
  }
}

// Implementación que usa almacenamiento local
class LocalDataSource implements DataSource {
  @override
  Future<String> fetchData() async {
    // Aquí va la lógica compleja de trabajo con almacenamiento local
    return "Datos desde almacenamiento local";
  }
}

// Clase que usa la abstracción DataSource
class Repository {
  final DataSource dataSource;

  Repository(this.dataSource);

  Future<String> getData() {
    return dataSource.fetchData();
  }
}

En este ejemplo, Repository interactúa solo con la abstracción DataSource, sin preocuparse de dónde provienen exactamente los datos (HTTP, almacenamiento local, etc.). Esto permite cambiar fácilmente la fuente de datos sin modificar el código de Repository.