Abstraktionslager (programmering)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 26 februari 2020; kontroller kräver 3 redigeringar .

Ett abstraktionslager  är ett sätt att dölja implementeringsdetaljerna för en viss funktionalitet. Det används för att kontrollera komplexiteten hos det designade systemet under nedbrytning , när systemet representeras som en hierarki av abstraktionsnivåer.

Exempel

Exempel på programvarumodeller som använder abstraktionslager inkluderar sju-lagers OSI-modellen för kommunikationsprotokoll för datornätverk , OpenGL -grafik primitiva bibliotek, Unix byte stream I/O - modellen som används i MS DOS , Linux och många andra moderna operativsystem. .

I Unix-operativsystemet behandlas de flesta typer av I/O-operationer som strömmar av byte som läses från eller skrivs till en enhet . Denna byteströmmodell används för fil- , socket- och datorterminal- I/O för att tillhandahålla enhetsoberoende för I/O. För att läsa från och skriva till en enhet på applikationsnivå anropar programmet en enhetsöppningsfunktion, som kan motsvara en verklig enhet, såsom en terminal, eller en virtuell enhet , såsom en nätverksport eller en fil i ett filsystem . De fysiska egenskaperna hos enheten överförs till operativsystemet, vilket i sin tur ger ett abstrakt gränssnitt som gör att programmeraren kan läsa och skriva bytes till enheten. Operativsystemet utför sedan de åtgärder som krävs för att arbeta med en viss enhet.

De flesta grafikbibliotek , som OpenGL, tillhandahåller en abstrakt grafikmodell som gränssnitt. Biblioteket ansvarar för att översätta programkommandon till speciella enhetskommandon som behövs för att rita grafiska element och objekt. De plotterspecifika kommandona skiljer sig från monitorkommandona , men grafikbiblioteket döljer de enhetsspecifika implementeringsdetaljerna genom att tillhandahålla ett abstrakt gränssnitt som innehåller en uppsättning primitiver som vanligtvis används för att rita grafikobjekt.

I domänorienterad design kan en storskalig struktur (ämnesområde) använda mönstret för ansvarslager .  Till exempel kan en domänmodell delas in i nivåer (uppifrån och ned) "Beslutsstöd", "Operations" och "Produktionskapacitet", där enheter på högre nivå förlitar sig på enheter på lägre nivå, men den lägre nivån inte gör det. beror på den övre [1] .

En berömd aforism av David Wheeler säger: Alla problem inom datavetenskap kan lösas på en annan nivå på ett omvägande sätt ; [2] detta är ofta felciterat med "omväg" ersatt med "abstraktion". En fortsättning från Kevlin Henney lyder "... förutom problem med en stor nivå av inriktning."

Nivåhierarki

Ofta är abstraktionsnivåer organiserade i en hierarki av abstraktionsnivåer. OSI-nätverksmodellen innehåller sju abstraktionsnivåer. Varje lager i ISO OSI-modellen tar hänsyn till en separat del av kommunikationskraven, vilket minskar komplexiteten i de associerade tekniska besluten.

Läckande abstraktioner

Idealt sett skyddar abstraktionen helt det övre lagret från implementeringsdetaljerna i det nedre lagret. Ändå är det i mer eller mindre komplexa fall nästan omöjligt att uppnå idealet, som Joel Spolsky uttryckte i form av lagen om läckande abstraktioner[3] [4] :

Alla icke-triviala abstraktioner är fulla av hål.

Datorarkitektur

När det gäller datorarkitektur representeras ett system ofta som en modell av fem abstraktionsnivåer: datorhårdvara (se hårdvaraabstraktionslager ), firmware , assemblerspråk , operativsystemkärna och applikationer . [5]

Anteckningar

  1. Evans E. Ansvarslager // Domändriven design - tackling av komplexitet i programvarans hjärta. - Addison-Wesley, 2003. - ISBN 978-0-321-12521-7 .
  2. Diomidis Spinellis. En annan nivå av inriktning Arkiverad 26 oktober 2011 på Wayback Machine . I Andy Oram och Greg Wilson, redaktörer, Beautiful Code: Leading Programmers Explain How They Think , kapitel 17, sidorna 279-291. O'Reilly and Associates, Sebastopol, CA, 2007.
  3. Spolsky, Joel The Law of Leaky Abstractions (2002). Tillträdesdatum: 22 september 2010. Arkiverad från originalet 20 november 2016.
  4. Spolsky, Joel The Law of Leaky Abstractions (länk otillgänglig) . Hämtad 15 september 2014. Arkiverad från originalet 28 september 2014. 
  5. Andrew S. Tanenbaum . Strukturerad  datororganisation (neopr.) . — Englewood Cliffs, New Jersey: Prentice-Hall , 1979. - ISBN 0-13-148521-0 .

Länkar