Kapsülleme
- İngilizcesi
- Encapsulation
- Türkçe karşılığı
- sarmalama
- Okunuşu
- inkepsyuleyşın
Günlük kullanımda iki ad da yaygın.
Kısaca
Kapsü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.
Programlamada kapsülleme (encapsulation) nedir?
Kapsülleme, bir nesnenin verilerini ve bu veriler üzerinde çalışan kodu genellikle bir sınıf olan tek bir birimde bir arada tutmak ve iç ayrıntıları programın geri kalanından gizlemek demektir. Dışarıdaki kod, verileri doğrudan okuyup değiştirmek yerine küçük bir herkese açık metot kümesi üzerinden etkileşir. Kalıtım, çok biçimlilik ve soyutlamayla birlikte nesne yönelimli programlamanın temel ilkelerinden biridir.
Diller kapsüllemeyi, bir üyeyi kimin görebileceğini denetleyen anahtar sözcükler olan erişim belirleyicileriyle (access modifier) uygular. Java, C# ve TypeScript'te private üyeler yalnızca kendi sınıflarının içinde kullanılabilir, public üyeler ise dış arayüzü oluşturur; JavaScript özel alanları # önekiyle işaretler, Python ise bir adı alt çizgiyle başlatma geleneğine dayanır. Her değişiklik metotlardan geçtiği için sınıf girdiyi doğrulayabilir ve verisini tutarlı tutabilir; örneğin bir banka bakiyesinin eksiye düşmesine izin vermeyerek.
Araba iyi bir benzetmedir: direksiyon ve pedallarla sürersiniz ve yakıt enjektörlerine dokunmaz ya da bujilerin ateşleme zamanını kendiniz ayarlamazsınız. Bu iç parçalar gizli olduğu için üretici, nasıl sürdüğünüzü değiştirmeden motoru yeniden tasarlayabilir; tıpkı bir sınıfın iç kodunu, onu kullanan kodu bozmadan değiştirebilmesi gibi.
Kapsülleme sıklıkla soyutlamayla karıştırılır. Soyutlama, bir nesnenin hangi temel özellikleri sunacağına karar verip geri kalanını yok saymakla ilgilidir; kapsülleme ise verileri paketleyen ve geri kalan her şeyi gizleyen mekanizmadır. Her özel alan için herkese açık bir getter ve setter eklemek pek az gerçek kapsülleme sağlar, çünkü dışarıdaki kod yine de her şeyi değiştirebilir; iyi kapsülleme bunun yerine deposit() gibi anlamlı işlemleri sunar.
Önemli noktalar
- Kapsülleme, verileri ve onlar üzerinde çalışan metotları tek bir birimde paketler.
privatevepublicgibi erişim belirleyicileri, dışarıdaki kodun neyi görebileceğini denetler.- Tüm değişiklikler, girdiyi doğrulayıp veriyi tutarlı tutabilen metotlardan geçer.
- İç ayrıntılar, herkese açık arayüzü kullanan kodu bozmadan değişebilir.
- Soyutlama neyin sunulacağına karar verir; kapsülleme geri kalanı gizler.
Örnek
class BankAccount {
#balance = 0; // private: only code inside the class can touch it
deposit(amount) {
if (amount <= 0) throw new Error("Deposit must be positive");
this.#balance += amount;
}
get balance() {
return this.#balance; // read-only from the outside
}
}
const account = new BankAccount();
account.deposit(50);
console.log(account.balance); // 50
// account.#balance = 1000000; // SyntaxError: private fieldSık sorulan sorular
Kapsülleme ile soyutlama arasındaki fark nedir?
Soyutlama, bir e-posta istemcisindeki send() metodu gibi bir şeyin yalnızca temel özelliklerini sunmakla ilgilidir. Kapsülleme ise bunu kodda nasıl başaracağınızdır: verileri metotlarıyla paketlemek ve iç ayrıntıları erişim belirleyicilerinin arkasında gizlemek.
Kapsülleme neden önemlidir?
Verilerin geçersiz biçimlerde değiştirilmesini önler, ilişkili kodu tek bir yerde tutar ve bir sınıfın iç yapısını, onu kullanan kodu bozmadan değiştirmenize olanak tanır. Bu, büyük programları sürdürmeyi ve hata ayıklamayı kolaylaştırır.
Python kapsüllemeyi destekler mi?
Python'da zorunlu bir private anahtar sözcüğü yoktur. Gelenek olarak _balance örneğindeki gibi başta bir alt çizgi bir üyeyi dahili olarak işaretler ve çift alt çizgi ad bozma (name mangling) tetikler; bu, dışarıdan yanlışlıkla erişimi zorlaştırır ama imkânsız kılmaz.
İlgili sayfalar
- 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.
- SınıfProgramlamanın Temelleri, s. 49Sınıf, nesne yönelimli programlamada bir grup nesnenin paylaştığı veri ve davranışı tanımlayan, nesnelerin örnek olarak ondan oluşturulduğu bir plandır.
- 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.
- Ç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.
- 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.
- İ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.
- SoyutlamaProgramlamanın Temelleri, s. 50Soyutlama, 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.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin