Ana içeriğe geç

Soyutlama

İngilizcesi
Abstraction
Okunuşu
ebstrekşın
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/abstraction

Kısaca

Soyutlama, bir şeyin nasıl çalıştığına dair karmaşık ayrıntıları daha basit bir arayüzün arkasına gizlemektir; kod onu yalnızca ne yaptığını bilerek kullanır.

Programlamada soyutlama (abstraction) nedir?

Yazılımın her katmanı, altındakinin üzerine kurulmuş bir soyutlamadır. sendEmail(to, subject) fonksiyonu SMTP bağlantılarını ve yeniden denemeleri gizler; dosya sistemi disk sektörlerini gizler; bir programlama dili makine komutlarını gizler. Çağıranlar basit fikirle çalışır ve onun söz verildiği gibi davranacağına güvenir; bu da insanların her ayrıntıyı akıllarında tutmadan büyük sistemler kurmasını sağlar.

Nesne yönelimli programlamada soyutlama; kapsülleme, kalıtım ve çok biçimlilikle birlikte dört klasik ilkeden biridir. Arayüzler ve soyut sınıflar bir türün nasıl yaptığını söylemeden ne yapabildiğini tarif eder: charge() metodu olan bir PaymentProvider arayüzü bir kart işlemcisi ya da test için sahte bir nesne tarafından uygulanabilir ve kodun geri kalanının hangisini aldığını bilmesi gerekmez.

İyi soyutlamaların adları açık, yüzeyleri küçük ve sürprizleri azdır. Kötüleri ya çok az şey gizler ve çağıranları yine de ayrıntıları bilmeye zorlar, ya da çok fazla şey gizler ve önemli bir durumu ele almayı imkânsız kılar. Tekrarı çok erken kaldırmak çoğu zaman ikinci türü yaratır: değiştirmesi, tekrarlanan koddan daha zor olan yanlış bir soyutlama.

Sık yapılan bir yanlış, soyutlama ile kapsüllemenin aynı şey olduğunu düşünmektir. Soyutlama tasarımla ilgilidir, yalnızca temel fikri gösterir; kapsülleme ise iç durumu gizli tutma mekanizmasıdır. Ayrıca her soyutlama zaman zaman sızdırır: basit bir fonksiyonun arkasına gizlenmiş bir ağ çağrısı yine de yavaş olabilir ya da başarısız olabilir; Joel Spolsky'nin 2002'deki sızdıran soyutlamalar yasası bunu anlatır.

Önemli noktalar

  • Soyutlama, bir şeyin nasıl çalıştığını ne yaptığının arkasına gizler.
  • Yazılım, donanımdan yukarıya doğru soyutlama katmanlarından kurulur.
  • Arayüzler ve soyut sınıflar bunun için OOP'deki ana araçlardır.
  • İyi soyutlamalar küçük ve öngörülebilirdir; yanlış olanlar pahalıya patlar.
  • Soyutlamalar sızdırır: yavaşlık gibi gizli ayrıntılar yine de görünebilir.

Örnek

Bir arayüz hangi ödeme sağlayıcısının kullanıldığını gizler (TypeScript)typescript
interface PaymentProvider {
  charge(amountCents: number, customerId: string): Promise<string>;
}

class CardProcessor implements PaymentProvider {
  async charge(amountCents: number, customerId: string) {
    // HTTP calls, retries and error codes live here, hidden from callers
    return "txn_123";
  }
}

// Checkout depends on the abstraction, not on the details
async function checkout(provider: PaymentProvider, total: number, customer: string) {
  const transactionId = await provider.charge(total, customer);
  return { ok: true, transactionId };
}

Sık sorulan sorular

Soyutlama ile kapsülleme arasındaki fark nedir?

Soyutlama neyin gösterileceğine karar verir: temel fikri yakalayan basit bir arayüz. Kapsülleme ise geri kalanın nasıl gizli tutulacağıdır: dışarıdaki kodun dokunamadığı private alanlar ve metotlar.

Soyut sınıf (abstract class) nedir?

Doğrudan örneği oluşturulamayan ve bazı metotlarını uygulamadan bırakabilen bir sınıftır. Ayrıntıları alt sınıflar doldurur. Bir arayüzden farklı olarak ortak kod ve alanlar da içerebilir.

Sızdıran soyutlama (leaky abstraction) nedir?

Gizli ayrıntıları onu kullananları yine de etkileyen bir soyutlamadır. Örneğin bir ORM SQL'i gizler, ama yavaş sorgular geliştiricileri ürettiği SQL'i anlamaya zorlar.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar