# Soyutlama katmanı
Bilişim sistemlerinde, bir soyutlama katmanı veya soyutlama seviyesi, bir alt sistemin çalışma ayrıntılarını gizlemenin bir yoludur. Soyutlama katmanlarını kullanan yazılım modellerine örnek olarak, ağ protokolü için OSI modeli, OpenGL ve diğer grafik kütüphaneleri verilebilir. Bu katmanlar, kaygıların ayrılması ilkesine dayanarak birlikte çalışabilirlik ve platform bağımsızlığı sağlar.
Bilgisayar biliminde soyutlama katmanı, herhangi bir belirli uygulamadan bağımsız olarak bir kavramsal modelin veya algoritmanın genelleştirilmesidir. Bu genelleştirmeler, çeşitli uygulamalarda ortak olarak gözlemlenen benzerliklerin en iyi şekilde ifade edildiği modellerle ortaya çıkar. İyi tasarlanmış bir soyutlama katmanı, işe yarar bir kavramı veya tasarım desenini sadeleştirerek yeniden kullanılmasını kolaylaştırır. Alt seviyedeki öğeleri bir araya getirmek, ancak kullanıcıyı bu öğelerin karmaşıklığından izole ediyorsa bir soyutlama katmanı sayılır.
Bir katman, diğerine bağımlıysa onun üzerinde kabul edilir. Her katman, üstündeki katmanlar olmadan var olabilir; ancak çalışması için altındaki katmanlara ihtiyaç duyar. Soyutlama katmanları genellikle hiyerarşik bir yapı oluşturacak şekilde düzenlenebilir. OSI modeli yedi soyutlama katmanından oluşur. Modelin her katmanı, sayısal iletişimin farklı bir yönünü kapsar ve böylece ilgili mühendislik çözümlerinin karmaşıklığını azaltır.
David Wheeler'a atfedilen ünlü bir söz, "Bilgisayar bilimindeki tüm sorunlar, bir başka dolaylılık seviyesi ile çözülebilir" şeklindedir. Bu söz genellikle yanlış biçimde "soyutlama" ile değiştirilerek aktarılır.


## Bilgisayar mimarisi.
Bilgisayar mimarisi kapsamında bir bilgisayar sistemi genellikle aşağıdaki soyutlama seviyeleriyle temsil edilir:
  - yazılım
  - programlanabilir mantık
  - donanım
Programlanabilir mantık genellikle donanımın bir parçası olarak kabul edilirken, tanımları bazen bir cihazın yazılımı veya donanım yazılımı (firmware) olarak da görülebilir. Donanım yazılımı yalnızca düşük seviyeli yazılımı içerebilir ancak bazen işletim sistemi ve uygulamalar dahil tüm yazılımları da kapsayabilir. Yazılım katmanları; donanım soyutlama katmanları, fiziksel ve mantıksal aygıt sürücüleri, dosya sistemleri gibi depolama birimleri, işletim sistemi çekirdeği, ara katman yazılımı, uygulamalar ve diğer bileşenlere ayrılabilir. Ayrıca, VHDL, makine dili, assembly dili gibi düşük seviyeli dillerden; derlenen dil, yorumlanan dil ve betik dili gibi dillere geçiş de bir soyutlama olarak değerlendirilebilir.


## Girdi ve çıktı.
Unix işletim sisteminde çoğu giriş ve çıkış işlemi, bir aygıttan okunan veya bir aygıta yazılan bayt akışları olarak değerlendirilir. Bu bayt akışı modeli; dosya, soket ve terminal G/Ç işlemlerinde cihazdan bağımsızlık sağlamak için kullanılır. Bir uygulama düzeyinde cihaza okuma/yazma yapmak için, program cihazı açmak üzere bir işlev çağırır. Bu cihaz, gerçek bir aygıt (örneğin bir terminal) ya da sanal bir cihaz (örneğin bir dosya veya ağ bağlantı noktası) olabilir. Aygıtın fiziksel özellikleri, işletim sistemi tarafından soyutlanarak programcının yalnızca bayt okuma ve yazma işlemleriyle ilgilenmesi sağlanır. İşletim sistemi ise bu soyutlamayı gerçek donanıma uygun işlemlere dönüştürür.


## Grafikler.
Çoğu grafik kütüphanesi (örneğin OpenGL), bir grafik cihazı modelini soyutlama arayüzü olarak sağlar. Programcı tarafından verilen komutlar, kütüphane tarafından aygıtın ihtiyaç duyduğu özel komutlara çevrilir. Örneğin, bir çizici (plotter) için gerekli komutlar ile bir CRT monitör için gerekenler farklıdır. Ancak grafik kütüphaneleri bu farklılıkları soyutlayarak, genel olarak geçerli çizim komutları (örneğin çizgi, çokgen gibi ilkel şekiller sunar.