অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর বিভিন্ন বৈশিষ্ট্যসমূহ I প্রোগ্রামিং ল্যাংগুয়েজ ৩

আমাদের আজকের আলোচনার বিষয় অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর বিভিন্ন বৈশিষ্ট্যসমূহ – যা অধ্যায় ১ ”অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং” এর অন্তর্ভুক্ত। বর্তমান বিশ্বের সর্বাধুনিক প্রযুক্তি হচ্ছে কম্পিউটার প্রযুক্তি। কারণ শিল্পকারখানা, গবেষণা, শিক্ষাপ্রতিষ্ঠান, চিকিৎসাশাস্ত্র ইত্যাদি সকল ক্ষেত্রই আজ কম্পিউটার অটোমেটেড। কম্পিউটার অটোমেশনের সঙ্গে কম্পিউটার প্রোগ্রামিং ও প্রোগ্রামিং লেখার জন্য প্রোগ্রামিং ল্যাংগুয়েজ অত্যন্ত গুরুত্বপূর্ণ।

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

 

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর বিভিন্ন বৈশিষ্ট্যসমূহ I প্রোগ্রামিং ল্যাংগুয়েজ ৩

 

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর বিভিন্ন বৈশিষ্ট্যসমূহ

ইনহেরিটেন্স (Inheritance) : ইংরেজি Inheritance শব্দের অর্থ “উত্তরাধিকার সূত্রে পাওয়া।” কোন বড় প্রোগ্রামে অনেক সময় প্রায় একই কার্য সম্পাদন করার জন্য কিছু প্রোগ্রামাংশ বার বার লেখার প্রয়োজন হয়। তবে একই প্রোগ্রামে নির্ভুল, পরীক্ষিত এবং এক বা একাধিকবার ব্যবহৃত কোন প্রোগ্রামাংশ বা class নতুন করে তৈরি না করে পুনঃ পুনঃ ব্যবহার করা অনেক সুবিধাজনক।

এতে সময় ও খরচ কিংবা প্রোগ্রামের ঝামেলা কমানোর সাথে সাথে প্রোগ্রামের গ্রহণ যোগ্যতা ও বাড়ে। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং পদ্ধতিতে একটা ক্লাস প্রয়োজনে আরেকটা ক্লাস কে inherit করার এই প্রক্রিয়াকে ইনহেরিটেন্স (inheritance) বলে।

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর ক্ষেত্রে যখন কোন ক্লাস অন্য একটি ক্লাস এর এক বা একাধিক বৈশিষ্ট্য (attribute, behaviours) ইনহেরিট করে তখন প্রথমোক্ত ক্লাসটিকে ডিরাইভড ক্লাস (Derived class) আর যেই ক্লাস থেকে বৈশিষ্ট্য ইনহেরিট করা হবে তাকে বেস ক্লাস (Base class) বলে।

class Student

{

private:
long Roll;

protected:

char Name [20];

public:

void GetData ();

void Display ();

}

class Result: public Student

private:

float Marks;

public:

void Getmarks ();

void Showmarks ();

}

এক্ষেত্রে Result ক্লাসের নতুন অবস্থা হবেঃ

class Result

