PYTHON:OOP–ENCAPSULATİON(Kapsülleme), Bu hafta OOP‘un 4 temel prensiplerinden biri olan Encapsulation (Kapsülleme) özelliğini ele alacağız ve kod parçacıklarıyla incelemeler yapacağız.
Nedir bu Encapsulation?
Sınıflar içerisinde kod yazarken bir çok değişken veya metot tanımlarız. Lakin Bu method ve değişkenlere herkesin ulaşmasını istemeyebiliriz örnek olarak;
Baş yazılımcıyı bir projenin mimarı olarak düşünürsek. Mimar projedeki altyapıyı belirlerken altındaki işçilerin onun kurduğu yapıda değişiklik yapmasına izin vermek istemez. Aynı şekilde baş yazılımcıda altında çalışan ekibin onun oluşturduğu nesnelerde (pythonda her şey nesnedir, methodlar, değişkenler etc.) değişiklik yapmasını istemez. İşte tam da bu sebepten ötürü Kapsülleme kullanılır.
Kapsüllemede oluşturduğumuz method ve değişkenleri private (gizli) olarak tanımlayıp, Dışarıdan erişime kısıtlamış oluruz.
Nasıl Encapsulation yaparım?
Kapsülleme işlemini gerçekleştirirken “__” simgesini methodlarımızın başına getirerek onları private (gizli) yaparız.Bu şekilde bizim haricinde başka birisi giriş yapmayı denerken hata alacak ve değişiklik yapma hakkı olmayacak.
Şimdi hep beraber kod parçalarıyla inceleyelim:
class İnsan:
def __init__(self,isim=””,soyisim=””,yas=””,memleket=””):
self.isim=”Furkan”
self.soyisim=”Yaman”
self.__yas=24
self.__memleket=”hatay”
kisi=İnsan()
print(“İsmi :”,kisi.isim)
print(“soy ismi :”,kisi.soyisim)
print(“Yas :”,kisi.yas)
print(“Memleket :”,kisi.memleket)
Kod parçacığımızı açıklayalım :
Bir insan sınıfı oluşturduk ve bu sınıfa bazı özellikler yükledik (isim, soyisim, yaş, memleket). Lakin ben bu sınıf içerisinde ben haricinde başka kimsenin yaş ve memleket bilgisine erişmesini istemiyorum bu sebeple yaş ve memleket değişkenlerinin önüne “__”sembolümüzü işaretledik ve private yaptık.
Çıktımıza dönecek olursak:
İsmi : Furkan
soy ismi : Yaman
Traceback (most recent call last):
File “C:/Users/win10/PycharmProjects/PTN3504/encapsulation db.py”, line 11, in <module>
print(“Yas :”,kisi.yas)
AttributeError: ‘İnsan’ object has no attribute ‘yas’
Çıktımızı incelediğimizde aldığımız bu hata kapsülleme işlemini gerçekleştirdiğimizin göstergesidir.İsim ve soyisim değişkenlerine kolayca ulaşırken yaş ve memlekete erişemedik İnsan nesnesinin böyle bir özelliği yok diyerek ayağa kalktı. Çünkü biz yas özelliğini gizledik. Aynı şekilde memleket özelliğinide gizledik.
Neden memleket ekranda yazmıyor peki?
Python satır satır kod okur ve hatayı aldığı kod okuma işlemini durdurur. Memleket sonraki satır olduğu için o koda geçemeden yas özelliğinde durdu.
Peki ben bu methodlara dışarıdan erişip hiç değişiklik yapamaz mıyım?
Getter ve Setter metodları sayesinde bu işlemleri gerçekleştirebilirim.
Getter fonksiyonunun amacı kullanıcıya private alanın değerini gösterir.
Setter fonksiyonu ise değeri güncellemede kullanılır.
Yukarıdaki kod bloğumuzda belirlediğim yaş değişkenine hem ulaşıp hem farklı bir değer atayalım:
def Getage(self):
return self.__yas
def Setage(self,yenideğer):
self.__memleket=yenideğer
kisi=İnsan()
print(“İsmi :”,kisi.isim)
print(“soy ismi :”,kisi.soyisim)
print(“Yaş :”,kisi.getage())
Çıktımızı alalım:
İsmi : Furkan
soy ismi : Yaman
Yaş : 24
Şimdide set metodunu çağırarak yeni yaşımıza bakalım:
print(“Yaş :”,kisi.setage(17))
Çıktımız:
Yaş:17
Öğrenme sürecinde olan biri olarak elimden geldiğince açıklamaya çalıştım
Saygılar ve Sevgilerle…