- লেখক Alex Aldridge [email protected].
- Public 2023-12-17 13:33.
- সর্বশেষ পরিবর্তিত 2025-01-23 11:01.
ভার্চুয়াল বনাম বিমূর্ত
ভার্চুয়াল এবং অ্যাবস্ট্রাক্ট হল দুটি কীওয়ার্ড যা বেশিরভাগ অবজেক্ট ওরিয়েন্টেড (OO) প্রোগ্রামিং ল্যাঙ্গুয়েজ যেমন Java এবং C এ ব্যবহৃত হয়। যদিও বিভিন্ন ভাষায় এর অর্থের মধ্যে সামান্য পার্থক্য রয়েছে, ভার্চুয়াল এবং বিমূর্ত উভয় কীওয়ার্ডই এটি সংযুক্ত সত্তাগুলির আংশিক বাস্তবায়নের অনুভূতি প্রদান করে৷
বিমূর্ত
সাধারণত, অ্যাবস্ট্রাক্ট ক্লাস, যা অ্যাবস্ট্রাক্ট বেস ক্লাস (ABC) নামেও পরিচিত, তা ইনস্ট্যান্ট করা যাবে না (সেই ক্লাসের একটি উদাহরণ তৈরি করা যাবে না)। সুতরাং, বিমূর্ত ক্লাসগুলি শুধুমাত্র তখনই অর্থবহ যদি প্রোগ্রামিং ভাষা উত্তরাধিকারকে সমর্থন করে (একটি ক্লাস প্রসারিত থেকে সাবক্লাস তৈরি করার ক্ষমতা)।বিমূর্ত শ্রেণী সাধারণত একটি বিমূর্ত ধারণা বা সত্তাকে আংশিক বা কোন বাস্তবায়ন ছাড়াই উপস্থাপন করে। তাই, অ্যাবস্ট্রাক্ট ক্লাসগুলি অভিভাবক শ্রেণী হিসাবে কাজ করে যেখান থেকে শিশু শ্রেণীগুলি উদ্ভূত হয়, যাতে শিশু শ্রেণী অভিভাবক শ্রেণীর অসম্পূর্ণ বৈশিষ্ট্যগুলি ভাগ করবে এবং সেগুলি সম্পূর্ণ করার জন্য কার্যকারিতা যুক্ত করা যেতে পারে। বিমূর্ত ক্লাসে বিমূর্ত পদ্ধতি থাকতে পারে। একটি বিমূর্ত শ্রেণীর প্রসারিত সাবক্লাসগুলি এই (উত্তরাধিকারসূত্রে প্রাপ্ত) বিমূর্ত পদ্ধতিগুলি প্রয়োগ করতে পারে। শিশু শ্রেণী যদি এই ধরনের সমস্ত বিমূর্ত পদ্ধতি প্রয়োগ করে তবে এটি একটি কংক্রিট ক্লাস। কিন্তু তা না হলে চাইল্ড ক্লাসও হয়ে যায় অ্যাবস্ট্রাক্ট ক্লাস। এর অর্থ হল, প্রোগ্রামার যখন একটি ক্লাসকে অ্যাবস্ট্রাক্ট হিসাবে মনোনীত করেন, তখন তিনি বলছেন যে ক্লাসটি অসম্পূর্ণ হবে এবং এতে এমন উপাদান থাকবে যা উত্তরাধিকারসূত্রে পাওয়া সাবক্লাসগুলি দ্বারা সম্পূর্ণ করা দরকার। এটি দুটি প্রোগ্রামারের মধ্যে একটি চুক্তি তৈরি করার একটি চমৎকার উপায়, যা সফ্টওয়্যার বিকাশের কাজগুলিকে সহজ করে তোলে। প্রোগ্রামার, যিনি উত্তরাধিকারী হওয়ার জন্য কোড লেখেন, তাকে অবশ্যই পদ্ধতির সংজ্ঞাগুলি অনুসরণ করতে হবে (তবে অবশ্যই তার নিজস্ব বাস্তবায়ন থাকতে পারে)।জাভা এবং সি এ, অ্যাবস্ট্রাক্ট কীওয়ার্ড ব্যবহার করে অ্যাবস্ট্রাক্ট ক্লাস এবং পদ্ধতি ঘোষণা করা হয়।
ভার্চুয়াল
ভার্চুয়াল পদ্ধতি/ফাংশনগুলি একটি উত্তরাধিকারী শ্রেণি (একই স্বাক্ষর সহ একটি ফাংশন ব্যবহার করে) দ্বারা ঐচ্ছিকভাবে এর আচরণকে ওভাররাইড করার ক্ষমতা প্রদান করে। ভার্চুয়াল ফাংশনের ধারণাটি নিম্নলিখিত পরিস্থিতিতে গুরুত্বপূর্ণ। ধরুন একটি ক্লাস একটি চাইল্ড ক্লাস দ্বারা উদ্ভূত হয়েছে, তারপর যখনই প্রাপ্ত শ্রেণীর একটি অবজেক্ট ব্যবহার করা হয়, এটি বেস ক্লাস বা প্রাপ্ত শ্রেণীর একটি বস্তুকে নির্দেশ করতে পারে। কিন্তু, মেথড কল আচরণ অস্পষ্ট হতে পারে যদি বেস ক্লাস মেথড ওভাররাইড করা হয়। সুতরাং, এই অস্পষ্টতা সমাধান করার জন্য, ভার্চুয়াল কীওয়ার্ড ব্যবহার করা হয়। যদি পদ্ধতিটিকে ভার্চুয়াল হিসাবে চিহ্নিত করা হয়, তবে প্রাপ্ত ক্লাসের ফাংশনটিকে বলা হয় (যদি থাকে) বা অন্যথায় বেস ক্লাসের ফাংশন বলা হয়। উদাহরণস্বরূপ, C++ এ, ভার্চুয়াল কীওয়ার্ড ঠিক এই উদ্দেশ্যে ব্যবহার করা হয়। C এ, ভার্চুয়াল কীওয়ার্ডটি একইভাবে ব্যবহার করা হয়, তবে উপরন্তু, ওভাররাইড করা সমস্ত পদ্ধতি পরিবর্তন করতে কীওয়ার্ড ওভাররাইড ব্যবহার করা উচিত।কিন্তু জাভাতে, কোন স্পষ্ট ভার্চুয়াল কীওয়ার্ড নেই। সমস্ত নন-স্ট্যাটিক পদ্ধতি ভার্চুয়াল হিসাবে বিবেচিত হয়। কোন বডি ছাড়া ভার্চুয়াল ফাংশনকে পিওর ভার্চুয়াল ফাংশন বলা হয়। জাভা এবং সি-এ, বিমূর্ত পদ্ধতিগুলি আসলে বিশুদ্ধ ভার্চুয়াল৷
ভার্চুয়াল এবং বিমূর্তের মধ্যে পার্থক্য
যদিও অ্যাবস্ট্রাক্ট এবং ভার্চুয়াল দুটি কীওয়ার্ড/ধারণা যা এর সংশ্লিষ্ট সত্ত্বাকে অসম্পূর্ণ বাস্তবায়নের একটি অর্থ প্রদান করে, তাদের মধ্যে পার্থক্য রয়েছে। বিমূর্ত পদ্ধতির (যা অবশ্যই বিমূর্ত ক্লাসের মধ্যে সংজ্ঞায়িত করা উচিত) এর কোনো বাস্তবায়ন নেই, যখন ভার্চুয়াল পদ্ধতিতে একটি বাস্তবায়ন থাকতে পারে। যদি বিমূর্ত পদ্ধতিগুলি একটি কংক্রিট শ্রেণী দ্বারা প্রসারিত হয়, তবে উত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত বিমূর্ত পদ্ধতি অবশ্যই প্রয়োগ করতে হবে, যখন উত্তরাধিকারসূত্রে প্রাপ্ত ভার্চুয়াল পদ্ধতিগুলি ওভাররাইড করা হতে পারে বা নাও হতে পারে৷