Inheritance (উত্তরাধিকার) এবং Polymorphism (বহুরূপতা) হল Object-Oriented Programming (OOP) এর দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা কোডের পুনঃব্যবহারযোগ্যতা, স্থায়িত্ব এবং প্রবণতা উন্নত করতে সাহায্য করে। LISP-এর মত ভাষায় এই ধারণাগুলির কাজ ভিন্নভাবে হতে পারে, তবে এই ধারণাগুলির মূল উদ্দেশ্য একই: একটি কাঠামোগত উপায়ে কোডকে সংগঠিত করা এবং উন্নয়ন প্রক্রিয়াকে সহজ করা।
১. Inheritance (উত্তরাধিকার)
Inheritance হল একটি ধারণা যেখানে একটি ক্লাস অন্য একটি ক্লাসের বৈশিষ্ট্য এবং আচরণ (attributes and behaviors) উত্তরাধিকারসূত্রে পেয়ে থাকে। এটি আপনাকে পূর্বে ডিফাইন করা ক্লাসের ফাংশন এবং প্রপার্টি পুনরায় ব্যবহার করার সুযোগ দেয়, যা কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে এবং কোডের জটিলতা কমায়।
Inheritance এর মূল বৈশিষ্ট্য:
- Superclass এবং Subclass: একটি ক্লাস যে ক্লাস থেকে বৈশিষ্ট্য এবং আচরণ উত্তরাধিকারসূত্রে পায় তাকে superclass বা parent class বলা হয়, এবং যে ক্লাসটি ঐ বৈশিষ্ট্যগুলি গ্রহণ করে তাকে subclass বা child class বলা হয়।
- Code Reusability: Inheritance কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে। আপনি যদি একটি ক্লাসের আচরণ (behavior) পুনরায় ব্যবহার করতে চান, তবে সেই ক্লাস থেকে উত্তরাধিকারসূত্রে বৈশিষ্ট্য গ্রহণ করে নতুন ক্লাস তৈরি করতে পারেন।
- Extensibility: Inheritance ব্যবহার করে একটি নতুন ক্লাসের মধ্যে পুরনো ক্লাসের আচরণ এবং বৈশিষ্ট্যগুলো বর্ধিত করা যেতে পারে।
Inheritance এর উদাহরণ:
ধরা যাক, একটি Animal (প্রাণী) ক্লাস রয়েছে, যা সকল প্রাণীর সাধারণ বৈশিষ্ট্য এবং আচরণ ধারণ করে। এর পরে, আমরা একটি Dog (কুকুর) ক্লাস তৈরি করব, যা Animal ক্লাস থেকে উত্তরাধিকারসূত্রে বৈশিষ্ট্য পাবে।
(defclass animal ()
((name :initarg :name :accessor name)
(age :initarg :age :accessor age)))
(defclass dog (animal) ; dog ক্লাস animal থেকে উত্তরাধিকার গ্রহণ করবে
((breed :initarg :breed :accessor breed)))
(defmethod speak ((d dog))
(format t "~A says Woof!" (name d)))
(setq my-dog (make-instance 'dog :name "Buddy" :age 3 :breed "Golden Retriever"))
(speak my-dog) ; আউটপুট: Buddy says Woof!এখানে:
dogক্লাসটিanimalক্লাস থেকে উত্তরাধিকার নিয়েছে এবং তার কিছু বৈশিষ্ট্য (যেমনname,age) পেয়ে গেছে।speakমেথডdogক্লাসের জন্য ডিফাইন করা হয়েছে এবং এটি কুকুরের শব্দ (Woof) প্রিন্ট করবে।
২. Polymorphism (বহুরূপতা)
Polymorphism হল একটি ধারণা যেখানে একটি সাধারণ ইন্টারফেস বা ফাংশন বিভিন্ন ধরনের অবজেক্টের জন্য কাজ করতে পারে। এর মাধ্যমে একাধিক ধরনের অবজেক্টের মধ্যে একটি সাধারণ আচরণ বজায় রাখা হয়। Polymorphism মূলত দুইভাবে কাজ করে:
- Method Overriding: যখন একটি সাবক্লাস তার সুপারক্লাসের একটি মেথডকে পুনঃডিফাইন (override) করে।
- Method Overloading: যখন একই নামের মেথড বিভিন্ন প্যারামিটার নিয়ে কাজ করে (যদিও LISP তে এই বৈশিষ্ট্যটি সরাসরি উপলব্ধ নয়, তবে OOP ভাষাগুলিতে এটি ব্যবহৃত হয়)।
Polymorphism এর মূল বৈশিষ্ট্য:
- Single Interface, Multiple Implementations: একটি ফাংশন বা মেথড একাধিক অবজেক্টের জন্য একই ইন্টারফেস ব্যবহার করে, তবে এটি প্রতিটি অবজেক্টের জন্য ভিন্নভাবে আচরণ করতে পারে।
- Method Overriding: সাবক্লাস তার মেথডে নতুন আচরণ সংযোজন বা পূর্বের আচরণ পরিবর্তন করতে পারে।
- Flexibility: Polymorphism ব্যবহার করলে আপনার কোড আরো নমনীয় ও মানানসই হয়ে ওঠে, কারণ এটি বিভিন্ন ধরনের অবজেক্টের জন্য এক ধরনের ইন্টারফেস এবং আচরণ ব্যবহার করতে দেয়।
Polymorphism এর উদাহরণ:
ধরা যাক, Animal ক্লাসে একটি speak মেথড রয়েছে, যা Dog এবং Cat ক্লাসে ভিন্নভাবে আচরণ করবে।
(defclass animal ()
((name :initarg :name :accessor name)))
(defclass dog (animal)
())
(defclass cat (animal)
())
(defmethod speak ((a dog))
(format t "~A says Woof!" (name a)))
(defmethod speak ((a cat))
(format t "~A says Meow!" (name a)))
(setq my-dog (make-instance 'dog :name "Buddy"))
(setq my-cat (make-instance 'cat :name "Whiskers"))
(speak my-dog) ; আউটপুট: Buddy says Woof!
(speak my-cat) ; আউটপুট: Whiskers says Meow!এখানে:
DogএবংCatক্লাস দুটিAnimalক্লাস থেকে উত্তরাধিকার পেয়েছে এবং প্রতিটি ক্লাসের জন্যspeakমেথড ভিন্নভাবে আচরণ করছে।speakমেথডটিDogএবংCatক্লাসের জন্য ভিন্ন আউটপুট দেয়, যা polymorphism এর উদাহরণ।
Inheritance এবং Polymorphism এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Inheritance | Polymorphism |
|---|---|---|
| মৌলিক ধারণা | একটি ক্লাস অন্য ক্লাসের বৈশিষ্ট্য এবং আচরণ পায়। | একই মেথড বা ফাংশন একাধিক উপায়ে কাজ করে, বিভিন্ন ক্লাসের জন্য। |
| কোড পুনঃব্যবহার | কোড পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে। | একাধিক ক্লাসের মধ্যে সাধারণ ফাংশন বা মেথড ব্যবহার করা যায়। |
| অভিযোগ/ব্যবহার | নতুন ক্লাস তৈরি করতে বা আগের ক্লাসের বৈশিষ্ট্য পুনরায় ব্যবহার করতে। | একাধিক ফাংশন বা মেথডের জন্য একই নাম ব্যবহার করে বিভিন্ন আচরণ তৈরি। |
| ফাংশনালিটি | একাধিক ক্লাসের মধ্যে আচরণ ভাগাভাগি করে। | একাধিক ক্লাসের জন্য একটি সাধারণ ইন্টারফেস ব্যবহার করে ভিন্ন আচরণ। |
সারসংক্ষেপ:
- Inheritance ক্লাসের মধ্যে বৈশিষ্ট্য এবং আচরণ ভাগাভাগি করার প্রক্রিয়া। এটি কোড পুনঃব্যবহার এবং প্রসারণের জন্য অত্যন্ত উপকারী।
- Polymorphism একই ইন্টারফেস বা ফাংশনের মাধ্যমে বিভিন্ন ক্লাসের অবজেক্টের জন্য ভিন্ন আচরণ প্রদান করে, যার ফলে কোড আরও নমনীয় এবং সুবিধাজনক হয়।
এই দুটি ধারণা OOP তে গুরুত্বপূর্ণ ভূমিকা পালন করে, এবং কোডকে আরও প্রাঞ্জল, পরিষ্কার এবং সহজে পরিচালনাযোগ্য করে তোলে।
Read more