{

private:

float Marks;

protected:

char Name [20];            //Inherited from Student Class

public:

void GetData ();             //Inherited from Student Class
void Display ():               //Inherited from Student Class
void Getmarks ();
void showMarks ();

ডাটা অ্যাবস্ট্রাকশন (Data Abstraction): ডাটা অ্যাবস্ট্রাকশন অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর একটি অত্যাবশ্যকীয় বৈশিষ্ট্য যা ক্লাসে বিদ্যমান থাকে। ডাটা অ্যাবস্ট্রাকশন হচ্ছে এমন এক ধরনের ডাটা টাইপ বর্ণনা কৌশল যেখানে কিছু ডাটা থাকে এবং ঐ ডাটা এক্সেস করার জন্য কতগুলো ফাংশন থাকে। ত

বে ঐ টাইপের কোন ভেরিয়েবলের ডাটা তার নিজস্ব ফাংশনের সাহায্য ছাড়া অন্য কোন ভাবে access করা যায় না। যেহেতু ক্লাস ও ডাটা অ্যাবস্ট্রাকশন-এর ধারণা একই রকম তাই তারা Abstract Data Type (ADT) নামে ও পরিচিত। হাই লেভেল সিস্টেম ডিজাইনের ভিত্তি হিসাবে Data Abstraction ব্যবহৃত হয়। Multi Module প্রসেসিং সিস্টেমে Abstract ডাটা টাইপ এর অবজেক্ট ব্যবহার সুবিধাজনক।

এনক্যাপসুলেশন (Encapsulation): এনক্যাপসুলেশন (Encapsulation) হচ্ছে এমন একটি প্রক্রিয়া যার মাধ্যমে কোন অবজেক্টের ডাটা ও ফাংশনসমূহকে একত্রিত করে ক্লাস তৈরি করা হয়। এর মাধ্যমে ডাটা ও ফাংশনসমূহ বাইরের অবাঞ্চিত এক্সেস হতে রক্ষা পায়।

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

পলিমরফিজম (Polymorphism): পলিমরফিজম অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং-এর অপর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। পলিমরফিজম দুটো গ্রিক শব্দ পলি এবং মরফিজম-এর সমন্বয়ে গঠিত, যাদের অর্থ যথাক্রমে বহু এবং রূপ। সুতরাং পলিমরফিজম বলতে বুঝায় বহুরূপ। অর্থাৎ ভিন্ন ভিন্ন অবস্থায় একই অবজেক্টের ভিন্ন ভিন্ন ফল প্রদান করা। যেমন- প্লাস অপারেটর (+), যা সাধারণত দুইটি নিউমেরিক সংখ্যার যোগফল হিসেবে তৃতীয় একটি নিউমেরিক সংখ্যা প্রদান করে।

তবে এই অপারেটর বিভিন্ন অপার‍্যান্ডের জন্য বিভিন্ন ফলাফল প্রদান করতে পারে। যেমন- দুইটি স্ট্রিং-এর ফলাফল হিসেবে তৃতীয় একটি স্ট্রিং প্রদান করতে পারে। মূলত অপারেটর ওভারলোডিং-এর মাধ্যমে এই কাজ করা হয়। অপারেটর ওভারলোডিং ব্যবস্থায় একই অপারেটর ভিন্ন ভিন্ন ডাটা টাইপ অপারেন্ডের জন্য ভিন্ন ভিন্ন ফলাফল প্রদান করতে পারে। অপারেটর ওভারলোডিং একটি কম্পাইল টাইম পলিমরফিজম।

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

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং-এ রান-টাইম পলিমরফিজম নামে অপর এক প্রকার পলিমরফিজম বিদ্যমান এবং পলিমরফিজম বলতে সাধারণত রান-টাইম পলিমরফিজমকেই বুঝায়। রান-টাইম পলিমরফিজম-এর মাধ্যমে কম্পাইলার প্রোগ্রাম চলাকালীন সময় বেস ক্লাস এবং ডিরাইভড ক্লাসে একই প্রোটোটাইপ বিশিষ্ট দুই বা ততোধিক মেম্বার ফাংশনের মধ্য থেকে উপযুক্ত ফাংশন নির্বাচন করতে পারে।

এ প্রক্রিয়ায় ভিন্ন ভিন্ন ক্লাসের কতকগুলো অবজেক্ট একই গ্রুপে বর্ণনা করা হয় এবং কম্পাইলার অবজেক্টগুলোর রেফারেন্স টাইপের ভিত্তিতে উপযুক্ত ফাংশন কল করে স্ব স্ব কার্য নির্বাহ করে।

ম্যাসেজ পাসিং (Message passing): অবজেক্ট অরিয়েন্টেড সিস্টেমে অবজেক্টগুলো প্রয়োজনে পরস্পরের মধ্যে সংযোগ রক্ষা করে। সাধারণভাবে বলা চলে, মানুষ যেভাবে পরস্পরের মধ্যে যোগাযোগ করে অবজেক্টগুলো অনেকটা সেভাবেই পরস্পরের মধ্যে সংযোগ রক্ষা করে। মূলত অবজেক্টগুলো তাদের মেম্বার ফাংশনের মাধ্যমে এক অপরের সাথে সংযোগ রক্ষা করে।

কোন অবজেক্টের ফাংশন কেবল ঐ অবজেক্টের নিজস্ব ডাটা ছাড়া সরাসরি অন্য অবজেক্টের ডাটা এক্সেস করতে পারে না। যদি কখনও কোন অবজেক্টকে অপর কোন অবজেক্টের সাথে সংযোগ করতে হয় তবে প্রথম অবজেক্ট তার নিজস্ব মেম্বার ফাংশনের মাধ্যমে দ্বিতীয় অবজেক্টকে অনুরোধ পাঠায়। তারপর দ্বিতীয় অবজেক্ট তার ক্ষমতানুযায়ী নিজস্ব মেম্বার ফাংশনের মাধ্যমে অনুরোধের ফলাফল পাঠায়।

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

 

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর বিভিন্ন বৈশিষ্ট্যসমূহ I প্রোগ্রামিং ল্যাংগুয়েজ ৩

 

ম্যাসেজ পাসিং এর সময় মূলত তিনটি শর্ত পূরণ করতে হয়। শর্ত তিনটি হচ্ছে-

