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

0
32

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

প্রথমেই বলে রাখি, আমরা আজ পর্যন্ত যা শিখেছি, তার সবই ছিল সি-এর দান। শুধু মাত্র ইনপুট-আউটপুট সিস্টেমটাই ছিল সি++ এর নিজস্ব। সি নিজেই একটা অনেক শক্তিশালী ল্যাঙ্গুয়েজ ছিল।  তবে এটি অবজেক্ট অরিয়েন্টেড ছিল না। এই সমস্যা সমাধানের জন্যই ১৯৭৯ সালে Murray Hill-এর Bell Labs-এ Bjarne Stroustrup সি ল্যাঙ্গুয়েজটার উন্নতি সাধনের কাজ করেন, এবং নাম দেন C with Classes, পরবর্তীতে ১৯৮৩ সালে যার নাম হয় C++.

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

এটা অতি সাধারন একটা ক্লাসের ডিক্লারেশন। পরিচিত মনে হচ্ছে না? দেখতে ডাটা স্ট্রাকচার ডিক্লারেশনের মতই! শুধু পাবলিক, প্রাইভেট নামের কী-ওয়ার্ডগুলোই নতুন। এগুলো সম্পর্কে আমরা সামনে বিস্তারিত জানবো। আপাতত জেনে রাখি যে, এভাবে প্রাইভেট করে রাখতে পারার ধর্মটার নাম হল ডাটা অ্যাবস্ট্রাকশন (Data Abstraction), যা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং-এর অন্নতম ভিত্তি!

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

  • Data Abstraction
  • Encapsulation
  • Polymorphism
  • Inheritance

প্রথমটি সম্পর্কে আমরা ইতোমধ্যেই জেনেছি। বাকি তিনটি সম্পর্কেও বেসিক ধারণা পাব নিচে!

পলিমরফিজম

আমাদের যাদের সি-এর সাথে পরিচয় রয়েছে, তারা হয়তো একটা জিনিসের মুখোমুখি হয়েছি। সি-তে যেসব ফাংশন আগে ডিফাইন করা (যেমন, sqrt, sin ইত্যাদি), সেসব নামে নতুন কোনো ফাংশন ডিফাইন করা যায় না। যেমন, নিচের সি কোডটা রান করতে চাইলে এরর দেখাবেঃ

এরর মেসেজটা হলঃ
error message

অর্থাৎ, sqrt নামের একটি ফাংশন ইতোমধ্যে থাকার কারণে তুমি এই নামে নতুন একটা ফাংশন ডিক্লেয়ার করতে পারছো না। [তবে তুমি math.h ইনক্লুড না করলে ঠিকই প্রোগ্রামটা ঠিক মত কাজ করতো ;)]

আবার, তুমি একই নামে দুইটা ফাংশনও সি-তে ডিফাইন করতে পারবা না, যেমনঃ

এক্ষেত্রেও একই ধরণের এরর দেখাবে। এবার তুমি একটা কাজ কর। তুমি ফাইলটা .c দিয়ে সেভ না করে .cpp দিয়ে সেভ করে দেখ। এবার খুব সুন্দর করে নিচের আউটপুট দেখাবে!

LEAVE A REPLY

Please enter your comment!
Please enter your name here