"হ্যালো, অ্যামিগো! আমি আজকের বক্তৃতাটি এনক্যাপসুলেশনে উৎসর্গ করতে চাই এটি কী তা সম্পর্কে আপনার ইতিমধ্যেই একটি সাধারণ ধারণা আছে।"

এনক্যাপসুলেশন - 1

তাই encapsulation সুবিধা কি? অনেকগুলি আছে, তবে আমি চারটি উল্লেখ করব যা আমার দৃষ্টিতে সবচেয়ে গুরুত্বপূর্ণ:

1) বৈধ অভ্যন্তরীণ অবস্থা।

প্রোগ্রামগুলিতে প্রায়শই একাধিক ক্লাস থাকে যা একই বস্তুর সাথে ইন্টারঅ্যাক্ট করে। বস্তুর অভ্যন্তরীণ ডেটার সাথে একযোগে ইন্টারঅ্যাক্ট করার মাধ্যমে, তারা বস্তুর ডেটা অখণ্ডতা লঙ্ঘন করতে পারে, যার ফলে বস্তুটি সঠিকভাবে কাজ করা বন্ধ করে দেয়।

সুতরাং অবজেক্টটিকে অবশ্যই তার অভ্যন্তরীণ ডেটাতে যেকোন পরিবর্তন ট্র্যাক করতে হবে, বা আরও ভাল - এটি সেই পরিবর্তনগুলি করা উচিত।

যদি আমরা কিছু ক্লাস ভেরিয়েবল অন্য ক্লাস দ্বারা পরিবর্তন করতে না চাই, তাহলে আমরা এটিকে প্রাইভেট ঘোষণা করি , যার মানে হল যে শুধুমাত্র সেই ক্লাসের পদ্ধতিগুলি এটি অ্যাক্সেস করতে পারে। আমরা যদি অন্য ক্লাসের জন্য ভেরিয়েবলগুলিকে শুধুমাত্র পঠনযোগ্য করতে চাই, তাহলে আমরা এই ভেরিয়েবলগুলিতে পাবলিক গেটার যোগ করি।

উদাহরণস্বরূপ, আমরা সবাই জানতে চাই যে আমাদের সংগ্রহে কতগুলি উপাদান রয়েছে, কিন্তু কেউ আমাদের অনুমতি ছাড়া এটি পরিবর্তন করতে সক্ষম হবে না। এই ক্ষেত্রে, আমরা একটি ভেরিয়েবল প্রাইভেট int কাউন্ট এবং একটি পদ্ধতি পাবলিক getCount() ঘোষণা করি ।

সঠিক এনক্যাপসুলেশন গ্যারান্টি দেয় যে অন্যান্য ক্লাসগুলি সরাসরি আমাদের ক্লাসের অভ্যন্তরীণ ডেটা অ্যাক্সেস করতে পারে না এবং ফলস্বরূপ, আমরা তাদের ক্রিয়াকলাপ নিয়ন্ত্রণ করতে সক্ষম না হয়ে এটি পরিবর্তন করতে পারে না। তারা পরিবর্তন করা হবে যে ভেরিয়েবল ধারণকারী ক্লাসে পদ্ধতি কল করতে হবে.

এটা অনুমান করা ভাল যে অন্যান্য প্রোগ্রামাররা সর্বদা আপনার ক্লাসগুলিকে তাদের জন্য সবচেয়ে সুবিধাজনক উপায়ে ব্যবহার করবে, যেভাবে আপনার (বা আপনার ক্লাস) জন্য সবচেয়ে নিরাপদ হবে সেভাবে নয়। এটি বাগগুলির একটি উত্স এবং তাদের প্রতিরোধ করার একটি উপায়৷

2) প্যারামিটার চেকিং।

কখনও কখনও আপনাকে আপনার ক্লাসের পদ্ধতিতে পাস করা পরামিতিগুলি পরীক্ষা করতে হবে। উদাহরণস্বরূপ, ধরুন আমাদের একটি ক্লাস আছে যা একটি "ব্যক্তি" প্রতিনিধিত্ব করে এবং আপনি তার জন্ম তারিখ উল্লেখ করতে পারেন। আমাদের যাচাই করা উচিত যে পাস করা কোনো ডেটা প্রোগ্রামের যুক্তি এবং ক্লাসের যুক্তির সাথে মিলে যায়। উদাহরণস্বরূপ, 13 তম মাস নেই, 30 ফেব্রুয়ারি নেই ইত্যাদি।

"কেন কেউ 30 ফেব্রুয়ারি জন্ম তারিখ নির্দেশ করবে?"