  • অবজেক্টের নাম
  • মেথডের নাম ও
  • ইনফরমেশন

উদাহরণঃ employee, salary (name);

এখানে, ’employee’ হচ্ছে অবজেক্টের নাম, ‘salary’ মেথডের বা ফাংশনের নাম আর ‘name’ হচ্ছে ইনফরমেশন। ডাইনামিক বাইন্ডিং (Dynamic binding) : ডাইনামিক অর্থ পরিবর্তনশীল। স্ট্যাটিক বাইন্ডিং প্রক্রিয়ায় ফাংশন ওভারলোডিং- এর ক্ষেত্রে ফাংশনের আরগুমেন্টগুলোর ডাটা টাইপ ও সংখ্যা এবং অপারেটর ওভারলোডিং-এর ক্ষেত্রে অপারেশনে ব্যবহৃত অপার‍্যান্ডগুলোর ডাটা টাইপের মাধ্যমে অবজেক্ট (ফাংশন, অপার্যান্ড, অপারেটর ইত্যাদি) গুলোর মধ্যে স্থির পার্থক্য বিদ্যমান থাকে।

এসব পার্থক্য কম্পাইলার প্রোগ্রাম কম্পাইল করার সময় ধরতে পারে। কিন্তু যদি দুই বা ততোধিক ক্লাসে (যেমন- বেস ক্লাস এবং ডিরাইভড ক্লাসে) একই নাম, একই প্রটোটাইপ এবং আরগুমেন্ট টাইপ ও সংখ্যাবিশিষ্ট দুই বা ততোধিক আলাদা ফাংশন থাকে এবং প্রোগ্রাম পয়েন্টার বার বার এক ফাংশন থেকে অন্য ফাংশনে পরিবর্তন করতে হয় তবে কম্পাইল করার সময় কম্পাইলার কর্তৃক সঠিক ফাংশন নির্বাচন করা সম্ভব নাও হতে পারে।

এক্ষেত্রে প্রোগ্রাম নির্বাহের সময় সাঠক ফাংশন নির্বাচনের কোন বিকল্প থাকে না। মূলত ফাংশনগুলোর ডাইনামিক রেফারেন্সের ভিত্তিতে প্রোগ্রাম নির্বাহের সময় উপযুক্ত ক্লাসের অবজেক্ট নির্বাচনের মাধ্যমে সঠিক ফাংশন নির্বাচন করা হয়, কিংবা পয়েন্টার এক ফাংশন থেকে অপর ফাংশনে স্থানান্তর করা হয়।

এ প্রক্রিয়াকে ডাইনামিক বাইন্ডিং বলা হয়। ডাইনামিক বাইন্ডিং প্রক্রিয়ায় একাধিক রেফারেন্স বিশিষ্ট দুই বা ততোধিক ফাংশন থেকে কোন ফাংশন নির্বাচন প্রক্রিয়া ফাংশনগুলোর রেফারেন্স অ্যাড্রেসের উপর নির্ভর করে।

Leave a Comment