Un strat de abstractizare este o modalitate de a ascunde detaliile de implementare ale unui anumit set de funcționalități. Este folosit pentru a controla complexitatea sistemului proiectat în timpul descompunerii , când sistemul este reprezentat ca o ierarhie a nivelurilor de abstractizare.
Exemple de modele de software care utilizează straturi de abstractizare includ modelul OSI cu șapte straturi pentru protocoalele de comunicație în rețea de computere , biblioteca primitivă de grafică OpenGL , modelul I/O Unix de flux de octeți utilizat în MS DOS , Linux și multe alte sisteme de operare moderne. .
În sistemul de operare Unix, cele mai multe tipuri de operațiuni I/O sunt tratate ca fluxuri de octeți citiți de pe un dispozitiv sau înscriși pe un dispozitiv . Acest model de flux de octeți este utilizat pentru I/O fișier , soclu și terminal de computer pentru a oferi independență a dispozitivului pentru I/O. Pentru a citi și a scrie pe un dispozitiv la nivel de aplicație, programul apelează o funcție de deschidere a dispozitivului, care poate corespunde unui dispozitiv real, cum ar fi un terminal, sau un dispozitiv virtual , cum ar fi un port de rețea sau un fișier dintr-un sistem de fișiere . Caracteristicile fizice ale dispozitivului sunt transmise sistemului de operare, care, la rândul său, oferă o interfață abstractă care permite programatorului să citească și să scrie octeți pe dispozitiv. Sistemul de operare efectuează apoi acțiunile necesare pentru a lucra cu un anumit dispozitiv.
Majoritatea bibliotecilor de grafică , cum ar fi OpenGL, oferă un model grafic abstract ca interfață. Biblioteca este responsabilă pentru traducerea comenzilor programului în comenzi speciale pentru dispozitive necesare pentru desenarea elementelor și obiectelor grafice. Comenzile specifice plotterului sunt diferite de comenzile monitorului , dar biblioteca grafică ascunde detaliile de implementare specifice dispozitivului, oferind o interfață abstractă care conține un set de primitive utilizate în mod obișnuit pentru desenarea obiectelor grafice.
În proiectarea orientată pe domeniu, o structură pe scară largă (domeniu) poate folosi modelul straturilor de responsabilitate . De exemplu, un model de domeniu poate fi împărțit în niveluri (de sus în jos) „Suport pentru decizii”, „Operațiuni” și „Capacități de producție”, în care entitățile de nivel superior se bazează pe entități de nivel inferior, dar nivelul inferior nu depind de cel de sus [1 ] .
Un aforism celebru al lui David Wheeler spune: Toate problemele din informatică pot fi rezolvate la un alt nivel într-un mod indirect ; [2] aceasta este adesea citată greșit cu „ocol” înlocuit cu „abstracție”. O continuare a lui Kevlin Henney spune „... cu excepția problemelor cu un nivel mare de indirectă”.
Adesea, nivelurile de abstractizare sunt organizate într-o ierarhie de niveluri de abstractizare. Modelul de rețea OSI conține șapte niveluri de abstractizare. Fiecare strat al modelului ISO OSI ia în considerare o parte separată a cerințelor de comunicare, reducând astfel complexitatea deciziilor de inginerie asociate.
În mod ideal, abstracția protejează complet stratul superior de detaliile de implementare ale stratului inferior. Cu toate acestea, în cazuri mai mult sau mai puțin complexe, este aproape imposibil să se atingă idealul, pe care Joel Spolsky l-a exprimat sub forma legii abstracțiilor scurse .[3] [4] :
Toate abstracțiile non-triviale sunt pline de găuri.
În ceea ce privește arhitectura computerului, un sistem este adesea reprezentat ca un model de cinci niveluri de abstractizare: hardware de calculator (vezi stratul de abstractizare hardware ), firmware , limbaj de asamblare , nucleu de sistem de operare și aplicații . [5]