অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং(Object Oriented Programming) কি?

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং(Object Oriented Programming) বা OOP খুবই গুরুত্বপূর্ণ একটা বিষয় প্রোগ্রামিং এর ক্ষেত্রে।

আমরা OOP বুঝবো, তবে তার আগে চলো ছোট্ট একটা গল্প শুনি। গল্পটা হয়তো তোমরা আগে থেকেই শুনে থাকতে পারো অনেকে।

এক রাজার পর্ষদ বর্গের মাঝে মন্ত্রী এবং পন্ডিত উভয়ই আছেন। মন্ত্রী সমস্ত রাজ্যের দেখভাল করেন। নিরাপত্তা, শান্তি-শৃঙ্খলা, নিয়ম কানুন অনুযায়ী পরিচালনা করা সবই উনিই দেখাশুনা করতেন।

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

তখন রাজা বললেন ঠিক আছে, কেন আমি পন্ডিতকে তোমার চেয়ে বেশি বেতন দিই তা প্রমান করে দিচ্ছি। রাজ বাড়ির সদর দরজার সামনে পোষা কুকুরটা বাচ্চা দিয়েছে, দেখে এসো তো।

মন্ত্রী দেখে এলো।

রাজা জিজ্ঞেস করলেন, দেখে এসেছ?

মন্ত্রী বললো হ্যাঁ।

কয়টা বাচ্চা দিয়েছে কুকুরটা?

তা তো গুণে দেখি নাই হুজুর। দাঁড়ান আমি গুণে আসি। গুণে এসে বললো, পাঁচটা।

আচ্ছা। কয়টা বাচ্চা সাদা, কয়টা বাচ্চা কালো?

আবার মন্ত্রী দৌড় মারলো এবং এসে বললো দুইটা কালো, তিনটা সাদা।

ছেলে কয়টা মেয়ে কয়টা?

আবার মন্ত্রী দৌড়ুলো এবং ঘুরে এসে বললো, তিনটা ছেলে দুইটা মেয়ে।

এবার রাজা মন্ত্রীর সামনেই পন্ডিতকে ডাকলেন এবং একই কথা বললেন, রাজ বাড়ির সদর দরজার সামনে পোষা কুকুরটা বাচ্চা দিয়েছে, দেখে এসো তো।

পন্ডিত ঘুরে এলে রাজা জিজ্ঞেস করলেন, কয়টা বাচ্চা দিয়েছে কুকুরটা?

পন্ডিত বললো, হুজুর পাঁচটা।

কয়টা বাচ্চা সাদা, কয়টা বাচ্চা কালো?

হুজুর দুইটা কালো, তিনটা সাদা।

ছেলে কয়টা মেয়ে কয়টা?

হুজুর তিনটা ছেলে দুইটা মেয়ে।

মন্ত্রীর কি অবস্থা বুঝতেই পারছো।

এখানে দেখো মন্ত্রী এবং পন্ডিত দুই জনই কিন্তু একই কাজ করেছে। কিন্তু তাদের কাজের ধরন এবং দক্ষতার মধ্যে অনেক তফাৎ।

প্রোগ্রামিং করার জন্য প্রসিডিউরাল প্রোগ্রামিং(Procedural Programming) এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং(Object Oriented Programming) আসলে দুটো আলাদা পদ্ধতি এবং এই দুই পদ্ধতির মধ্যে পার্থক্য মূলত এই ধরনেরই।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং পদ্ধতি মূলত তোমাকে প্রোগ্রামে অনেকগুলো ফ্যাসিলিটি বা সুবিধা যোগ করবে যেগুলো প্রসিডিউরাল পদ্ধতি দিতে পারবে না।

এখন আবার নতুন প্রশ্ন, তাহলে প্রসিডিউরাল প্রোগ্রামিং কি জিনিস।

নিচের ছবিটা দেখো:






দেখো উপরের ছবির কোডেও কিছু ভেরিয়েবল এবং কিছু মেথড আছে। নিচের ছবির কোডেও আছে। কিন্তু উপরের পাশের সমস্ত ভেরিয়েবল এবং মেথড একটা ক্লাশের মধ্যে আছে।

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

আমরা তো রাজা-গজার একটা গল্প শুনলাম। চলো এবার একটু বর্তমান যুগের একটা গল্প থেকে বুঝার চেষ্টা করি।

ধরো তুমি একটি কার(Car) কোম্পানির মালিক। নিজেকে খুব ধনী মনে হচ্ছে তাই না?

আচ্ছা ধরে নাও তুমি অনেক ধনী এবং একটি কার কোম্পানি আছে তোমার।

তোমার কার কোম্পানিতে এক জন ডিজাইনার রেখে দিয়েছ যে প্রতিনিয়ত নতুন নতুন কারের ডিজাইন করে।

