Et abstraktionslag er en måde at skjule implementeringsdetaljerne for et bestemt sæt funktionalitet. Det bruges til at kontrollere kompleksiteten af det designede system under nedbrydning , når systemet er repræsenteret som et hierarki af abstraktionsniveauer.
Eksempler på softwaremodeller, der bruger abstraktionslag, omfatter syvlags OSI-modellen for kommunikationsprotokoller til computernetværk , OpenGL -grafikbiblioteket , Unix -bytestream I/O- modellen, der bruges i MS DOS , Linux og mange andre moderne operativsystemer. .
I Unix-operativsystemet behandles de fleste typer I/O-operationer som strømme af bytes, der læses fra eller skrives til en enhed . Denne bytestream-model bruges til fil- , socket- og computerterminal- I/O for at give enhedsuafhængighed for I/O. For at læse fra og skrive til en enhed på applikationsniveau kalder programmet en enhedsåbningsfunktion, som kan svare til en rigtig enhed, såsom en terminal, eller en virtuel enhed , såsom en netværksport eller en fil i et filsystem . Enhedens fysiske karakteristika overføres til operativsystemet, som igen giver en abstrakt grænseflade , der gør det muligt for programmøren at læse og skrive bytes til enheden. Operativsystemet udfører derefter de handlinger, der er nødvendige for at arbejde med en bestemt enhed.
De fleste grafikbiblioteker , såsom OpenGL, giver en abstrakt grafikmodel som grænseflade. Biblioteket er ansvarlig for at oversætte programkommandoer til specielle enhedskommandoer, der er nødvendige for at tegne grafiske elementer og objekter. De plotterspecifikke kommandoer er forskellige fra monitorkommandoerne , men grafikbiblioteket skjuler de enhedsspecifikke implementeringsdetaljer ved at levere en abstrakt grænseflade, der indeholder et sæt primitiver , der almindeligvis bruges til at tegne grafikobjekter.
I domæneorienteret design kan en storstilet struktur (fagområde) bruge ansvarslagsmønsteret . For eksempel kan en domænemodel opdeles i niveauer (fra top til bund) "Beslutningsstøtte", "Operations" og "Produktionskapaciteter", hvor enheder på højere niveau er afhængige af enheder på lavere niveau, men det lavere niveau ikke gør det. afhænge af den øverste [1] .
En berømt aforisme af David Wheeler siger: Alle problemer inden for datalogi kan løses på et andet niveau på en rundvejs måde ; [2] dette er ofte fejlciteret med "omvej" erstattet af "abstraktion". En fortsættelse fra Kevlin Henney lyder "... bortset fra problemer med en stor grad af indirekte."
Ofte er abstraktionsniveauer organiseret i et hierarki af abstraktionsniveauer. OSI-netværksmodellen indeholder syv abstraktionsniveauer. Hvert lag af ISO OSI-modellen betragter en separat del af kommunikationskravene, hvilket reducerer kompleksiteten af de tilknyttede tekniske beslutninger.
Ideelt set beskytter abstraktionen fuldstændigt det øvre lag fra implementeringsdetaljerne i det nederste lag. Ikke desto mindre er det i mere eller mindre komplekse tilfælde næsten umuligt at opnå idealet, som Joel Spolsky udtrykte i form af loven om utætte abstraktioner[3] [4] :
Alle ikke-trivielle abstraktioner er fulde af huller.
Med hensyn til computerarkitektur er et system ofte repræsenteret som en model af fem abstraktionsniveauer: computerhardware (se hardwareabstraktionslag ), firmware , assemblersprog , operativsystemkerne og applikationer . [5]