Yo diría que las metaestructuras, los módulos, los marcos, las plataformas y los servicios son agrupaciones de características de nivel más alto que las clases. Mi jerarquía de abstracciones del sistema de programación:
- servicios
- plataformas, pilas de soluciones
- marcos
- módulos, paquetes
- meta estructuras: metaclases, funciones de orden superior, genéricos, plantillas, rasgos, aspectos, decoradores
- objetos, clases, tipos de datos
- funciones, procedimientos, subrutinas
- Estructuras de Control
- líneas de código
Las metaestructuras como metaclases ,
funciones de orden superior y
genéricos
añaden claramente abstracción a clases básicas, funciones, tipos de datos e instancias de datos. Los rasgos, los aspectos y los decoradores son mecanismos más nuevos para combinar características de código y, de manera similar, "aceleran" otras clases y funciones.
Incluso los lenguajes pre-objeto tenían módulos y paquetes, por lo que ponerlos por encima de las clases podría ser discutible. Pero contienen esas clases y metaestructuras, así que las clasifico más alto.
Los marcos son la respuesta más importante: organizan múltiples clases, metaestructuras, módulos, funciones y demás para proporcionar abstracciones sofisticadas de alto nivel. Y, sin embargo, los marcos siguen funcionando casi por completo en el ámbito de la programación.
Las pilas o plataformas de soluciones generalmente combinan múltiples marcos, subsistemas o componentes en un entorno para resolver múltiples problemas.
Finalmente, hay servicios, a menudo implementados como servicios web o de red. Estas son arquitecturas, marcos, pilas de soluciones o capacidades de aplicación entregadas como paquetes completos. Sus componentes internos son a menudo opacos, exponiendo principalmente las interfaces de administrador, programación e usuario. PaaS y SaaS son ejemplos comunes.
Ahora, esta progresión puede no ser del todo satisfactoria, por algunas razones. Primero, hace una ordenada progresión lineal o jerarquía de cosas que no son perfectamente lineales o jerárquicas. Cubre algunas abstracciones como "pilas" y servicios que no están completamente bajo el control del desarrollador. Y no plantea ningún nuevo polvo mágico de duendes. (Spoiler: no hay polvo mágico de duendes ) .
Creo que es un error buscar solo nuevos niveles de abstracción . Todos los que enumeré anteriormente han existido durante años , incluso si no han sido tan prominentes o populares como lo son ahora. Y durante esos años, las abstracciones posibles en todos los niveles de codificación han mejorado. Ahora tenemos colecciones genéricas de uso general, no solo matrices. Recorremos las colecciones, no solo los rangos de índice. Tenemos comprensiones de listas y filtros de listas y operaciones de mapas. Las funciones de muchos idiomas pueden tener un número variable de argumentos y / o argumentos predeterminados. Y así. Estamos aumentando la abstracción en todos los niveles, por lo que agregar más niveles no es un requisito para aumentar el nivel general de abstracción.