এনক্যাপসুলেশনঃEncapsulation

এনক্যাপসুলেশন অর্থ গোপনীয়তা। অন্য কোন অব্জেক্ট থেকে কোন ক্লাসের ডেটা লুকোনো বা সরাসরি ব্যবহার থেকে বিরত রাখা ই এনক্যাপসুলেশন। অর্থাৎ কোন ক্লাসের ডেটা বা মেথড কে প্রাইভেট করে রাখার প্রক্রিয়া-ই এনক্যাপসুলেশন । প্রাইভেট অ্যাট্রিবিউট ক্লাস নিজে যেকোন সময় এক্সেস করতে পারে তবে অন্য কোন ক্লাস সরাসরি এক্সেস করতে পারেনা বা পরিবর্তন করতে পারে না। এনক্যাপসুলেশন ক্লাসের ডেটার নিরাপত্তা বাড়ায়।

পাইথন ও অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর এনক্যাপসুলেশন নীতি ব্যবহার করে। যদিও পাইথনে ডেটা প্রাইভেট করার জন্য কোন প্রাইভেট কি-ওয়ার্ড নেই কিন্তু সিন্ট্যাক্স আছে। যদিও একে কেউ-ই সিন্ট্যাক্স বলা যায় না। সহজ করে বলার জন্য-ই বলা…

· একটি আইডেন্টিফায়ার যদি একটি আন্ডারস্কোর দিয়ে শুরু হয় তার মানে হচ্ছে আইডেন্টিফায়ার টি প্রাইভেট তবে চাইলে সহজেই এক্সেস করা যাবে।

· কোন আইডেন্টিফায়ার যদি দুটি আন্ডারস্কোর দিয়ে শুরু হয় তাহলে আইডেন্টিফায়ার টি প্রাইভেট তবে এক্সেস করা একটু কঠিন।

class Person:
    def __init__(self, name, age,salary):
      self.name = name       # name একটি পাব্লিক ভ্যারিয়েবল
      self._age = age        # _age প্রাইভেট ভ্যারিয়েবল
      self.__salary = salary # __salary আরও বেশি প্রাইভেট ডেটা

person = Person('olee',25,20000)   
print(person.name )  
print(person._age)
#=== Output ===
olee
25

এবার বেশি প্রাইভেট salary কে এক্সেস নেয়ার চেষ্টা করি

class Person:
    def __init__(self, name, age,salary):
      self.name = name       # name একটি পাব্লিক ভ্যারিয়েবল
      self._age = age        # _age প্রাইভেট ভ্যারিয়েবল
      self.__salary = salary # __salary আরও বেশি প্রাইভেট ডেটা

person = Person('olee',25,20000)
person.__salary=215544   
print(person.__salary)

Output

AttributeError: 'Person' object has no attribute '__salary'

__salary এতই প্রাইভেট যে পাইথন আমাদের বলছে যে এ নামে কোন অ্যাট্রিবিউটই নেই। কিন্তু _age তো ঠিকই আউটপুট দেখাচ্ছে। একে তো প্রাইভেট মনে হচ্ছে না। এটি যে প্রাইভেট তা অনুভব করতে পারবে যখন ইন্ট্রারপ্রেটারে _age এক্সেস করতে যাবে।

এই প্রাইভেট অ্যাট্রিবিউট গুলো পরোক্ষ ভাবে এক্সেস বা পরিবর্তন করতে পাইথন getter এবং setter করে।

getter এবং setter

class Person:
    def __init__(self, name, age,salary):
      self.name = name       # name একটি পাব্লিক ভ্যারিয়েবল
      self._age = age        # _age প্রাইভেট ভ্যারিয়েবল
      self.__salary = salary # __salary আরও বেশি প্রাইভেট ডেটা

    def getter(self):
     print(self.__salary)

    def setter(self,salary):
     self.__salary = salary 


person = Person('olee',25,20000)   
person.setter('3000')
person.getter()
#=== Output ===
3000

Last updated