1। পরিচিতি

আমরা আজকের পাঠটি এনক্যাপসুলেশনে উত্সর্গ করতে চাই । আপনি ইতিমধ্যেই জানেন যে এটি সাধারণ পদে কী।

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

এনক্যাপসুলেশন এর সুবিধা কি কি? তাদের মধ্যে বেশ কয়েকটি রয়েছে, তবে আমি চারটি একক করতে পারি যেগুলি আমার মতে প্রধান:


2. বৈধ অভ্যন্তরীণ অবস্থা

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

ফলস্বরূপ, অবজেক্টটিকে তার অভ্যন্তরীণ ডেটাতে যে কোনও পরিবর্তনের ট্র্যাক রাখতে হবে বা আরও ভাল, পরিবর্তনগুলি নিজেই করতে হবে।

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

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

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

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


3. পদ্ধতির আর্গুমেন্ট যাচাই করা

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

কেউ কেন তাদের জন্ম তারিখের জন্য 30 ফেব্রুয়ারি নির্দেশ করবে? প্রথমত, ডেটা প্রবেশ করার সময় এটি একটি ব্যবহারকারীর ত্রুটি হতে পারে। দ্বিতীয়ত, একটি প্রোগ্রাম ঘড়ির কাঁটার মতো চলতে শুরু করার আগে এতে প্রচুর ত্রুটি থাকতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত পরিস্থিতি সম্ভব।

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

কিন্তু যখন 30 মার্চ আসে, প্রোগ্রামটি কাউকে খুঁজে পাবে না, কারণ ক্যালেন্ডারে 32 মার্চ নেই। যদি আমরা পদ্ধতিতে পাস করা ডেটা পরীক্ষা করি তবে একটি প্রোগ্রামে অনেক কম ত্রুটি রয়েছে।

মনে আছে যখন আমরা ArrayListএর কোড অধ্যয়ন এবং বিশ্লেষণ করেছি? আমরা দেখেছি যে এবং পদ্ধতিগুলি অ্যারের দৈর্ঘ্যের চেয়ে শূন্যের চেয়ে বড় বা সমান এবং কম getকিনা তা পরীক্ষা করেছে। setindex আরও কি, এই পদ্ধতিগুলি একটি ব্যতিক্রম নিক্ষেপ করে যদি সূচকটি অ্যারের সীমার বাইরে পড়ে। এটি ইনপুট যাচাইকরণের একটি ক্লাসিক উদাহরণ।


4. কোড পরিবর্তন করার সময় ত্রুটি কম করা

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

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

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


5. আমরা সিদ্ধান্ত নিই কিভাবে আমাদের বস্তু বাইরের বস্তুর সাথে মিথস্ক্রিয়া করে

আমরা কিছু ক্রিয়াকে সীমাবদ্ধ করতে পারি যা আমাদের বস্তুর সাথে সঞ্চালিত হতে পারে। উদাহরণস্বরূপ, ধরুন আমরা একটি বস্তুকে শুধুমাত্র একবার ইনস্ট্যান্টিয়েট করতে চাই। এমনকি প্রকল্পের বেশ কয়েকটি জায়গায় এটি তৈরি হতে পারে। এবং আমরা এনক্যাপসুলেশনের জন্য এটি করতে পারি।

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

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

Encapsulation একটি খুব আকর্ষণীয় জিনিস.