Abstraktionslag (programmering)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 26. februar 2020; checks kræver 3 redigeringer .

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

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."

Niveauhierarki

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.

Utætte abstraktioner

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.

Computerarkitektur

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]

Noter

  1. Evans E. Ansvarslag // Domænedrevet design - tackling af kompleksitet i hjertet af software. - Addison-Wesley, 2003. - ISBN 978-0-321-12521-7 .
  2. Diomidis Spinellis. Et andet indirektionsniveau Arkiveret 26. oktober 2011 på Wayback Machine . I Andy Oram og Greg Wilson, redaktører, Beautiful Code: Leading Programmers Explain How They Think , kapitel 17, side 279-291. O'Reilly and Associates, Sebastopol, CA, 2007.
  3. Spolsky, Joel The Law of Leaky Abstractions (2002). Dato for adgang: 22. september 2010. Arkiveret fra originalen 20. november 2016.
  4. Spolsky, Joel The Law of Leaky Abstractions (link utilgængeligt) . Hentet 15. september 2014. Arkiveret fra originalen 28. september 2014. 
  5. Andrew S. Tanenbaum . Struktureret computerorganisation  (neopr.) . — Englewood Cliffs, New Jersey: Prentice-Hall , 1979. - ISBN 0-13-148521-0 .

Links