Diseño de sistemas: dos abstracciones, ocultar o reducir
The Two Abstractions of System Design: Hide or Reduce
En el diseño de sistemas, la palabra 'abstracción' esconde dos conceptos opuestos: la abstracción de modularidad, que oculta los detalles internos tras interfaces, y la abstracción de modelado, que reduce el sistema a su esencia conductual. Esta distinción es clave para entender por qué la abstracción es difícil de dominar en modelado y verificación formal. El autor explica cómo la abstracción de modelado expone la concurrencia y permite razonar sobre invariantes, y ofrece ejemplos como relojes lógicos, consenso y linearizabilidad.
La abstracción de modularidad encapsula, traza un límite vertical y oculta la capa inferior. La abstracción de modelado es transversal: corta el sistema a lo largo de un plano conductual y conserva solo lo absolutamente relevante para la propiedad investigada, y aun así en forma de 'qué', no de 'cómo'.
- BoiledCabbage
Generalmente he oído los dos conceptos discutidos como abstracción vs generalización.
La abstracción oculta detalles innecesarios. La generalización encuentra/saca a la luz la comunalidad entre elementos.
> oop - ¿Cuál es la diferencia entre abstracción y generalización? - Stack Overflow - https://stackoverflow.com/questions/19291776/whats-the-diffe...
Crear un procedimiento/método es una forma de abstracción. Permitir que acepte parámetros es una forma de generalización (al permitir que se use para un número de entradas similares).
Simplemente crear un tipo de dato entero es una forma muy simple de generalización. Permitir que las operaciones funcionen genéricamente contra cualquier entero.
- danparsonson
> La abstracción de modularidad aspira a ocultar los entrelazados y presentar las operaciones como si fueran atómicas. Su objetivo es hacer que el módulo sea fácil de usar, pero al hacerlo renuncia a exponer oportunidades de concurrencia o eficiencia.
> En marcado contraste, la abstracción de modelado se trata de identificar qué debería filtrarse y aprovecharlo. Expone las acciones y ordenamientos de grano fino, y demuestra que los invariantes se mantienen a pesar de los entrelazados. La recompensa de este trabajo es cosechar la máxima concurrencia segura del sistema.
Supongo que no entiendo el argumento aquí porque esos solo me suenan como dos sabores diferentes de la misma natilla; la diferencia es solo el equilibrio del trabajo que estás haciendo en cada lado de la interfaz, y esa decisión depende de casos de uso específicos del proyecto.
Esto se siente más como si estuviera haciendo un punto sobre el diseño de sistemas. La abstracción es abstracción: puedes aplicarla en diferentes niveles dentro de un proyecto, y una gran parte de desarrollar habilidades en el desarrollo de software es aprender a acercar y alejar el zoom y clavar la abstracción en cada etapa, pero en última instancia estás haciendo lo mismo una y otra vez. Personalmente no creo que necesitemos categorías de ello.
- sigbottle
Creo que demuestra cuán diferentes pueden ser las nociones de "compresión" (esa palabra se usa mucho hoy en día debido a la IA). A los humanos nos gusta la simplicidad, seguro, pero puede haber diferentes casos de uso para la simplicidad.