"ঠিক আছে, প্রথমত, এটি একটি ডেটা এন্ট্রি ত্রুটির ফলাফল হতে পারে।"

দ্বিতীয়ত, একটি প্রোগ্রাম ক্লকওয়ার্কের মতো কাজ করার আগে, এতে প্রচুর বাগ থাকতে পারে। উদাহরণস্বরূপ, এরকম কিছু ঘটতে পারে।

একজন প্রোগ্রামার কোড লেখেন যা নির্ধারণ করে যে পরশু কার জন্মদিন আছে। ধরা যাক আজ 3 মার্চ। প্রোগ্রামটি বর্তমান তারিখে 2 যোগ করে এবং 5 মার্চ জন্মগ্রহণকারী প্রত্যেককে খুঁজে বের করে। এখন পর্যন্ত, খুব ভাল।

কিন্তু যখন 30 মার্চ আসে, প্রোগ্রামটি কাউকে খুঁজে পায় না, যেহেতু 32 মার্চ নেই। পদ্ধতিগুলি যখন প্যারামিটার চেকিং করে তখন প্রোগ্রামগুলি অনেক কম বগি হয়।"

"আমার মনে আছে যখন আমরা ArrayList অধ্যয়ন করি তখন আমি এর কোড দেখেছিলাম, এবং সূচক প্যারামিটারটি শূন্যের চেয়ে বড় বা সমান এবং অ্যারের দৈর্ঘ্যের চেয়ে কম তা নিশ্চিত করার জন্য গেট এবং সেট পদ্ধতিতে চেক করা হয়েছিল। কোডটি একটি নিক্ষেপ করবে। ব্যতিক্রম যদি অ্যারের সূচকের সাথে সম্পর্কিত একটি উপাদান না থাকে।

"হ্যাঁ, এটা ক্লাসিক ইনপুট চেকিং। "

3) ক্লাসের ভিতরে কোড পরিবর্তন করার সময় কম বাগ।

ধরুন আমরা একটি বিশাল প্রকল্পের অংশ হিসাবে একটি সত্যিই সহায়ক ক্লাস লিখেছি। সবাই এটিকে এত পছন্দ করে যে অন্যান্য প্রোগ্রামাররা তাদের নিজস্ব কোডে শত শত জায়গায় এটি ব্যবহার করা শুরু করে।

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

কিন্তু যদি আমরা ব্যক্তিগত হিসাবে চিহ্নিত পদ্ধতিগুলি পরিবর্তন করি, আমরা জানি যে এই পদ্ধতিগুলি অন্য কারো কোড দ্বারা বলা হয় না। আমরা সেগুলি পুনরায় লিখতে পারি, এবং পরামিতিগুলির সংখ্যা এবং প্রকার পরিবর্তন করতে পারি এবং নির্ভরশীল কোড এখনও কাজ করবে। অথবা অন্তত এটি এখনও কম্পাইল হবে.

4) আমরা সংজ্ঞায়িত করি কিভাবে অন্যান্য বস্তু আমাদের বস্তুর সাথে যোগাযোগ করবে।

আমরা আমাদের বস্তুর উপর কি পদক্ষেপ নেওয়া যেতে পারে তা সীমাবদ্ধ করতে পারি। উদাহরণস্বরূপ, আমরা একটি ক্লাসের শুধুমাত্র একটি দৃষ্টান্ত তৈরি করতে চাই-এমনকি যদি এটি প্রকল্পে একযোগে একাধিক জায়গায় তৈরি করা হয়। এবং আমরা এনক্যাপসুলেশন ব্যবহার করে এটি অর্জন করতে পারি।

এনক্যাপসুলেশন - 2

এনক্যাপসুলেশন আমাদের অতিরিক্ত বিধিনিষেধ আরোপ করতে দেয় যা অতিরিক্ত সুবিধাতে পরিণত হতে পারে । উদাহরণস্বরূপ, স্ট্রিং ক্লাস একটি অপরিবর্তনীয় বস্তু হিসাবে প্রয়োগ করা হয়। স্ট্রিং ক্লাসের একটি উদাহরণ এটির সৃষ্টি এবং ধ্বংসের মধ্যে পরিবর্তন করা যায় না। স্ট্রিং ক্লাসের সমস্ত পদ্ধতি (মুছে ফেলুন, সাবস্ট্রিং, ...) একটি নতুন স্ট্রিং প্রদান করে এবং যে বস্তুটিকে কল করা হয় তা পরিবর্তন করে না।

"পবিত্র গরু। তাই এটা কেমন।"

"এনক্যাপসুলেশন আকর্ষণীয়।"

"আমি রাজী."