ইনক্যাপসুলেশন বলতে বোঝায় কোন কিছু লুকিয়ে রাখা। অবজেক্ট ওরিয়েন্টেড কনসেপ্টে যা ডেটা লুকিয়ে রাখা।
ডেটা কেন লুকাব?
ধরা যাক,
রহিম আর করিম একটি ব্যাংকিং ম্যানেজমেন্ট সিস্টেম প্রজেক্টে সেপারেট দুইটি ফিচার অর্থাৎ দুইজনে আলাদা ক্লাস নিয়ে কাজ করছে।
করিম নামে একটি ক্লাস খুলে নামে তিনটি ভ্যারিয়েবল রাখল।
এই
কোডে সমস্যা কি হতে পারে? যেকোন ক্লাস থেকেই এই ক্লাসের ভ্যারিয়েবলগুলো এই
ক্লাসের অবজেক্ট খুলে এক্সেস করা যাবে। অর্থাৎ এই ক্লাসের কোন ডেটার কোন
কন্ট্রোলই নাই।
ওইদিকে দুর্নীতিবাজ রহিম এর সুযোগ নিয়ে একটি অকাজ করল। একজন ইউজারের ডিপোজিটে আজগুবি এক এমাউন্ট বসিয়ে দিল।
ওকে ঠেকাতে করিম সবগুলো ভ্যারিয়েবল প্রাইভেট করে দিল, ডেটা হাইড করল। এবার আর এমন দুর্নীতি করা যাবে না! কিন্তু সমস্যা হচ্ছে, তাহলে যে রহিম কাজও করতে পারবেনা, ভ্যালিড ডেটা পাস করতে দিতেই হবে!
এর সমাধান দিচ্ছে, getter এবং setter মেথড আইডিয়া। করিম লজিক ঠিক করল,আজগুবি কোন এমাউন্ট এলে ভ্যালু এসাইনই করতে দিবেনা! অর্থাৎ এই ক্লাসের কাজকর্ম এডমিন করিমই ঠিক করছে, কোন ডেটা কিভাবে এক্সেস করা যাবে, কোনটা যাবেনা।
রহিমের যদি ভ্যালু এসাইন করতে হয়, তবে এই মেথডগুলো ব্যবহার করেই করতে হবে। ডেটা প্রাইভেট থাকায় সে এমনি এমনি এক্সেস পাচ্ছেনা, এক্সেস করতে গেলে null পাবে।
এই কাজটাকেই বলে ইনক্যাপসুলেশন, যেখানে ডেটা অন্য ক্লাসের কাছ থেকে হাইড করে নিরাপদে রাখছি।
OOP-তে সবসময়ই data manipulation এর ক্ষেত্রে data private রেখে getter(), setter() দিয়ে এক্সেস করা অর্থাৎ encapsulation maintain করা best practice।
ডেটা কেন লুকাব?
ধরা যাক,
রহিম আর করিম একটি ব্যাংকিং ম্যানেজমেন্ট সিস্টেম প্রজেক্টে সেপারেট দুইটি ফিচার অর্থাৎ দুইজনে আলাদা ক্লাস নিয়ে কাজ করছে।
করিম নামে একটি ক্লাস খুলে নামে তিনটি ভ্যারিয়েবল রাখল।
ওইদিকে দুর্নীতিবাজ রহিম এর সুযোগ নিয়ে একটি অকাজ করল। একজন ইউজারের ডিপোজিটে আজগুবি এক এমাউন্ট বসিয়ে দিল।
ওকে ঠেকাতে করিম সবগুলো ভ্যারিয়েবল প্রাইভেট করে দিল, ডেটা হাইড করল। এবার আর এমন দুর্নীতি করা যাবে না! কিন্তু সমস্যা হচ্ছে, তাহলে যে রহিম কাজও করতে পারবেনা, ভ্যালিড ডেটা পাস করতে দিতেই হবে!
এর সমাধান দিচ্ছে, getter এবং setter মেথড আইডিয়া। করিম লজিক ঠিক করল,আজগুবি কোন এমাউন্ট এলে ভ্যালু এসাইনই করতে দিবেনা! অর্থাৎ এই ক্লাসের কাজকর্ম এডমিন করিমই ঠিক করছে, কোন ডেটা কিভাবে এক্সেস করা যাবে, কোনটা যাবেনা।
রহিমের যদি ভ্যালু এসাইন করতে হয়, তবে এই মেথডগুলো ব্যবহার করেই করতে হবে। ডেটা প্রাইভেট থাকায় সে এমনি এমনি এক্সেস পাচ্ছেনা, এক্সেস করতে গেলে null পাবে।
এই কাজটাকেই বলে ইনক্যাপসুলেশন, যেখানে ডেটা অন্য ক্লাসের কাছ থেকে হাইড করে নিরাপদে রাখছি।
OOP-তে সবসময়ই data manipulation এর ক্ষেত্রে data private রেখে getter(), setter() দিয়ে এক্সেস করা অর্থাৎ encapsulation maintain করা best practice।




Comments
Post a Comment