ইনক্যাপসুলেশন (Encapsulation)
ইনক্যাপসুলেশন হল অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর একটি মৌলিক ধারণা, যা ডেটা এবং মেথডগুলিকে একত্রিত করে একটি ক্লাসের মধ্যে প্যাকেজ করে। এটি ডেটার সুরক্ষা এবং নিরাপত্তা বৃদ্ধি করে, কারণ এটি ক্লাসের বাইরের কোড থেকে ডেটার সরাসরি অ্যাক্সেস সীমিত করে। ইনক্যাপসুলেশনের মাধ্যমে, শুধুমাত্র ক্লাসের মেথডগুলির মাধ্যমে ডেটা পরিবর্তন এবং অ্যাক্সেস করা সম্ভব হয়, যা ডেটার অখণ্ডতা রক্ষা করে।
ইনক্যাপসুলেশনের সুবিধা:
- ডেটা সুরক্ষা: ক্লাসের ভিতরে থাকা ডেটা বাহিরের কোড দ্বারা পরিবর্তন করা যায় না।
- এবস্ট্রাকশন: ব্যবহারকারীরা ডেটার কার্যকারিতা বুঝতে পারে, কিন্তু তার অভ্যন্তরীণ কাজকর্ম জানার প্রয়োজন নেই।
- সহজ রক্ষণাবেক্ষণ: ক্লাসের ভিতরের ডেটা পরিবর্তন করা হলে, বাহ্যিক কোডে পরিবর্তন করার প্রয়োজন হয় না।
উদাহরণ:
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.__balance = balance # প্রাইভেট এট্রিবিউট
def deposit(self, amount):
if amount > 0:
self.__balance += amount
print(f"{amount} deposited. New balance: {self.__balance}")
else:
print("Deposit amount must be positive.")
def withdraw(self, amount):
if 0 < amount <= self.__balance:
self.__balance -= amount
print(f"{amount} withdrawn. Remaining balance: {self.__balance}")
else:
print("Invalid withdrawal amount.")
def get_balance(self):
return self.__balance # প্রাইভেট এট্রিবিউটের অ্যাক্সেস প্রদান
# ব্যবহার
account = BankAccount("Alice", 1000)
account.deposit(500) # Output: 500 deposited. New balance: 1500
account.withdraw(200) # Output: 200 withdrawn. Remaining balance: 1300
print(account.get_balance()) # Output: 1300
অ্যাক্সেস মডিফায়ার (Access Modifiers)
অ্যাক্সেস মডিফায়ার হল ক্লাসের এট্রিবিউট এবং মেথডগুলির অ্যাক্সেস স্তর নির্ধারণ করার জন্য ব্যবহৃত কীওয়ার্ড। সাধারণত তিন ধরনের অ্যাক্সেস মডিফায়ার ব্যবহার করা হয়:
প্রাইভেট (Private):
- প্রাইভেট সদস্যরা ক্লাসের বাইরের কোড দ্বারা সরাসরি অ্যাক্সেস করা যায় না। প্রাইভেট সদস্য চিহ্নিত করার জন্য ক্লাসের নামের আগে দুইটি আন্ডারস্কোর (
__) ব্যবহার করা হয়। - উদাহরণ:
self.__balance
প্রোটেক্টেড (Protected):
- প্রোটেক্টেড সদস্যরা একক আন্ডারস্কোর (
_) দিয়ে চিহ্নিত করা হয় এবং এই সদস্যদের ক্লাস এবং তার সাবক্লাস দ্বারা অ্যাক্সেস করা যায়। - উদাহরণ:
self._protected_variable
পাবলিক (Public):
- পাবলিক সদস্যদের জন্য কোন বিশেষ চিহ্ন ব্যবহার করা হয় না। এগুলি ক্লাসের বাইরের কোড দ্বারা সহজেই অ্যাক্সেস করা যায়।
- উদাহরণ:
self.owner
উদাহরণ:
class Animal:
def __init__(self, name):
self.name = name # পাবলিক
self._species = "Unknown" # প্রোটেক্টেড
self.__age = 0 # প্রাইভেট
def set_age(self, age):
if age >= 0:
self.__age = age
else:
print("Age cannot be negative.")
def get_info(self):
return f"Name: {self.name}, Species: {self._species}, Age: {self.__age}"
# ব্যবহার
dog = Animal("Buddy")
dog.set_age(5)
print(dog.get_info()) # Output: Name: Buddy, Species: Unknown, Age: 5
উপসংহার
ইনক্যাপসুলেশন এবং অ্যাক্সেস মডিফায়ারগুলি OOP এর মূল ভিত্তি। এগুলি ডেটার সুরক্ষা, পরিষ্কার কোড, এবং রক্ষণাবেক্ষণ সুবিধা প্রদান করে। এই ধারণাগুলির মাধ্যমে প্রোগ্রামগুলি আরও নিরাপদ এবং কার্যকরী হয়। OOP তে ইনক্যাপসুলেশন ব্যবহারের ফলে ডেটা এবং মেথডগুলির মধ্যে একটি স্বচ্ছ সীমারেখা তৈরি হয়, যা সফটওয়্যার ডেভেলপমেন্টকে সহজতর করে।