অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং সি++


মাত্র ৪ মিনিটে ব্যাসিক সি++ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং কনসেপ্ট এবং ফান্ডামেন্টালস

আমাদের আশেপাশে কতই তো মানুষ দেখি, প্রতিটি মানুষই একজন আরেকজন থেকে আলাদা, আবার সবার কিছু একই রকম বৈশিষ্ট থাকে। থাক বাদ দেন, মানুষ জিনিসটা অনেক কমপ্লিকেটেড, আমি নিজেই বুঝি না। তাহলে চলেন কথা বলি গাড়ী অথবা কার নিয়ে। গাড়ী তো একটা বস্তু, আমরা সবাই মানি এবং জানি। এই বস্তুকে ইংরেজীতে বলি অবজেক্ট (Object)। কিন্তু একটা বস্তু তো আর এভাবেই বস্তু উপাধি পেতে পারে না। উপাধি পাওয়ার জন্য কিছু প্রোপারটিস এবং ম্যাথোড লাগবে। যেমন গাড়ী একটি বস্তু তখনই হয় যখন এর একটি নির্দিষ্ট রং থাকবে, গাড়ীর ভেতরে ঢুকা এবং বাহির হবার জন্য নির্দিষ্ট সংখ্যার দরজা থাকবে এবং সবচেয়ে গুরুত্বপূর্ণ ভাবে একটা নির্দিষ্ট আকাড় থাকবে। গাড়ীটা আবার এক্সেলেরেট অথবা সামনে চলতে পারবে এবং ব্রেক করতে পারবে, গিয়ার চেঞ্জ করতে পারবে, দিক পরিবর্তন করতে পারবে। এখানে দরজা, রং, আকার এগুলো হচ্ছে গাড়ী নামক অবজেক্টের প্রোপারটিস এবং এক্সেলেরেট, ব্রেক এবং দিক পরিবর্তন করা হচ্ছে গাড়ীটির ম্যাথোড। তাই গাড়ীটি একটি অবজেক্ট অরিয়েন্টেড। 

তেমন ভাবে সি++ প্রোগ্রামিং ল্যাংগুয়েজটিও অবজেক্ট অরিয়েন্টেড। কীভাবে? 

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজের প্রধান লক্ষ্য হচ্ছে কোডের মধ্যে একটি অবজেক্ট তৈরি করা, যেটার গাড়ীর মতোন কিছু নির্দিষ্ট বৈশিষ্ট বা প্রোপারটিস এবং ম্যাথোড থাকবে। আর সি++ এর প্রধ্যান লক্ষ্য ছিলো সি প্রোগ্রামিং ল্যাংগুজের সাথে অবজেক্ট অরিয়েন্টেশন যুক্ত করে এটাকে অনেক শক্তিশালী বানায়ে দেয়া।

সি প্রোগ্রামিং ল্যাংগুয়েজ এখনো সবচেয়ে শক্তিশালী ল্যাংগুয়েজ দের মধ্যে একটা।

সি++ অবজেক্ট অরিয়েন্টেশনে পুরো বিশ্বকেই অবজেক্ট হিসেবে দেখা হয়। যেমন উপরের গাড়ীটা। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর কাজ হচ্ছে বাস্তব জগতের প্রকৃত পদার্থ (entities) গুলোকে প্রোগ্রামিং এ Implement করা। প্রকৃত পদার্থ বলতে উত্তরাধিকার সূত্র (inheritance), লুকানো (hiding), বহুরূপতা (polymorphism) ইত্যাদি। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (OOP) এর প্রধান উদ্দেশ্য হচ্ছে সকল ডেটা এবং যেসকল ফাংশন এই ডেটা গুলোকে অপারেট করবে তাদেরকে একসাথে বাইন্ড অথবা একত্রিত করা যাতে কোডের অন্যান্য অংশ গুলো এই ডেটা গুলোকে ব্যবহার করতে না পারে। শুধু অই নির্দিষ্ট ফাংশনটাই ডেটা গুলোকে ব্যবহার করতে পারবে। 


সি++ এর কিছু প্রিন্সিপাল কনসেপ্টস আছে যেগুলো নিয়ে সি++ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর ফান্ডামেন্টাল তৈরি করেছে। এখন এগুলা নিয়ে আলোচনা করবো — 

Object (অবজেক্ট) — 

অবজেক্টস হচ্ছে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর ব্যাসিক রান- টাইম entities। এটা OOP এর একটি ব্যাসিক ইউনিট। এই ইউনিটের কাজ হচ্ছে ডেটা এবং যেই ফাংশন এই ডেটাকে অপারেট করে, এই দুইটাকে একত্রিত করে বাইন্ড করা। অবজেক্ট হচ্ছে একরকমের ক্লাশ যেটাতে নির্দিষ্ট ইউজার থাকে এবং সেই নির্দিষ্ট ইউজারের নির্দিষ্ট ডেটা টাইপ থাকে। যেমন —

