Thuta Learning
ရှာဖွေရန်
IntermediateProgrammingbeginner

Encapsulation (Enhanced)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

🐍 Lesson 5: Encapsulation

1. Encapsulation ဆိုတာဘာလဲ?

မြန်မာ → Encapsulation ဆိုတာ data (attributes) နဲ့ methods (functions) ကို တစ်စုတည်းအဖြစ် class ထဲမှာ ထည့်သိမ်းပြီး, အပြင်ကနေ တိုက်ရိုက် မထိနိုင်အောင် ကာကွယ်ထားတဲ့ OOP concept တစ်ခု။

English → Encapsulation is the concept of bundling data (attributes) and methods (functions) inside a class, while restricting direct access to some of the object's components.

2. Why Encapsulation?

  • Protects data from accidental modification
  • Provides controlled access (via getters & setters)
  • Improves maintainability and security
  • Hides internal implementation details

3. အကျဉ်းချုပ်

✅ Encapsulation = hide data, expose only safe methods

✅ Use __private attributes to protect data

✅ Getters & setters provide controlled access

✅ Real-world analogy = ATM interface to bank account

python
# ===== 1. Without Encapsulation (Problem) =====
class BankAccount:
    def __init__(self, balance):
        self.balance = balance  # public

account = BankAccount(1000)
account.balance = -500   # ❌ invalid, but possible
print(f"Balance: {account.balance}")  # -500

# ===== 2. With Encapsulation (Solution) =====
class BankAccountProtected:
    def __init__(self, balance):
        self.__balance = balance   # private attribute

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

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount

    def get_balance(self):
        return self.__balance

account2 = BankAccountProtected(1000)
account2.deposit(500)
account2.withdraw(200)
print(f"\nProtected Balance: {account2.get_balance()}")  # 1300

# ===== 3. Getters & Setters =====
class Person:
    def __init__(self, name):
        self.__name = name

    def get_name(self):   # getter
        return self.__name

    def set_name(self, new_name):  # setter
        if len(new_name) > 0:
            self.__name = new_name

p = Person("Sai")
print(f"\nName: {p.get_name()}")  # Sai
p.set_name("Aye")
print(f"Name: {p.get_name()}")  # Aye
You should see
Balance: -500 Protected Balance: 1300 Name: Sai Name: Aye
Encapsulation (Enhanced) | Thuta Learning