প্রসিডিউরাল ওরিয়েন্টেড বনাম অবজেক্ট ওরিয়েন্টেড: সি বনাম সি++(২য় পর্ব)

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

সবকিছুই শুরু করতে হলে একটা স্পষ্ট সংজ্ঞা দিয়ে শুরু করা উচিত, তাইনা? চলুন দেখি সংজ্ঞায়িত রূপে কেমন দেখায় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বা OOP হল একটি বিশেষ প্রোগ্রামিং প্রক্রিয়া (Methodology), যেটি প্রসিডিউরাল ওরিয়েন্টেড প্রোগ্রামিং এর মত ফাংশন আর প্রসিডিউরের উপর ভিত্তি করে কাজ না করে অবজেক্টের উপর ভিত্তি করে কাজ করে। ফাংশন আর প্রসিডিউর তো আগেই জেনেছিলেন, আর অবজেক্ট কি? একটু পরেই জানবেন। তবে কেবল অবজেক্ট আছে বলেই যে এর নাম অবজেক্ট ওরিয়েন্টেড তা কিন্তু মোটেও ঠিক নয়। নিচে OOP -এর বেসিক কনসেপ্টগুলোকে লিস্ট করে দিলাম। দেখে নিন-

  • Objects
  • Classes
  • Data Abstraction & Encapsulation
  • Polymorphism
  • Dynamic Binding
  • Message Passing

এই তালিকার অংশগুলোই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের মূল উপাদান। এসবগুলো নিয়েই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং কাজ করে। আগেই লিখেছিলাম যে একটু পরেই জানবেন অবজেক্ট কি- সেই ‘পরে’ সময়টা এসে গেছেই। আগেই বলে ফেলা যেত কিন্তু অবজেক্ট আর ক্লাস একজন আরেকজনের অনেক বেশি ভাল বন্ধু তাই দুজনকে একসাথে পরিচয় করিয়ে দেওয়াটাই সমীচীন। ডাটা টাইপ আপনি বিস্তারিতভাবে জেনে থাকবেন যদি মোটামুটি সি সম্পর্কে ন্যূনতম ধারণা রাখেন। যেমন- Integer, Floating Point, Double, Character ইত্যাদি প্রায় সব প্রোগ্রামিং ভাষারই অংশ। এগুলো প্রোগ্রামিংয়ে ব্যবহৃত ডাটাটি কোন ধরণের তা নির্দেশ করে। যেমন, নামের শেষে আমরা যেমন ভুঁইয়া দেখলেই আমরা যেমন ধরে নেই যে ভদ্রলোক খানদানের দিক থেকে ভুঁইয়াদের দলে পড়েন ঠিক তেমনই, শুরুতে প্রোগ্রামকে চিনিয়ে দেওয়ার সময় আমরা ডাটাদের বংশ বা ধরণ চিনিয়ে দেই ডাটা টাইপ দিয়ে। এখন, কাস্টম ডাটা টাইপ নামে প্রোগ্রামিংয়ে একটা অংশ আছে। মানে ভুঁইয়া আর চৌধুরীকে দিয়ে সংকর একটা বংশ তৈরির মত আর কি। অর্থাৎ এমন একটি ডাটা টাইপ যেখানে Integer ও থাকবে আবার Floating Point ও থাকবে- যদি চাই Character টাইপও থাকবে। এধরণের কাস্টম ডাটা টাইপ নিয়ে সি তে একটু গভীরে গেলেই জানা যায়। Structure & Union নামের একটা অধ্যায়ে এইসব নিয়ে বিস্তারিত বলা আছে সি প্রোগ্রামিং এ।
অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে কাস্টম ডাটা টাইপ বা কাস্টম বংশ তৈরির জন্যই Class এর ব্যবহার করা হয়। আর এই কাস্টম ডাটা টাইপেরই ভেরিয়েবল হল বেচারা Object. একটুখানি দ্বিধাদ্বন্দ্বে ভুগবেন- অস্বাভাবিক কিছু নয়। এগুলো নিয়ে আপনি আরো বিস্তারিত জানবেন যদি আপনার পাঠ্যসূচিতে এটি থাকে। তবে কেবল সাধারণ ভেরিয়েবল বললে Object লজ্জা পেয়ে যাবে এই ভেবে যে তার এত ক্ষমতা থাকতেও সে সাধারণ ভেরিয়েবল হিসেবে গণ্য হচ্ছে। সত্যিই তাই, প্রাথমিকভাবে আপনি একে ভেরিয়েবল বলে ফেলতে পারেন কেবল চেনার জন্য আর অবজেক্ট ওরিয়েন্টেডের আরো গভীরে গেলেই বুঝতে পারবেন অবজেক্টের সত্যিকার কাজ কি।

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

২য় পর্ব এই পর্যন্তই। ধারাবহিকভাবে, আমি পুরো লেখাটাই লিখে যাবো এখানে, যদিও ইচ্ছে ছিল- বড় করে হলেও একেবারে যেন দিতে পারি। :-)

মুসলিম সুমন

মুসলিম সুমন, মৌসুমী ব্লগার- সার্বক্ষণিক ছাত্র, মুক্তশিক্ষা নামক একটি উন্মুক্ত শিক্ষা কার্যক্রমের সাথে জড়িত, পড়ছেন কম্পিউটার বিজ্ঞান ও প্রকৌশল বিভাগে... সময় পেলেই ব্লগিং অনলাইন টিউটরিং-এ ব্যস্ত থাকেন। :-)

আপনার মতামত ...