Python Encapsulation (Kapsülleme)

Merhaba arkadaşlar, bu yazımızda Python derslerinin bu serisinde yirmi üçüncü ders olarak Python Encapsulation (Kapsülleme) konusuna değinmeye çalışacağım. Umarım sizler için faydalı bir yazı olur. İsterseniz hemen başlayalım.

Python Encapsulation (Kapsülleme)

Python Kapsülleme Nedir?

Kapsülleme (Encapsulation), nesne tabanlı programlama dillerinde bir nesnenin dahili özelliklerini ve davranışlarını dışarıdan erişimin engellenmesini sağlar. Bu, nesnenin güvenliğini ve bütünlüğünü koruyan bir yapıdır. Kapsülleme, sınıf üyelerinin (nitelikleri ve metotları) dışarıdan erişiminin sınırlandırılmasını sağlar.

Python’da, kapsülleme için özel metotlar (private metodlar) ve özel nitelikler (private attributes) kullanılır. Özel metotlar ve nitelikler, dahili özellikleri ve davranışları tanımlamak için kullanılır ve dışarıdan erişim engellenir. Özel metotlar ve nitelikler, sınıf içinde erişilebilir ancak dışarıdan erişilemez.

Python’da, özel metotlar ve nitelikler, “__” (double underscore) ile başlar. Örneğin, “__private_method” ve “__private_attribute” gibi.

class MyClass:
    def __init__(self):
        self.__private_attribute = "private"
    
    def __private_method(self):
        print("This is a private method")
    
    def public_method(self):
        print(self.__private_attribute)
        self.__private_method()

Bu örnekte, “MyClass” sınıfı içinde “__private_attribute” niteliği ve “__private_method” metodu tanımlanmıştır. Bu nitelik ve metot, sınıf içinde erişilebilir ama dışarıdan erişilemez. “public_method” metodu ise, dışarıdan erişilebilir ve “__private_attribute” niteliğine ve “__private_method” metoduna erişim sağlar.

Kapsülleme, nesnelerin dahili özelliklerini ve davranışlarını dışarıdan erişimin engellenmesi ile nesnenin güvenliğini ve bütünlüğünü koruma amacını taşır. Ayrıca, sistemdeki değişikliklerin yalnızca belirli bir bölümün etkilenmesini sağlar.

Python Kapsülleme (Encaplusation) Kullanımı

Python’da kapsülleme (encapsulation), sınıf üyelerinin erişim düzeylerini belirlemek için kullanılır. Özel metotlar ve nitelikler dahilinde, sınıfın dahili özellikleri ve davranışlarını dışarıdan erişimin engellenmesini sağlar.

Python’da kapsülleme kullanımı için aşağıdaki adımlar takip edilir:

  1. Sınıf niteliklerini tanımlayın ve dahili özellikleri için özel nitelikler oluşturun. Özel nitelikler, “__” (double underscore) ile başlar. Örneğin, “__private_attribute”
class MyClass:
    def __init__(self):
        self.__private_attribute = "private"
  1. Sınıf metotlarını tanımlayın ve dahili davranışları için özel metotlar oluşturun. Özel metotlar da “__” ile başlar. Örneğin, “__private_method”
class MyClass:
    def __init__(self):
        self.__private_attribute = "private"
    
    def __private_method(self):
        print("This is a private method")
  1. Dışarıdan erişim için public metodlar oluşturun ve özel niteliklere ve metotlara erişim sağlayın.
class MyClass:
    def __init__(self):
        self.__private_attribute = "private"
    
    def __private_method(self):
        print("This is a private method")
    
    def public_method(self):
        print(self.__private_attribute)
        self.__private_method()
  1. Sınıfın nesnelerini oluşturun ve erişim düzeylerini test edin. Özel nitelik ve metotlar dışarıdan erişilemezken, public metotlar aracılığıyla erişim sağlanabilir.
# create object
obj = MyClass()

# access private attribute and method through public method
obj.public_method()
# Output: private
# Output: This is a private method

# try to access private attribute and method directly (will raise an error)
print(obj.__private_attribute)
# Output: AttributeError: 'MyClass' object has no attribute '__private_attribute'

obj.__private_method()
# Output: AttributeError: 'MyClass' object has no attribute '__private_method'

Bu şekilde kapsülleme (encapsulation) kullanımını gerçekleştirebilirsiniz. Özel nitelikler ve metotlar, sadece sınıf içinde erişilebilirken, public metotlar aracılığıyla dışarıdan erişim sağlanabilir. Bu sayede, nesnenin dahili özellikleri ve davranışları dışarıdan erişimin engellenir ve nesnenin güvenliği ve bütünlüğü korunur.

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

Kapsüllenmiş verilere dışarıdan erişim, Python’da getter ve setter metotları kullanılarak gerçekleştirilir. Getter metotlar, kapsüllenmiş niteliklerin değerlerini döndürürken, setter metotlar ise kapsüllenmiş niteliklere değer atamak için kullanılır.

Aşağıdaki örnekte, MyClass sınıfında __private_attribute adlı özel nitelik tanımlanmıştır. Dışarıdan bu nitelik direk erişilemez, ancak get_private_attribute() ve set_private_attribute() metotları aracılığıyla erişim sağlanabilir.

class MyClass:
    def __init__(self):
        self.__private_attribute = "private"
        
    def get_private_attribute(self):
        return self.__private_attribute
    
    def set_private_attribute(self, value):
        self.__private_attribute = value

# create object
obj = MyClass()

# access private attribute through getter method
print(obj.get_private_attribute()) # Output: private

# set private attribute through setter method
obj.set_private_attribute("new value")

# access private attribute through getter method again
print(obj.get_private_attribute()) # Output: new value

Bu şekilde, kapsüllenmiş niteliklere dışarıdan erişim sağlanırken aynı zamanda niteliklere direk erişim engellenir. Getter ve setter metotlar aracılığıyla niteliklere erişim sağlandığından, niteliklerin değerleri kontrol edilir ve gerektiğinde hata önlemleri alınabilir.

Kullanıma Örnek

Evet, aşağıdaki örnekte, “Person” sınıfı oluşturuldu ve bu sınıfın özel nitelikleri (__name ve __age) ve özel metodları (__get_age() ve __set_age()) tanımlandı. Dışarıdan erişim için “get_name()” ve “set_name()” metotları ile “get_age()” ve “set_age()” metotları tanımlandı.

class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
        
    def get_name(self):
        return self.__name
    
    def set_name(self, name):
        self.__name = name
        
    def __get_age(self):
        return self.__age
    
    def __set_age(self, age):
        if age < 0:
            print("Age can not be negative")
        else:
            self.__age = age
    
    def get_age(self):
        return self.__get_age()
    
    def set_age(self, age

Arkadaşlar bu Python Encapsulation (Kapsülleme) adlı yazımızın da sonuna gelmiş bulunmaktayız. Umarım faydalı olmuştur.

0 0 votes
Article Rating
Subscribe
Bildir
guest

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x