উত্তরাধিকার এবং পলিমারফিজমের মধ্যে পার্থক্য
কন্টেন্ট
উত্তরাধিকার অনুমতি দেয়, কোড পুনরায় ব্যবহারযোগ্যতা এবং বহুমুখীতা হ'ল, বিভিন্ন ফর্মের সাথে একটি ফাংশনের ঘটনা। উত্তরাধিকার এবং পলিমারফিজমের মধ্যে মূল পার্থক্য হ'ল উত্তরাধিকার ইতিমধ্যে বিদ্যমান কোডটিকে আবার কোনও প্রোগ্রামে পুনরায় ব্যবহার করতে দেয় এবং পলিমারফিজম কোনও ক্রিয়াকলাপটি কীভাবে ডাকা উচিত তা গতিশীলভাবে সিদ্ধান্ত নিতে একটি ব্যবস্থা সরবরাহ করে।
- তুলনা রেখাচিত্র
- সংজ্ঞা
- মূল পার্থক্য
- উপসংহার
তুলনা রেখাচিত্র
তুলনা করার জন্য বেস | উত্তরাধিকার | পলিমরফিজ্ম |
---|---|---|
মৌলিক | উত্তরাধিকার ইতিমধ্যে বিদ্যমান শ্রেণীর বৈশিষ্ট্যগুলি ব্যবহার করে একটি নতুন শ্রেণি তৈরি করছে। | পলিমারফিজম মূলত একাধিক ফর্মের জন্য একটি সাধারণ ইন্টারফেস। |
বাস্তবায়ন | উত্তরাধিকার মূলত ক্লাসগুলিতে প্রয়োগ করা হয়। | পলিমারফিজম মূলত ফাংশন / পদ্ধতিতে প্রয়োগ করা হয়। |
ব্যবহার | ওওপিতে পুনঃব্যবহারযোগ্যতার ধারণাকে সমর্থন করার জন্য এবং কোডের দৈর্ঘ্য হ্রাস করে। | সংকলনের সময় (ওভারলোডিং) পাশাপাশি রান টাইম (ওভাররাইডিং) এ কখন ফাংশনের কোন ফর্মটি আহ্বান করা উচিত তা অবজেক্টকে অনুমতি দেয়। |
ফরম | উত্তরাধিকার একক উত্তরাধিকার, একাধিক উত্তরাধিকার, বহুস্তরের উত্তরাধিকার, শ্রেণিবিন্যাসের উত্তরাধিকার এবং সংকর উত্তরাধিকার হতে পারে। | পলিমারফিজম একটি সংকলন সময় পলিমারফিজম (ওভারলোডিং) বা রান-টাইম পলিমারফিজম (ওভাররাইডিং) হতে পারে। |
উদাহরণ | টেবিলটি আসবাব হিসাবে শ্রেণি সারণি শ্রেণি আসবাবের বৈশিষ্ট্যটির উত্তরাধিকারী হতে পারে। | ক্লাস স্টাডি_ট্যাবেলে ফাংশন সেট_ রঙ () থাকতে পারে এবং একটি ক্লাস ডাইনিং টেবিলের ফাংশন সেট_ক্লোর () থাকতে পারে, সুতরাং সেট_লংকার () ফাংশনের কোন রূপটি উভয় ক্ষেত্রেই সিদ্ধান্ত নেওয়া যেতে পারে, সময় এবং রান সময় সংকলন করতে পারে। |
উত্তরাধিকার সংজ্ঞা:
উত্তরাধিকার OOP এর অন্যতম গুরুত্বপূর্ণ বৈশিষ্ট্য, যা দৃus়ভাবে "পুনরায় ব্যবহারযোগ্যতা" সমর্থন করে। পুনরায় ব্যবহারযোগ্যতা বিদ্যমান শ্রেণীর বৈশিষ্ট্য পুনরায় ব্যবহার করে একটি নতুন শ্রেণি তৈরি হিসাবে বর্ণনা করা যেতে পারে। উত্তরাধিকার সূত্রে, একটি বেস শ্রেণি রয়েছে, যা উত্তরাধিকার সূত্রে প্রাপ্ত বর্গ দ্বারা প্রাপ্ত হয়। যখন কোনও শ্রেণি অন্য যে কোন শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত হয়, বেস শ্রেণীর সদস্য (গুলি) একটি উত্তোলিত শ্রেণীর সদস্য (গুলি) হয়।
শ্রেণীর উত্তরাধিকার সূত্রে সাধারণ রূপটি নিম্নরূপ:
শ্রেণীর উত্স-শ্রেণি-নাম: অ্যাক্সেস-স্পেসিফায়ার বেস-ক্লাস-নাম {// শ্রেণীর অঙ্গ};
এখানে, অ্যাক্সেস স্পেসিফায়ারটি বেস শ্রেণীর সদস্য (গুলি) থেকে প্রাপ্ত শ্রেণীর কাছে অ্যাক্সেসের মোড (ব্যক্তিগত, পাবলিক, সুরক্ষিত) সরবরাহ করে। যদি কোনও অ্যাক্সেস নির্দিষ্টকারী উপস্থিত না থাকে, ডিফল্টরূপে, এটি "ব্যক্তিগত" হিসাবে বিবেচনা করা হয়। সি ++ এ, যদি উত্পন্ন শ্রেণিটি "স্ট্রাক্ট" হয় তবে অ্যাক্সেস সুনির্দিষ্টটি ডিফল্টরূপে "সর্বজনীন"।
সি ++ এ, উত্তরাধিকার পাঁচটি আকারে অর্জন করা যেতে পারে। এগুলি হিসাবে শ্রেণিবদ্ধ করা যেতে পারে:
- একক উত্তরাধিকার (শুধুমাত্র একটি সুপার ক্লাস)
- একাধিক উত্তরাধিকার (বেশ কয়েকটি সুপারক্লাস)
- শ্রেণিবদ্ধ উত্তরাধিকার (একটি সুপার ক্লাস, অনেকগুলি সাবক্লাস)
- একাধিক উত্তরাধিকার (উত্পন্ন শ্রেণি থেকে প্রাপ্ত)
জাভাতে, ক্লাসটি "বর্ধিত" শব্দটি ব্যবহার করে অন্য শ্রেণীর উত্তরাধিকারী হয়। জাভাতে, বেস ক্লাসকে একটি সুপার ক্লাস হিসাবে উল্লেখ করা হয়, এবং উত্পন্ন ক্লাসটি সাবক্লাস হিসাবে উল্লেখ করা হয়। একটি সাবক্লাস বেস ক্লাসের সেই সদস্যদের অ্যাক্সেস করতে পারে না, যা "ব্যক্তিগত" হিসাবে ঘোষণা করা হয়। জাভাতে শ্রেণীর উত্তরাধিকারসূত্রে প্রাপ্ত সাধারণ ফর্মটি নিম্নরূপ।
শ্রেণীর উত্স-শ্রেণি-নাম বেস-শ্রেণি-নাম extend // শ্রেণীর বডি extend প্রসারিত করে;
জাভা একাধিক উত্তরাধিকারের উত্তরাধিকারকে সমর্থন করে না, যেখানে এটি বহুস্তরের শ্রেণিবিন্যাসকে সমর্থন করে। জাভাতে, কখনও কখনও একটি সুপার বর্গ তার প্রয়োগের বিশদটি গোপন করতে চায় এবং এটি সেই ডেটার কিছু অংশকে "ব্যক্তিগত" করে তোলে। জাভা হিসাবে, একটি সাবক্লাস সুপারক্লাসের ব্যক্তিগত সদস্যদের অ্যাক্সেস করতে পারে না এবং যদি একটি সাবক্লাস সেই সদস্যদের অ্যাক্সেস বা আরম্ভ করতে চায়, তবে জাভা একটি সমাধান সরবরাহ করে। সাবক্লাসটি "সুপার" কীওয়ার্ড ব্যবহার করে এর তাত্ক্ষণিক সুপারক্লাসের সদস্যদের উল্লেখ করতে পারে। মনে রাখবেন, আপনি কেবলমাত্র তাত্ক্ষণিক সুপারক্লাসের সদস্যদের অ্যাক্সেস করতে পারেন।
‘সুপার’ এর দুটি সাধারণ রূপ রয়েছে। প্রথমটি হ'ল এটি সুপার ক্লাসের কনস্ট্রাক্টরকে কল করতে ব্যবহার করে। দ্বিতীয়টি হ'ল, সাবক্লাসের সদস্য দ্বারা লুকানো সুপারক্লাসের সদস্য অ্যাক্সেস করা।
// কনস্ট্রাক্টরকে কল করার প্রথম রূপ। ক্লাস supper_class {supper_class (আর্গুমেন্ট_লিস্ট) {..} // সুপার ক্লাসের নির্মাতা}; বর্গ sub_class supper_class প্রসারিত করে {sub_class (আর্গুমেন্ট_লিস্ট) {..} // সাব_ক্লাস সুপারের কনস্ট্রাক্টর (আর্গুমেন্ট_লিস্ট); // সাব_ ক্লাস সুপার ক্লাসের কনস্ট্রাক্টরকে কল করেছে} calls;
// সুপার ক্লাসের জন্য সেকেন্ডের সায়ার_ক্লাস {ইন্ট আই; } শ্রেনী সাব_ক্লাস সায়ার_ক্লাস বিস্তৃত হয়েছে i; sub_class (int a, int b) {super.i = a; // i সুপার ক্লাসের i = b; উপমানের // আই i};
পলিমারফিজম সংজ্ঞা
পলিমারফিজম শব্দটির সহজ অর্থ "এক ফাংশন, একাধিক রূপ"। পলিমারফিজম সংকলন সময় এবং রান সময় উভয় সময়ে অর্জিত হয়। কম্পাইল টাইম পলিমারফিজমটি "ওভারলোডিং" এর মাধ্যমে অর্জন করা হয়, যদিও রান টাইম পলিমারফিজম "ওভাররাইডিং" এর মাধ্যমে অর্জন করা হয়।
পলিমারফিজম বস্তুকে "ফাংশনের কোন ফর্মটি কখন ডাকা উচিত তা" সিদ্ধান্ত নিতে দেয় এবং উভয় সময়েই সময় এবং রান সময় সংকলন করে।
আসুন ওভারলোডিংয়ের প্রথম ধারণাটি আলোচনা করা যাক। ওভারলোডিংয়ে, আমরা ক্লাসে একাধিকবার বিভিন্ন, ডেটা টাইপ এবং পরামিতির সংখ্যা সহ একটি ফাংশন সংজ্ঞায়িত করি যেখানে ওভারলোড হওয়া ফাংশনটির একই রিটার্ন টাইপ থাকতে হবে। বেশিরভাগ সময় ওভারলোড হওয়া থেকে ফাংশন ক্লাসের নির্মাণকারী।
বর্গ ওভারলোড {int a, b; সর্বজনীন: int overload (int x) {// প্রথম ওভারলোড () কনস্ট্রাক্টর a = x; ফিরে a; over int ওভারলোড (int x, int y) second // সেকেন্ড ওভারলোড () কনস্ট্রাক্টর a = x; খ = Y; a * b ফিরিয়ে দিন; }}; int main () {ওভারলোড O1; O1.overload (20); // প্রথম ওভারলোড () কনস্ট্রাক্টর কল O1.overload (20,40); // দ্বিতীয় ওভারলোড () কনস্ট্রাক্টর কল}
এখন, পলিমারফিজমের দ্বিতীয় রূপটি, অর্থাৎ ওভাররাইডিং নিয়ে আলোচনা করা যাক। ওভাররাইডের ধারণাটি কেবলমাত্র শ্রেণীর কার্যক্রমে প্রয়োগ করা যেতে পারে যা উত্তরাধিকারের ধারণাটিও বাস্তবায়িত করে। সি ++ এ, ফাংশনটি ওভাররাইড করার আগে বেস ক্লাসে "ভার্চুয়াল" মূলশব্দটি ব্যবহার করা হয়েছিল এবং "ভার্চুয়াল" কীওয়ার্ড বাদে একই প্রোটোটাইপের সাহায্যে উত্পন্ন শ্রেণিতে নতুন সংজ্ঞা দেওয়া হয়েছে।
ক্লাস বেস {পাবলিক: ভার্চুয়াল শূন্য ফান্ট () base // বেস ক্লাস cout এর ভার্চুয়াল ফাংশন << "এটি একটি বেস ক্লাস ফান্ট ()"; }}; ক্লাস ডারাইভড 1: পাবলিক বেইস {পাবলিক: শূন্য ফান্ট () {// বেস ক্লাসের ভার্চুয়াল ফাংশন ডেরাইভড 1 ক্লাস কাউটে নতুন সংজ্ঞায়িত << "এটি একটি ডেরাইভড 1 ক্লাস ফান্ট ()"; }}; int main () {বেস * পি, বি; উত্পন্ন 1 ডি 1; * পি = & বি; p-> funct (); // বেস ক্লাস ফান্ট কল ()। * পি = & D1; প্রত্যাবর্তন 0; }
- উত্তরাধিকার একটি ক্লাস তৈরি করছে যা ইতিমধ্যে বিদ্যমান শ্রেণি থেকে তার বৈশিষ্ট্যটি নিয়ে আসে। অন্যদিকে, পলিমারফিজম এমন একটি ইন্টারফেস যা একাধিক ফর্মে সংজ্ঞায়িত করা যায়।
- ক্লাসগুলিতে উত্তরাধিকার প্রয়োগ করা হয় যেখানে পলিমারফিজমটি পদ্ধতি / ফাংশনে প্রয়োগ করা হয়।
- যেহেতু উত্তরাধিকার একটি বংশোদ্ভূত শ্রেণিকে বেস ক্লাসে সংজ্ঞায়িত উপাদানগুলি এবং পদ্ধতিগুলি ব্যবহার করার অনুমতি দেয় তাই উদ্ভূত শ্রেণীর সেই উপাদানগুলি বা পদ্ধতিটি আবার এটি সংজ্ঞায়িত করার প্রয়োজন হয় না, তাই আমরা বলতে পারি এটি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে এবং তাই কোডের দৈর্ঘ্য হ্রাস করে । অন্যদিকে, পলিমারফিজম কোনও কম্পাইল সময় এবং রান সময় উভয় সময়ে যে পদ্ধতিতে আবেদন করতে চায় তা কোন পদ্ধতিটির সিদ্ধান্ত নেওয়া সম্ভব করে তোলে।
- উত্তরাধিকারকে একক উত্তরাধিকার, একাধিক উত্তরাধিকার, বহুস্তরের উত্তরাধিকার, শ্রেণিবিন্যাসের উত্তরাধিকার এবং সংকর উত্তরাধিকার হিসাবে শ্রেণীবদ্ধ করা যেতে পারে। অন্যদিকে, পলিমারফিজমকে ওভারলোডিং এবং ওভাররাইডিং হিসাবে শ্রেণীবদ্ধ করা হয়।
উপসংহার:
উত্তরাধিকার এবং বহুবিকতা আন্তঃসম্পর্কিত ধারণাগুলি, কারণ গতিশীল বহুবর্ষবাদ শ্রেণীর ক্ষেত্রে প্রযোজ্য যা উত্তরাধিকারের ধারণাটিও প্রয়োগ করে।