class car {
  char name[10];
  ind id;
  
public:
  void getDetails(){}
};

int main(){
  car ferrari;    // ferrari is an object
}

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


Class (ক্লাশ) — 

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

class myFirst_class {
  private:
      // data members and member function declarations
  public:
      // data members and member function declarations  
  protected:
      // data members and member function declarations
}

ডিফল্ট ভাবে সি++ এ ক্লাশ গুলো প্রাইভেট থাকে।


Abstraction (ডেটা অ্যাভস্ট্র্যাকশন) — 

আমাদের সমাজে আমরা একটা টাইপের মানুষকে অনেক ভালো করে চিনি। যারা নিজের কথা মানুষকে জানাই না বলতে গেলে, যেমন আপনি জিজ্ঞাসা করলেম, কীরে ভাত খাবি? হ। অথবা তোমার নাম কি? দিবাকর। এতটুকুতেই তাদের কথা শেষ। অর্থাৎ উনাকে যা জিজ্ঞাসা করা হবে শুধু তাই বলবে, এর বাইরে একটা কথাও না।

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

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


Encapsulation — 

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


Inheritance (উত্তরাধিকার সূত্র) — 

অবজেক্ট অরিয়েন্টেড প্রোগ্রামের সবচেয়ে ব্যবহারযোগ্য সুবিধা হচ্ছে একই কোড বারবার ব্যবহার করা। সি++ অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এ একই অবজেক্টের একটি ক্লাশের বিভিন্ন প্রোপার্টিসকে সেই অবজেক্টের আরেকটি ক্লাশ ব্যবহার করতে পারাকেই ইনহেরিটেন্স বলে। এটা হচ্ছে একটি ক্লাশের ডেটার উপর ভিত্তি করে আরেকটি নতুন ক্লাশ করা। আগের ক্লাশটিকে বলে Base Class এবং নতুন ক্লাশটিকে বলে Derived Class। সি++ অবজেক্ট অরিয়েন্টেশনের এটা অন্যতম গুরুত্বপূর্ণ একটা সুবিধা। ইনহেরিটেন্স কোডের সাইজ কমাতে অনেক সাহায্য করে।


Polymorphism (বহুরূপতা) — 

আমরা সবাই কিছু কিছু একধরণের মানুষের সাথে চলাচল করি, আজকে এক কথা আবার কালকে আরেক কথা। এটাকে বহুরূপতা বলে। সি++ OOP তেও এই জিনিষটা আছে। এটাকে পলিমরফিসম বলে। অর্থাৎ একটি অপারেশন একই সাথে একাধিক রুপ ধারণ করতে পারে তাই যখন প্রোগ্রামটি তাকে যেভাবে ব্যবহার করতে বলে সেই অপারেশনটিও সেভাবে ব্যবহার করে। অবশ্যই তা অপারেশনের ডেটা টাইপের উপর নির্ধারণ করে।

সি++ এ একটি ফাংশন অথবা অপারেশনকে একই সাথে বিভিন্ত ভাবে অথবা অর্থে ব্যবহার করাকেই পলিমরফিসম বলে। এখানে পলি মানে হচ্ছে অনেক। 


Overloading — 

যখনই একটি পূর্বে অবস্থিত অপারেটর অথবা ফাংশনকে আবার নতুন একধরনের ডেটা টাইপকে অপারেট করতে বলা হয় তাকে অভারলোডিং বলা হয়। অভারলোডিং হচ্ছে পলিমরফিসমেরই একটি অংশ অথবা ব্রাঞ্চ। সি++ একই সাথে অপারেটর এবং ফাংশন অভারলোডিংকে সাপোর্ট করে।

যখন একটি অপারেটরকে বিভিন্ন সময়ে এবং অবস্থায় বিভিন্ন ভাবে ব্যবহার করতে আদেশ দেয়া হয় তখন তাকে অপারেটর অভারলোডিং বলে। আবার

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

আজকে এই পর্যন্তই। ধন্যবাদ সাথে থাকার জন্য।

#হ্যাপি_প্রোগ্রামিং


আমার ব্যাক্তিগত ব্লগ — 

বাংলা ভার্শন —  https://with.dibakar.me/

ইংলিশ ভার্শন —  https://with.dibakar.me/en/

আমাকে পাবেন — 

ফেসবুকে —  https://www.facebook.com/dipu.dibakar

টুইটারে —  https://twitter.com/iamdibakardipu

ইনস্টাগ্রামে —  https://www.instagram.com/dibakardipu/

গিটহাবে —  https://github.com/dibakarsutradhar

লিঙ্কডইনে —  https://linkedin.com/in/dibakardipu/

Posts created 18

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top
Scroll Up