Soyutlama
- İngilizcesi
- Abstraction
- Okunuşu
- ebstrekşın
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
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
- KapsüllemeProgramlamanın Temelleri, s. 33Kapsülleme, verileri onları kullanan metotlarla paketleyip iç ayrıntıları gizlemektir; dışarıdaki kod yalnızca herkese açık bir arayüz üzerinden çalışır.
- InterfaceProgramlamanın Temelleri, s. 26Interface, bir türün sağlamayı vaat ettiği metot ve özellik imzalarından oluşan adlandırılmış bir kümedir; bu üyelerin nasıl gerçekleştirildiğini söylemez.
- Çok biçimlilikProgramlamanın Temelleri, s. 8Çok biçimlilik, kodun farklı türlerdeki değerlerle ortak bir arayüz üzerinden çalışabilmesidir; her tür kendi davranışını sağlar.
- KalıtımProgramlamanın Temelleri, s. 31Kalıtım, yeni bir sınıfın mevcut bir sınıfın alanlarını ve metotlarını yeniden kullanmasını, genişletmesini ve geçersiz kılmasını sağlayan OOP özelliğidir.
- OOPProgramlamanın Temelleri, s. 41OOP, yani nesne yönelimli programlama, kodu ilişkili verileri onlar üzerinde işlem yapan fonksiyonlarla birleştiren nesneler etrafında düzenleme yöntemidir.
- İlgilerin AyrılmasıYazılım Mimarisi, s. 19İlgilerin ayrılması, bir programı her biri davranışının açıkça tanımlanmış tek bir yönünden sorumlu ayrı parçalara bölen bir tasarım ilkesidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin