Eu argumentaria que as meta-estruturas, módulos, estruturas, plataformas e serviços são todos grupos de recursos de nível superior ao das classes. Minha hierarquia de abstrações do sistema de programação:
- Serviços
- plataformas, pilhas de soluções
- estruturas
- módulos, pacotes
- meta-estruturas: metaclasses, funções de ordem superior, genéricos, modelos, características, aspectos, decoradores
- objetos, classes, tipos de dados
- funções, procedimentos, sub-rotinas
- estruturas de controle
- linhas de código
Metaestruturas como metaclasses ,
funções de ordem superior e
genéricos
claramente adicionam abstração a classes básicas, funções, tipos de dados e instâncias de dados. Traços, aspectos e decoradores são mecanismos mais novos para combinar recursos de código e, da mesma forma, "acelerar" outras classes e funções.
Até as linguagens pré-objeto tinham módulos e pacotes, portanto, colocá-los acima das classes pode ser discutível. Mas eles contêm essas classes e meta-estruturas, então eu as classifico mais alto.
As estruturas são a resposta mais abrangente - elas orquestram várias classes, meta-estruturas, módulos, funções e outras para fornecer abstrações sofisticadas de alto nível. E, no entanto, estruturas ainda operam quase inteiramente no campo da programação.
As pilhas ou plataformas de solução geralmente combinam várias estruturas, subsistemas ou componentes em um ambiente para solucionar vários problemas.
Por fim, existem serviços - geralmente implantados como serviços da Web ou de rede. São arquiteturas, estruturas, pilhas de soluções ou recursos de aplicativos entregues como pacotes completos. Seus internos geralmente são opacos, expondo principalmente as interfaces de administrador, programação e usuário. PaaS e SaaS são exemplos comuns.
Agora, essa progressão pode não ser totalmente satisfatória, por alguns motivos. Primeiro, ele cria uma progressão ou hierarquia linear pura de coisas que não são perfeitamente lineares ou hierárquicas. Abrange algumas abstrações, como "pilhas" e serviços que não estão totalmente sob controle do desenvolvedor. E isso não representa nenhuma nova poeira mágica de duende. (Spoiler: Não há pó mágico de duende. )
Eu acho que é um erro procurar apenas novos níveis de abstração . Todos os que listei acima existem há anos , mesmo que nem todos tenham sido tão importantes ou populares como agora. E, ao longo desses anos, as abstrações possíveis em todos os níveis de codificação melhoraram. Agora temos coleções genéricas de uso geral, não apenas matrizes. Repetimos as coleções, não apenas os intervalos de índice. Temos compreensões de lista e operações de filtro e mapa de lista. Muitas funções da linguagem podem ter um número variável de argumentos e / ou argumentos padrão. E assim por diante. Estamos aumentando a abstração em todos os níveis, portanto, adicionar mais níveis não é um requisito para aumentar o nível geral de abstração.