কিন্তু ব্যাপারটা হলো সে যখন নতুন একটি কার ডিজাইন করবে তখন কি সেই কারটার সমস্ত কিছু নতুন করে ডিজাইন করবে? না। কেন নয় কারণ নতুন যে ডিজাইনের কারই ডিজাইন করুক না কেন সেটার তো বেসিক কিছু ফিচার এবং ফাংশনালিটি(কিছু করার ক্ষমতা) থাকতেই হবে।

যেমন ফিচার: কারটির চাকা থাকবে, ড্যাসবোর্ড থাকবে, ষ্টিয়ারিং থাকবে, সিট থাকবে, মিরর থাকবে, বনেট থাকবে ইত্যাদি।

যেমন ফাংশনালিটি: কারটি চলতে পারবে, ডানে বামে ঘুরতে পারবে, ব্রেক করতে পারবে, হুইসেল দিতে পারবে, ব্রেক করলে পেছনে লাইট জ্বালাতে পারবে ইত্যাদি। যখন তোমার ডিজাইনার নতুন একটি কার ডিজাইন করবে তখন তো এসব বেসিক ব্যাপারগুলো নতুন করে ডিজাইন করার দরকার নেই।

সে যেটা করতে পারে:

  1. ওই বেসিক ফিচারগুলো নিয়েই একটা কার বানিয়ে ফেলা যেতে পারে।
  2. নতুন আরো ফিচার বা ফাংশনালিটি(কিছু করার ক্ষমতা) যোগ করতে পারে। যেমন: কার এ সিডি প্লেয়ার থাকবে, ব্যাক ক্যামেরা থাকবে, এয়ার ব্যাগ থাকবে, রেডিও থাকবে, এসি থাকবে, জাম্প করতে পারবে ইত্যাদি।
  3. কমন ফিচারগুলোতে নতুন ফ্যাসিলিটি যোগ করতে পারে। যেমন: চাকা আরো শক্তিশালী করলো(চাকাতে নতুন ফ্যাসিলিটি যোগ করলো), সিটের ডিজাইন আরো সুন্দর করলো(চাকাতে নতুন ফ্যাসিলিটি যোগ করলো), অনাকাঙ্খিতভাবে কোন কিছু কারের সামনে এলে কারটি হার্ড ব্রেক করবে(ব্রেক এ নতুন ফ্যাসিলিটি যোগ করলো), কারের সর্বোচ্চ গতি বাড়িয়ে দিলো(কারের চলতে পারার ক্ষমতাতে নতুন ফ্যাসিলিটি যোগ করলো), হুইসেলের সাউন্ডটা আরো নমনীয় করলো যাতে কানে সহনীয় হয়(হুইসেল দেবার ক্ষমতাতে নতুন ফ্যাসিলিটি যোগ করলো) তাহলে কাজ করার পদ্ধতিটা অনেক এফিসিয়েন্ট হলো তাই না? নতুন করে রি-ওয়ার্ক করতে হলো না মানে সব কিছু নতুন করে ডিজাইন করতে হলো না, অথচ তার যা উদ্দেশ্য ছিল সবই সফল হলো।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এ কাজের পদ্ধতি এরকমই।

  1. অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং পদ্ধতি কোড বা প্রোগ্রামকে এমনভাবে করার সুবিধা দেয় যাতে রি-ওয়ার্ক করতে হয় না। আগে কোন প্রোগ্রাম বানিয়েছ তা তোমাকে আবার বানাতে হবে না। সেটা পুনরায় ব্যবহার করা যায়।
  2. আগের প্রোগ্রামে নতুন কিছু যোগ করতে হলে খুব সহজেই যোগ করা যায় বা আগের প্রোগ্রামের কোন কিছুতে সহজেই নতুন ফিচার যোগ করা যায়।
  3. কোডগুলো খুব অর্গানাইজড হয়। যখন তুমি অনেক বড় বড় প্রোগ্রাম লিখবে তখন কোডগুলো ম্যানেজ করা অনেক সহজ হবে।
  4. কোডের নিরাপত্তা প্রদান করে। এছাড়া আরো অনেক সুবিধা দেয় যেগুলো আমরা উদাহরণ সহকারে দেখতে থাকলেই বুঝে ফেলবো। তেমন কঠিন কিছু না।

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

  1. Inheritance 

  2. Polymorphism

  3. Encapsulation 

  4. Abstraction

চলো আমরা হাতে কলমে দেখি। উপরের ফ্যাসিলিটি গুলো পেতে হলে আমাদের বেশ কিছু কনসেপ্টের সাথে পরিচিত হতে হবে। অনেক সহজ ব্যাপার আমরা একটা একটা করে দেখলেই বুঝে ফেলবো।