অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং হলো এমন প্রোগ্রামিং টাইপ যা তার ফাংশনিং-এ অবজেক্ট এবং ক্লাস ব্যবহার করে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং রিয়েল ওয়ার্ল্ড এন্টিটি যেমন ইনহেরিট্যান্স, পলিমরফিজম, ডেটা হাইডিং ইত্যাদির ওপর বেসড। এটি ডেটা এবং সেসব ডেটা সেট ওপর কাজ করার ফাংশনকে একসাথে বান্ধা একটি সিঙ্গল এন্টিটিতে রিস্ট্রিক্ট করার লক্ষ্য রাখে।
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এর কিছু বেসিক কনসেপ্ট হলো −
- CLASS
- OBJECTS
- ENCAPSULATION
- POLYMORPHISM
- INHERITANCE
- ABSTRACTION
Class − একটি ক্লাস হলো একটি ডেটা টাইপ যাতে নিজস্ব মেম্বার থাকে অর্থাৎ ডেটা মেম্বার এবং মেম্বার ফাংশন। এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজে একটি অবজেক্টের ব্লুপ্রিন্ট। এটি C++-এ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এর বেসিক বিল্ডিং ব্লক। ক্লাসের মেম্বারগুলো প্রোগ্রামিং ল্যাঙ্গুয়েজে ক্লাসের একটি ইনস্ট্যান্স তৈরি করে এক্সেস করা হয়।
ক্লাসের কিছু গুরুত্বপূর্ণ প্রোপার্টি −
Class হলো ইউজার-ডিফাইনড ডেটা টাইপ।
একটি ক্লাসে মেম্বার থাকে যেমন ডেটা মেম্বার এবং মেম্বার ফাংশন।
ডেটা মেম্বার হলো ক্লাসের ভেরিয়েবল।
মেম্বার ফাংশন হলো ডেটা মেম্বার ম্যানিপুলেট করতে ব্যবহৃত মেথড।
ডেটা মেম্বার ক্লাসের প্রোপার্টি ডিফাইন করে আর মেম্বার ফাংশন ক্লাসের বিহেভিয়ার ডিফাইন করে।
একটি ক্লাসের একাধিক অবজেক্ট থাকতে পারে যাদের প্রোপার্টি এবং বিহেভিয়ার সবার জন্য কমন।
সিনট্যাক্স
class class_name {
data_type data_name;
return_type method_name(parameters);
}
Object − একটি অবজেক্ট হলো একটি ক্লাসের ইনস্ট্যান্স। এটি একটি এন্টিটি যাতে ক্যারেকтеристиক এবং বিহেভিয়ার থাকে যা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ ব্যবহৃত হয়। একটি অবজেক্ট হলো वो এন্টিটি যা মেমরি অ্যালোকেট করার জন্য তৈরি হয়। একটি ক্লাস ডিফাইন হলে তার নিজস্ব মেমরি চাংক থাকে না যা অবজেক্ট তৈরি होते সাথে সাথে অ্যালোকেট হয়ে যায়।
সিনট্যাক্স
class_name object_name;
উদাহরণ
#include<iostream>
using namespace std;
class calculator {
int number1;
int number2;
char symbol;
public:
void add() {
cout << "The sum is " << number1 + number2;
}
void subtract() {
cout << "The subtraction is " << number1 - number2;
}
void multiply() {
cout << "The multiplication is " << number1 * number2;
}
void divide() {
cout << "The division is " << number1 / number2;
}
calculator(int a, int b, char sym) {
number1 = a;
number2 = b;
symbol = sym;
switch(symbol) {
case '+': add(); break;
case '-': subtract(); break;
case '*': multiply(); break;
case '/': divide(); break;
default: cout << "Wrong operator";
}
}
};
int main() {
calculator c1(12, 34, '+');
}
আউটপুট
The sum is 46
Encapsulation অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ, এনক্যাপসুলেশন হলো ডেটা এবং ইনফরমেশনকে একসাথে র্যাপ করার কনসেপ্ট। এনক্যাপসুলেশনের একটি ফরমাল ডেফিনিশন হবে: এনক্যাপসুলেশন হলো ডেটা এবং সেটি ম্যানিপুলেট করতে পারে এমন রিলেটেড ফাংশনকে একসাথে বান্ধা।
একটি সহজ রিয়েল লাইফ উদাহরণ দিয়ে বুঝি,
আমাদের কলেজে, প্রতিটি কোর্সের জন্য ডিপার্টমেন্ট থাকে যেমন কম্পিউটার সায়েন্স, ইনফরমেশন টেক, ইলেকট্রনিকস, ইত্যাদি। প্রতিটি ডিপার্টমেন্টের নিজস্ব স্টুডেন্ট এবং সাবজেক্ট থাকে যা ট্র্যাক করা হয় এবং পড়ানো হয়। প্রতিটি ডিপার্টমেন্টকে একটি ক্লাস হিসেবে ভাবুন যা সেই ডিপার্টমেন্টের স্টুডেন্ট সম্পর্কিত ডেটা এবং পড়ানো হয় এমন সাবজেক্টগুলো এনক্যাপসুলেট করে। এছাড়া একটি ডিপার্টমেন্টের কিছু ফিক্সড রুল এবং গাইডলাইন থাকে যা সেই কোর্সের স্টুডেন্ট ফলো করতে হয় যেমন টাইমিং, লার্নিং-এ ব্যবহৃত মেথড, ইত্যাদি। এটি রিয়েল লাইফে এনক্যাপসুলেশন, যেখানে ডেটা আছে এবং ডেটা ম্যানিপুলেট করার উপায়ও আছে।
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এ এনক্যাপসুলেশন কনসেপ্টের কারণে অন্য একটি খুব গুরুত্বপূর্ণ কনসেপ্ট সম্ভব হয়েছে, সেটি হলো ডেটা অ্যাবস্ট্রাকশন বা ডেটা হাইডিং। এটি সম্ভব হয় কারণ এনক্যাপসুলেশন ডেটা হাইড করে এবং শুধু যে ইনফরমেশন ডিসপ্লে করতে হবে সেটি শো করে।
Polymorphism নামটাই বোঝাচ্ছে পলিমরফিজম মানে মাল্টিপল ফর্ম। অর্থাৎ পলিমরফিজম হলো অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এর সামর্থ্য যেটি একই কাজ একাধিক ফর্মে করতে পারে। মেথডের বিহেভিয়ার মেথড কোল করা হয় সেই টাইপ বা সিচুয়েশন ওপর ডিপেন্ড করে।
একটি রিয়েল লাইফ উদাহরণ নিই, একজন ব্যক্তির একাধিক বিহেভিয়ার থাকতে পারে সিচুয়েশন অনুযায়ী। যেমন একজন নারী একসাথে মা, ম্যানেজার এবং কন্যা। এবং এটি তার বিহেভিয়ার ডিফাইন করে। পলিমরফিজম কনসেপ্টের উৎপত্তি এখান থেকে।
C++ প্রোগ্রামিং ল্যাঙ্গুয়েজে, পলিমরফিজম অর্জন করার দুটি উপায় রয়েছে। সেগুলো হলো অপারেটর ওভারলোডিং এবং ফাংশন ওভারলোডিং।
Operator overloading অপারেটর ওভারলোডিং-এ একটি অপারেটরের একাধিক বিহেভিয়ার থাকতে পারে ব্যবহারের আলাদা ইনস্ট্যান্সে।
Function overloading একই নামে একাধিক ফাংশন যা কিছু কন্ডিশন বেসড একাধিক টাইপের কাজ করতে পারে।
Inheritance এটি একটি ক্লাসের ক্যাপাবিলিটি যা অন্য ক্লাসের প্রোপার্টি বা ক্যারেকтеристиক ইনহেরিট বা ডেরাইভ করতে পারে। এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামে খুব গুরুত্বপূর্ণ কারণ এটি রিযুজাবিলিটি অনুমতি দেয় অর্থাৎ ইনহেরিট্যান্স ব্যবহার করে অন্য ক্লাসে ডিফাইন করা মেথড ব্যবহার করা যায়। যে ক্লাস অন্য ক্লাস থেকে প্রোপার্টি ডেরাইভ করে সেটিকে চাইল্ড ক্লাস বা সাবক্লাস বলা হয় এবং যে ক্লাস থেকে প্রোপার্টি ইনহেরিট করা হয় সেটিকে বেস ক্লাস বা প্যারেন্ট ক্লাস বলা হয়।
C++ প্রোগ্রামিং ল্যাঙ্গুয়েজ নিচের টাইপের ইনহেরিট্যান্স সাপোর্ট করে:
- সিঙ্গল ইনহেরিট্যান্স
- মাল্টিপল ইনহেরিট্যান্স
- মাল্টি লেভেল ইনহেরিট্যান্স
- হায়ারার্কিক্যাল ইনহেরিট্যান্স
- হাইব্রিড ইনহেরিট্যান্স
Abstraction ডেটা অ্যাবস্ট্রাকশন বা ডেটা হাইডিং হলো ডেটা হাইড করে শুধু রিলেভান্ট ডেটা ফাইনাল ইউজারকে দেখানোর কনসেপ্ট। এটি অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং-এর একটি গুরুত্বপূর্ণ অংশ।
একটি রিয়েল লাইফ উদাহরণ নিই কনসেপ্ট ভালোভাবে বুঝতে, যখন আমরা বাইক চালাই তখন আমরা শুধু জানি ব্রেক চাপলে বাইক রুকবে এবং থ্রটল ঘুরালে বাইক ত্বরণ পাবে কিন্তু আপনি না জানেন কীভাবে কাজ করে এবং সেটি জানাও আপনার দায় নয়, তাই এই কনসেপ্ট ডেটা অ্যাবস্ট্রাকশন হিসেবে কাজ করে।
C++ প্রোগ্রামিং ল্যাঙ্গুয়েজে ডেটা অ্যাবস্ট্রাকশন অর্জনের দুটি উপায় রয়েছে −
- ক্লাস ব্যবহার করে
- হেডার ফাইল ব্যবহার করে