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

প্রোগ্রামিং শিখছেন বা জানেন এমন যে কারো কাছেই সি/সি++ একটি অতিপরিচিত শব্দ। দুই ভাষাই যদিও মৌলিক তারপরও সি এর গুরুত্ব যেন একটু বেশিই। মৌলিক প্রোগ্রামিং এর বেশিরভাগই ফিচার খুব সহজেই এখান থেকে কেউ নিজের এখতিয়ারে নিয়ে আসতে পারবেন। সব প্রোগ্রামিং ভাষারই কিন্তু কিছু জিনিস থাকে একেবারে অপরিবর্তিত। উদাহরণ? অপারেটর, ভ্যারিয়েবল, স্টেটমেন্ট, ফাংশন ইত্যাদি শব্দ সি তে যেমন ঠিক তেমনই সি++ কিংবা অন্য যে কোন প্রোগ্রামিং ভাষাতে। আমার পাঠসূচীতে যখনই সি++ যোগ হয়েছিল তখনই নেটে এবিষয়ে অনেক ঘাঁটাঘাঁটি এবং অনেক বইয়েই সি আর সি++ এর সামঞ্জস্য এবং অসামঞ্জস্য নিয়ে পড়াশোনার সুযোগ হয় (সুযোগ পেলেই পড়াশোনা করি কিনা!)। 😀 এই লেখাতে আমি আমার পাওয়া এবং অর্জিত অতিক্ষুদ্র ধারণাগুলো লিখব। নতুন সি++ শিখতে গেলেই জানতে চাইবেন যে কেউ, আর এক্ষেত্রে আপনার ন্যূনতম কিছু প্রশ্নের উত্তর (আশা করছি) এখানে খুঁজে পাবেন।

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

  • মেশিন কোড/ভাষা
  • অ্যাসেম্বলি ভাষা
  • প্রসিডিউরাল ওরিয়েন্টেড
  • অবজেক্ট ওরিয়েন্টেড

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

প্রসিডিউরাল ওরিয়েন্টেড: আপনি যদি সি শিখেন তবে কয়েক লক্ষ বার শুনতে হবে যে সি একটি স্ট্রাকচারড প্রোগ্রামিং ভাষা, এমনকি আপনার কোর্সের নামই হতে পারে “Structured Programming Language”. প্রসিডিউরাল ওরিয়েন্টেড ও ঠিক একই অর্থ বহন করে। সি কে স্ট্রাকচারড বললে যেমন সঠিক, ঠিক প্রসিডিউরাল বললেও ঠিক। কোর্সের শুরুতেই জানবেন যে, সি প্রত্যেকটা কাজকে ছোট ছোট মডিউলে অর্থাৎ সহজ কথায় ছোট ছোট কাজে ভাগ করেই সম্পাদন করে।

উদাহরণস্বরূপ ধরুন, সি তে আমি একটা কাজ করতে দিলাম প্রোগ্রামকে- “একটা ফাইল খুলে সেখান থেকে একটা সংখ্যা নিয়ে তাকে চার দিয়ে ভাগ করে ফলাফল আমাকে দেখাও এক্ষুণি…”
ওর কাজের প্রক্রিয়াটা হবে নিচের মত।

  • ফাইলটা খুলবে।
  • একটা সংখ্যা নিবে।
  • চার দিয়ে ভাগ করবে।
  • ফলাফল দেখাবে।

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

সংজ্ঞা বলতে চাইলে বলা যায়, একটি কম্পিউটার প্রোগ্রামিং যেটি কিছু নির্দেশ তালিকা হতে ধাপে ধাপে নির্দেশ অনুযায়ী কাজ সম্পাদন করে ।

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

সুবিধাসমূহ:

  • এজাতীয় ভাষাগুলো খুবই সহজ এবং কম্পাইলার এবং ইন্টারপ্রেটারে খুব সহজেই ইমপ্লিমেন্ট করা যায়।
  • কিছু কোডের বিভিন্ন অংশ পুনঃব্যবহার করা যায় (সবসময় নয়)।
  • সহজে প্রোগ্রামের গতিবিধি লক্ষ্য করা যায়।
  • মোটামুটি কম স্থান দখল করে অর্থাৎ সাইজের দিক থেকে সুবিধা পাওয়া যায় কিছুটা।
  • গঠনগত ভাবে মোটামুটি শক্তিশালী হয়।

অসুবিধাসমূহ:

  • প্রথম ও প্রধান সমস্যা হল, ডাটার উন্মুক্ততা। প্রসিডিউরাল প্রোগ্রামিংয়ে ডাটা গুলো পুরো প্রোগ্রামের কাছে উন্মুক্ত থাকে ফলে, যে কেউ চাইলেই এটি ব্যবহার করে ফেলতে পারে। তাই ডাটা গুলো ততটা নিরাপদ না।
  • বাস্তব পৃথিবীর অর্থাৎ ‘Real World’ বিষয়গুলোর সাথে মেলানো কঠিন।
  • নতুন স্বতন্ত্র ডাটা টাইপ তৈরি করা কঠিন, এবং এটি প্রোগ্রামিংয়ের গ্রহনযোগ্যতা কমিয়ে দেয় এবং ডাটা ব্যবস্থাপনাও ঠিকমত করতে দেয় না।
  • এজাতীয় প্রোগ্রামিংয়ে তথ্য বা ডাটার উপর যতটা না গুরুত্ব দেওয়া হয়েছে তার চেয়ে অনেক অনেক বেশি গুরুত্ব দেওয়া হয়েছে ঐ তথ্যের অপারেশনের উপর। অর্থাৎ, আমার কাছে হাজার খানেক টাকা আছে। আমি টাকাটার চাইতে টাকাটা কিভাবে খরচ করব সেটার উপর গুরুত্ব দিলে ব্যাপারটা কেমন দাঁড়ায়?
  • কোন ভেরিয়েবল কোন জায়গায় কোন ভ্যালু নিয়ে কাজ করছে তা বের করাও কঠিন প্রসিডিউরালে। বিশাল বিশাল কোডে আপনার দরকার হলে আপনাকে প্রচুর সময় ব্যয় করতে হবে, যা মোটামুটি গ্রহণযোগ্য নয়।

এই ছিল প্রসিডিউরাল অরিয়ন্টেড প্রোগ্রামিং এর মূল ভাবনাগুলো, আমি বার বার লিখেছি যে আপনার যদি সি জানা থাকে উপরের সবগুলো বিষয়ই আপনার আয়ত্বে আছে।

 

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

মুসলিম সুমন

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

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

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