Python’da Kapsülleme (Encapsulation)

Bu derste, Python’da kapsülleme (encapsulation) konseptine odaklancağız. Kapsüllemenin, nesne tabanlı programlama içerisindeki önemini, nasıl çalıştığını ve nasıl etkili bir şekilde kullanıldığını detaylarıyla inceleyeceğiz.

Python’da Kapsülleme Niye Kullanılır?

Kapsülleme, bir nesnenin metotlarını, verilerini ve değişkenlerini diğer nesnelerden saklama ve bu özelliklere olan erişimi sınırlandırmaya yarar. Bu konsept, bu bilgilere yanlış ya da istenmeyen bir şekilde erişilmesini engelleyerek güvenliği artırır. Örneğin:

Şimdi ise bu sınıfın içindeki bilgilere dışarıdan doğrudan erişip değiştirelim ki tehlikesi görülsün:

Bu kodda, BankaHesabi sınıfının bakiye özelliğine dışarıdan doğrudan erişip değerini değiştirdik. Bu, istenmeyen veya yanlışlıkla yapılan değişikliklere neden olabilir. Kapsülleme bu tür sorunları önlemek için önemlidir. Kodu çalıştırmak için: Trinket

Python’da “Kapsülleme” Nasıl Yapılır?

Kapsülleme, Python’da genellikle özelliklere (attributes) ve metotlara özel (private) ya da korunan (protected) erişim tanımlayarak gerçekleştirilir. Python’da tam anlamıyla özel bir erişim modifikatörü olmadığını belirtmemiz önemli. Ancak isimlendirme konvensiyonları ile bu özellik benzeri bir davranış elde edilebilir.

  1. Korunan (Protected) Nitelikler: Niteliğin önüne tek bir alt çizgi (_) ekleyerek bu niteliği koruma altına alabiliriz. Bu, niteliğin sadece sınıf içinden ve alt sınıflar tarafından erişilebilir olduğunu belirtir (fakat bu tam bir zorlama değil, sadece bir konvensiyon).
  2. Özel (Private) Nitelikler: Niteliğin önüne çift alt çizgi (__) ekleyerek bu niteliği özel olarak tanımlayabiliriz. Bu durumda Python niteliği yeniden adlandırarak dışarıdan doğrudan erişime kapatır.

Örneğimize geri dönerek kapsüllemeyi nasıl uygulayacağımızı görelim:

Bu sınıfta, __bakiye adlı özel bir nitelik oluşturduk. Şimdi bu niteliğe dışarıdan doğrudan erişmeye çalıştığımızda bir hata alacağız:

Ancak sınıfın içinde tanımlı metotlarla (para_yatir, para_cek) bu nitelikle etkileşim kurabiliriz.

Bu yöntem, sınıfın içerisindeki verilere veya fonksiyonlara dışarıdan yanlışlıkla veya kötü niyetle müdahale edilmesini önlemek için oldukça kullanışlıdır.

“get” ve “set” Metotları

Python’da, sınıfların içindeki özel veya korunan niteliklere dolaylı erişim sağlamak için genellikle “get” ve “set” adı verilen metotlar kullanılır. Bu metotlar, niteliklerin doğrudan erişimine izin vermeden onların değerlerini alma veya değiştirme işlemlerini kontrol altında tutmamıza olanak tanır. Ne işe yarıyormuş bunu da gösterelim:

  • get Metodu: Niteliğin değerini döndürmek için kullanılır. Niteliğin doğrudan erişimine izin vermek yerine, niteliğin değerini bu metod üzerinden alabiliriz.
  • set Metodu: Niteliğin değerini değiştirmek için kullanılır. Niteliğe değer atama işlemi yaparken bu metod üzerinden yaparak, atanan değerin geçerlilik kontrolü gibi ek kontrolleri uygulayabiliriz.

Bir kişinin yaşını temsil eden bir Yas sınıfı düşünelim. Bu sınıf, yaşı doğrudan değiştirmek yerine, yaşın doğru ve geçerli bir değere sahip olup olmadığını kontrol etmek için “get” ve “set” metotlarını kullanacaktır.

Bu metotlar her ne kadar genellikle get ve set olarak isimlendirilmiş olsa da, geliştiriciler diledikleri ismi verebilirler. Bakınız:

Ancak, get ve set isimleri programlama jargonunda oldukça yaygın olduğu için bu isimleri kullanmak, kodun okunurluğunu ve başka geliştiriciler tarafından anlaşılabilirliğini arttırır.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu