python dersleri

Python Encapsulation (Kapsülleme)

Merhaba Arkadaşlar,
Mobilhanem.com da Python Eğitimi Serisinin bu dersinde Python Kapsülleme (Encapsulation)  dersi ile birlikteyiz. Bir önceki derslerimizde nesne ve sınıf kavramlarını görmüştük.

Python Kapsülleme (Encapsulation) Nedir?

Kapsülleme, methotların ve variable’ların erişimlerini kısıtlamak anlamına geliyor. Biz metotlara veya variable’lara direk erişme ve değiştirme kısıtı özelliğini ekliyoruz. Peki bunu niye yapıyoruz? Çünkü yazdığımız kodların değiştirilmemesi  yada değiştirdiğimiz değerlerin kontrollü olarak değiştirilmesi gerektiği için. İşte tam bu durumlarda kapsülleme sihirli bir değnek gibi imdadımıza yetişiyor. Şimdi örneklerle gösterelim.

 

RegisterCourse isminde sınıf oluşturduk.  Şimdi sınıfımızın değişkenlerini görüntüleyelim

Yalnız burada bir problem var. Bu öğrencinin bilgilerine dışarıdan ulaşabiliyoruz hatta değiştirebiliyoruz.

Hemen bilgilere tekrar bakalım;

Gördüğünüz gibi öğrencinin kişisel bilgilerine ulaşabiliyor ve değiştirebiliyoruz. Peki bu kişinin bilgilerine dışarıdan ulaşılmasını ve değiştirilmesini nasıl kısıtlayabiliriz.

Python Encaplusation (Kapsüllem) Kullanımı

Kişinin bilgilerini global olarak oluşturduğumuz için herkes tarafında erişilebilir durumdadır. Bunun için biz verilerimizi ve metotlarımızı private(özel) olarak tanımlamamız gerekiyor. Nasıl yapıldığını hemen görelim.

Basit bir işlem, sadece oluşturduğumuz verilerin önüne “__” ekliyoruz,  hemen deneyelim;

Şu şekilde bir hata aldık değil mi?

Biz sınav bilgilerini private(özel) yaptığımız için sınav bilgilerine ulaşamadığından hata verdi. Artık bu değerlere yalnız bu sınıf içinde erişebiliriz. Peki diğer sınıflardan nasıl erişeceğiz? Yazıyı okumaya devam edelim. Peki aynı işlevleri methodlar içinde yapabiliyor muyuz? Hemen bir örnekle gösterelim.

Gördüğünüz gibi Öğrencinin aldığı dersleri görebiliyor ve ders ekleyebiliyoruz. Şimdi bu method’da dışarıdan erişimi ve değiştirmeyi kısıtlayalım.

Yine benzer bir hata aldık. add() diye bir metodumuz olduğu halde dışarıdan erişim olmadığı için (bunu methodun başına __ ekleyerek gerçekleştirdik ) erişemiyoruz.

Peki aklımıza şu gelebilir. Tamam sen benim dışarıdan exam1 ve exam2 değişkenlerine erişimini engelledim. Ben artık exam1 ve exam2 değişkenini hem okuyamıyorum hem de değiştiremiyorum. Ama ben en azından değeri okumak istiyorum, değiştirmezsem de olur 🙂

Kapsüllenmiş Verilere Dışarıdan Erişim

Peki bunun nasıl yapacağız? Hemen hemen bir  çok programlama dilinde sıkla karşılaştığımız getter ve setter methodlarına benzer bir yapı ile yapacağız o zaman deneyelim.

Hemen Çıktıya bakalım.

Gördüğünüz gibi bu şekilde exam1 bilgisine ulaşmış olduk. Bu arada getExam1 ismini ben oluşturdum sizde başka isim verebilirsiniz. Bu yapı genel bir yapı olduğu için bu şekilde yazmanız (değişkenin başına get koyarak) kodlarınızın okunabilirliği artırabilir.

Peki değişken private olsa da ben hem erişmek hemde değerini değiştirmek istiyorum diyelim. Az önce sadece getter metodu eklemiştik  şimdi birde setter methodu ekleyelim.

Hemen çıktıya bakalım;

Gördüğünüz gibi not bilgisi değişmedi. Çünkü biz setExam1() fonksiyonunu çağırmadık  hemen oluşturduğumuz setExam1() fonksiyonunu çağıralım.

Çıktıya bakalım;

Bu şekilde fonksiyonumuzu çağırmış olduk. Artık private değerleri setter fonksiyonu ile değiştirebilirsiniz.

Peki direk erişemiyorum ama  setter methodu ile değişkeni istediğim gibi değiştirebildim. Neden getter setter ile uğraşayım. Neden private yapıp setter methodu kullanma gereği duydum?  Çünkü direk eriştiğimde herhangi bir kontrol yapmadan değişkenin değerini değiştirebilirim. Ama bu şekilde setter fonksiyonu kullandığımda içerisine istediğim validasyonları koyabilirim. Örneğin exam1 değerine direk erişimde – (negatif) değerler verebilirken setter methodunda negatif değer geldiğinde bunu direk exam1 değerine eşitlemeden kullanıcıyı uyarabilirim veya hata fırlatabilirim. Hemen bir örnekle gösterelim;

Not : Hata fırlatmayı önceki derslerimizde görmüştük.

Setter fonksiyonumuzu yazdık şimdi programımızın tamamını görelim.

Şimdi çıktıya bakalım;

Biz burada sınav puanının  0’dan küçük ve 100’den büyük değer olma durumlarını kontrol etmiş olduk.

Mobilhanem.com da Python Eğitim serisinin  Python Kapsülleme(Encapsulation) dersinin sonuna geldik.  Bir sonraki derste Python Inheritance(Miras Alma ) konusu ile birlikte olacağız. Eksik yada yanlış gördüğün yerler için Soru-Cevap iletişime geçmekten çekinmeyin. Bir sonraki derste görüşmek üzere.

Tüm Dersler İçin Tıklayın

90

Cahit İşleyen

Data Scientist at @Embedica.ai
Python ve Linux sever.
Çay tiryakisi

4 Yorum

  • Hiç anlamadığım konuları sizin sade açık anlasilir kısa tam hedefe isabet anlatisinizla anladım.Gercekten çok güzel örneklerle apaçık anlatım yapmışsınız.O kitaplardaki ağdalı dile hiç gerek yok mükemmel bi sadelik. Tebrikler.

  • Harikasınız. Çok anlamlı bir örnek üzerinden herkesin anlayabileceği bir sadelikte anlatmışsınız. Teşekkür ederim. Çok faydalandım.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?