Soyutlama Katmanı ve Dolaylılık Düzeyi ayrı kavramlardır. Soyutlama, örneğin bir dosya veya yöntem çağrısı kavramı gibi veri parçaları veya program talimatları gibi bir dizi öğenin bir araya getirilmesi ve anlamlı bir şekilde adlandırılmasıdır; örneğin, JNDI'nın bir program içindeki bir kaynağın eninde sonunda bir uygulama kabı tarafından temin edilebilecek gerçek kaynaktan ayrılmasını sağlamak için kullanılması.
Genellikle kavramlar el ele gider ve hangisinin belirli bir yapı için geçerli olduğu, hangi alıştırma veya tartışmanın devam ettiğine bağlıdır. Örneğin, bir API'nin öğrenilmesi veya belgelenmesi sırasında bir arayüzün soyut doğası önemlidir; Bir uygulama için genişletilebilirlik eklerken veya testler oluştururken indirme özelliği de önemlidir.
Bir soyutlama katmanı, soyutlamaların toplanması ve onlara kavramsal bir bütünlük ve kullanım tutarlılığı sağlamasıdır. CreateProcess, bir işlem oluşturan ve yürüten bir demet kodun win32 API adıdır. "Name" bu bağlam için önemlidir, çünkü eğer fonksiyona DoAllocMemThenMakeEnvThenFindEntryPoint gibi bir şey çağırırsak, gerçekten çok soyut olmazdı. Win32 API gibi bir katman, içinden bir programcının girişmemesi önerilebilecek bir engel sağlar. Düşük güç maliyetinde (esneklik, performans vb) karmaşıklığı arayanın bakış açısından kaldırır. Bu işlem, sızdıran soyutlamaların sık sık tartışılmasıyla vurgulanmaktadır: Hazırda Beklet kullanırken doğrudan SQL çağrıları yapmamız veya .NET kullanırken Win32 çağrıları yapmamız gerekebilir.
İndirme ile ilgili olarak, çoğu önemsiz program bazı kullanıcı kodlu dolaylı yöntemlerle çalışır, COBOL'un GİRİŞ-ÇIKIŞ bölümüne gemiden önceki bölümlere tanıklık eder. Veri tabanı gibi bir kaynağa erişirken, koddaki bir JDBC bağlantı dizesinin Seviye 0 indirimi, Seviye 1 olarak bir JNDI bağlantısı (kaynak seçimini bir uygulama kabına gönderen) ve eşleyen bir Yay yapısı oluşturduğunu görebiliriz. Uygulama JNDI tanımlayıcısı, Seviye 2 olarak birçok konteyner kaynağından birine uygulanır. Birden çok seviye, ilişkinin dışında kalan birçok tarafa (bu durumda kod yürütme ve bir veritabanı arasındaki ilişki) bu ilişkiyi yönetmesine olanak tanır. Bu, arayüzler ve olaylar gibi dahili program bileşenlerine eşit olarak uygulanır.
Görüyoruz ki, diğer nitelikleri ne olursa olsun, soyutlama karmaşıklığı azaltıyor, dolaylı kullanım ise onu arttırıyor. Soyutlama gücü azaltırken, indirme de onu artırır. İndirme, varsayılan davranışın özel geri aramalar tarafından geçersiz kılınmasına izin verilerek soyutlamanın gücünü yeniden sağlamak için kullanılabilir.