45- كورس لغة بايثون Python – Python Encapsulation

فهم التغليف في بايثون

مفهوم التغليف في بايثون

التغليف هو أحد المبادئ الأساسية في البرمجة الكائنية التوجه. يهدف التغليف إلى حماية البيانات عن طريق إخفاء تفاصيل التنفيذ الداخلية للكائن وجعلها غير قابلة للوصول مباشرة من الخارج. بدلاً من ذلك، يتم الوصول إلى البيانات وتعديلها فقط من خلال واجهات (طرق) مخصصة. في بايثون، يمكن تحقيق التغليف باستخدام المتغيرات والطرق الخاصة التي يتم تعريفها باستخدام الشرطة السفلية المزدوجة (__).

كيفية تطبيق التغليف في بايثون

في بايثون، يمكن تطبيق التغليف عن طريق جعل المتغيرات خاصة باستخدام الشرطة السفلية المزدوجة في بداية اسم المتغير. على سبيل المثال، إذا كان لدينا متغير باسم __balance، فإنه لا يمكن الوصول إليه مباشرة من خارج الكائن. يمكن توفير واجهات عامة (طرق) للوصول إلى هذه البيانات وتعديلها عند الحاجة. إليك مثال يوضح كيفية تطبيق التغليف في بايثون:

class BankAccount:
    def __init__(self, owner, balance):
        self.owner = owner
        self.__balance = balance

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            return amount
        else:
            print("Insufficient funds")
            return 0

    def get_balance(self):
        return self.__balance

account = BankAccount("Alice", 1000)
account.deposit(500)
print(account.get_balance())  # Output: 1500
print(account.__balance)  # خطأ: لا يمكن الوصول إلى المتغير مباشرة
    

فوائد التغليف في البرمجة

التغليف يوفر العديد من الفوائد في البرمجة. أولاً، يحمي البيانات الحساسة من الوصول غير المصرح به والتعديل العرضي. ثانيًا، يجعل الكود أكثر مرونة وقابلية للصيانة حيث يمكن تغيير تفاصيل التنفيذ الداخلية دون التأثير على الكود الخارجي. بالإضافة إلى ذلك، يعزز التغليف مفهوم الكائنات الذاتية الدعم، حيث يمكن للكائن إدارة حالته الداخلية بشكل مستقل.

في المثال السابق، يمكن للمستخدم التعامل مع حساب البنك من خلال واجهات الإيداع والسحب دون الحاجة إلى القلق بشأن كيفية تخزين وإدارة الرصيد داخلياً. هذا يعزز من استدامة الكود وقابليته للتوسع في المستقبل.