Press "Enter" to skip to content

Python Encapsulation Kapsulleme

Yaşar SAFALI 0

Python Encapsulation Kapsulleme

Python Encapsulation Kapsulleme yazımızda OOP standartlarından olan Kapsüllemeye değineceğiz.Kapsülleme bir nesnenin iç yapısını,özelliklerini bozulmalara ve hatalara karşı dış dünyadan korumaktır.Bir nesnenin iç yapısının korunması demek başka sınıflar tarafından korunan özelliklere erişilmemesi demektir.Bu koruma işlemi  programlama dillerinde erişim belirleyiciler sayesinde olmaktadır.Bir yapının diğer sınıflar üzerinden erişimini engellemek için private tanımlamamız gerektiğini bir önceki yazımızda anlatmıştık.Şimdi bir sınıfta yer alan özellikleri kapsüllemeye bakalım.

class Muhendis:

    __ad="Yazılım"
    __soyad="hanem"
    def EkranaYaz(self):
        print(self.__ad)
        print(self.__soyad)




muhendis=Muhendis()
muhendis.EkranaYaz()

Output:

Yazılım

hanem

Yukarıdaki kod incelendiği zaman  Muhendis sınıfının 2 değişkeninin de dışarıdan erişime kapatıldığı(kapsüllendiği) görünmektedir.Kapsüllenen değişkenlere sadece o class içerisinden erişim mevcuttur.

Kapsüllenen değişkenlerin bazen kullanılması veya değerinin güncellenmesi de gerekebilir. Örneğin Mühendis sınıfındaki ad değişkenini bir yerde kullanacaksınız.Private olduğu için tek başına erişemiyorsunuz.Sınıflar tasarlanırken böyle durumlar hesap edilmeli ve kullanıcıya değişkenlerin değerini veren metotlar oluşturulmalıdır.Bu metotlar erişime açıktır ve programcılar tarafından getter metotları olarak adlandırılırlar.Bu metotların temel amacı kapsüllenmiş değişkenlerin değerini döndermektir.

class Muhendis:

    __ad="Yazılım"
    __soyad="hanem"
    def _EkranaYaz(self):
        print(self.__ad)
        print(self.__soyad)
    def get_ad(self):
        return self.__ad
    def get_soyad(self):
        return  self.__soyad





muhendis=Muhendis()
print(muhendis.get_soyad())
print(muhendis.get_ad())

Output:

hanem
Yazılım

Bazı durumlarda da oluşturulan bu private alanların değerlerini güncellemek gerekebilir.Erişime açık metotlar ile her değişkenin alanını tek tek güncelleyebilmeliyiz.Bu metotlara programcılar setter metotları demektedirler.Amaç private alanın değerini güncellemektir.

class Muhendis:

    __ad="Yazılım"
    __soyad="hanem"
    def EkranaYaz(self):
        print(self.__ad)
        print(self.__soyad)


    def set_ad(self,ad):
        self.__ad=ad
    def set_soyad(self,soyad):
        self.__soyad=soyad


muhendis=Muhendis()
muhendis.set_soyad("safalı")
muhendis.set_ad("yaşar")
muhendis.EkranaYaz()

Output:

yaşar
safalı

 

Kapsülleme konusunun daha iyi anlaşılabilmesi bir örnek daha yapalım.Bir İnsanlar sınıfı olsun.Bu sınıfa ait üyelerin boyları,yaşları,isimleri olsun.Daha önceki yazılarımızda __init__() fonksiyonunu ve Sınıfları anlatmıştık henüz okumadıysanız bu adresten okuyabilirsiniz.

class Insanlar:

    def __init__(self,isim,yas,boy):
        self.__isim=isim
        self.__yas=yas
        self.__boy=boy

    def EkranaYaz(self):
        print(self.__isim)
        print(self.__yas)
        print(self.__boy)
    def get_isim(self):
        return self.__isim
    def get_boy(self):
        return self.__boy
    def get_yas(self):
        return self.__yas

    def set_isim(self,isim):
        self.__isim=isim

    def set_boy(self,boy):
        self.__boy=boy
    def set_yas(self,yas):
        self.__yas=yas

insan=Insanlar("ali",27,175)
insan.EkranaYaz()

Output:

ali
27
175

Sınıfımızı oluşturduk.Bu sınıftan insan isminde bir nesne oluşturduk ve bu nesnenin özelliklerini “ali”,17,175 yaptık.Peki ya değerleri yanlış yazmış olsanız.Private tanımlandığı için direk olarak erişemeyeceksiniz.Doğal olarak set metotları ile güncelleyeceksiniz.

insan.set_boy(180)
insan.set_yas(25)
insan.set_isim("veli")

Güncelleme işlemi başarılı mı kontrol edelim.

insan.EkranaYaz()

Output:

veli
25
180

Görüldüğü gibi değerler değiştirildi.Değerlere toplu olarak değilde tek tek erişmeniz gerektiğinde bu sefer getter metotlarını kullanacağız.

print(insan.get_isim())
print(insan.get_boy())
print(insan.get_yas())

Output:

veli
180
25

Python’da ve OOP’de Encapsulation (Kapsülleme ) işlemi yapılırken temel prensip bu şekildedir.Asıl amaç nesnelerin bazı özelliklerini dış dünyaya kapatıp bozulmaları ve hataları engellemektir.Private alanların üzerinde kontrollü bir şekilde işlem yaptırmak için getter ve setter diye adlandırılan metotlar dan yararlanılır.Getter ve Setter metotları kodun okunabilirliği açısından programcıların oluşturduğu bir isimlendirmedir.İsterseniz herhangi bir isim verebilirsiniz.Getter fonksiyonların amacı kullanıcıya private alanın değerini döndermektedir.Setter fonksiyonların amacı ise değerlerini güncellemektir.

Bir sonraki yazımızda görüşmek dileğiyle

 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir