পাইথনে বিমূর্ত ক্লাসসমূহ
এই নিবন্ধটি পাইথনে বিমূর্ত ক্লাসসমূহ ব্যাখ্যা করে।
আমরা abc মডিউল ব্যবহার করে বিমূর্ত ক্লাসগুলির মৌলিক প্রক্রিয়া ব্যাখ্যা করব, বাস্তব উদাহরণ দেব এবং কোডসহ সমস্ত কিছু বর্ণনা করব।
YouTube Video
পাইথনে বিমূর্ত ক্লাসসমূহ
পাইথনের abc মডিউল (বিমূর্ত বেস ক্লাসসমূহ) স্ট্যান্ডার্ড লাইব্রেরির অংশ এবং এটি বিমূর্ত ক্লাস সংজ্ঞায়ন করতে ব্যবহৃত হয়, যা একটি ক্লাসের জন্য প্রয়োগযোগ্য পদ্ধতির টেমপ্লেট প্রদান করে। এই মডিউলটি ব্যবহারে ক্লাস ডিজাইনে নমনীয়তা এবং দৃঢ়তা বৃদ্ধি হয়।
বিমূর্ত ক্লাস কী?
বিমূর্ত ক্লাস হল ক্লাস যা কংক্রিট (উদাহরণস্বরূপ) ক্লাসগুলির জন্য একটি সাধারণ ইন্টারফেস সংজ্ঞায়িত করতে ব্যবহৃত হয়। বিমূর্ত ক্লাস নিজে উদাহরণস্বরূপ হতে পারে না; প্রাপ্ত (উপ) ক্লাসে একটি কংক্রিট বাস্তবায়ন প্রদান করতে হবে।
abc মডিউল আপনাকে বিমূর্ত পদ্ধতি বা বৈশিষ্ট্য সংজ্ঞায়িত করতে এবং উত্তরাধিকারী ক্লাসগুলিতে সেগুলোর বাস্তবায়ন নিশ্চিত করতে দেয়। যদি একটি মাত্র বিমূর্ত পদ্ধতিও বাস্তবায়িত না হয়, তাহলে ক্লাসটি উদাহরণস্বরূপ হতে পারবে না।
abc মডিউল কীভাবে ব্যবহার করবেন
abc মডিউল ব্যবহার করে একটি বিমূর্ত ক্লাস তৈরি করতে ABC ক্লাস থেকে উত্তরাধিকারী হন এবং @abstractmethod ডেকোরেটর ব্যবহার করে বিমূর্ত পদ্ধতি সংজ্ঞায়িত করুন।
1from abc import ABC, abstractmethod
2
3# Definition of the abstract base class
4class Animal(ABC):
5
6 @abstractmethod
7 def sound(self):
8 pass
9
10# Concrete implementation in the subclass
11class Dog(Animal):
12 def sound(self):
13 return "Woof!"
14
15class Cat(Animal):
16 def sound(self):
17 return "Meow!"এখানে, Animal ক্লাসটি একটি বিমূর্ত ক্লাস হিসাবে সংজ্ঞায়িত করা হয়েছে এবং এতে sound নামের একটি বিমূর্ত পদ্ধতি অন্তর্ভুক্ত রয়েছে। এই পদ্ধতিটি উপক্লাসগুলিতে কংক্রিটভাবে বাস্তবায়ন করতে হবে। Dog এবং Cat হলো Animal এর উত্তরাধিকারী এবং প্রত্যেকেই sound পদ্ধতিটি বাস্তবায়ন করে।
বিমূর্ত ক্লাস উদাহরণস্বরূপ ব্যবহার করা
বিমূর্ত ক্লাস সরাসরি উদাহরণস্বরূপ হতে পারে না। উদাহরণস্বরূপ, Animal ক্লাসটি নিজে উদাহরণস্বরূপ করার চেষ্টা করলে একটি ত্রুটি দেখা দেবে।
1animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods sound- বিমূর্ত ক্লাস উদাহরণস্বরূপ করতে চেষ্টা করার সময়, পাইথন নির্ধারণ করে যে, অবাস্তবায়িত বিমূর্ত পদ্ধতি রয়েছে এবং একটি
TypeErrorপ্রদান করে। যদি উপক্লাসে প্রয়োজনীয় সমস্ত বিমূর্ত পদ্ধতি বাস্তবায়িত হয়, উদাহরণস্বরূপ ব্যবহার সম্ভব হয়।
একাধিক বিমূর্ত পদ্ধতি
একটি ক্লাসে একাধিক বিমূর্ত পদ্ধতি থাকা সম্ভব। যদি উপক্লাসে সমস্ত বিমূর্ত পদ্ধতি বাস্তবায়িত না হয়, তবে ক্লাসটি বিমূর্ত ক্লাস হিসাবেই থাকে।
1from abc import ABC, abstractmethod
2
3class Vehicle(ABC):
4
5 @abstractmethod
6 def start_engine(self):
7 pass
8
9 @abstractmethod
10 def stop_engine(self):
11 pass
12
13class Car(Vehicle):
14 def start_engine(self):
15 return "Car engine started"
16
17 def stop_engine(self):
18 return "Car engine stopped"এই উদাহরণে, Vehicle ক্লাসের দুটি বিমূর্ত পদ্ধতি রয়েছে, এবং Car ক্লাসটি কেবলমাত্র এই দুটি পদ্ধতি বাস্তবায়নের পরে উদ্ভূত হতে পারে।
বিমূর্ত বৈশিষ্ট্য সংজ্ঞায়িত করা
abc মডিউলটি শুধুমাত্র বিমূর্ত পদ্ধতিগুলোকেই নয়, বরং বিমূর্ত বৈশিষ্ট্যগুলোকেও সমর্থন করে। এটি ডেরাইভড ক্লাসে বৈশিষ্ট্যের বাস্তবায়ন আরোপ করতে সক্ষম করে।
1from abc import ABC, abstractmethod
2
3class Shape(ABC):
4
5 @property
6 @abstractmethod
7 def area(self):
8 pass
9
10class Circle(Shape):
11 def __init__(self, radius):
12 self.radius = radius
13
14 @property
15 def area(self):
16 return 3.14159 * (self.radius ** 2)- এই উদাহরণে,
Shapeক্লাসের একটি বিমূর্ত বৈশিষ্ট্যareaরয়েছে, এবং উপশ্রেণিCircleএই বৈশিষ্ট্যটির বাস্তবায়ন করে। এইভাবে, বৈশিষ্ট্য বাস্তবায়ন প্রয়োগ করতে বিমূর্ত ক্লাস ব্যবহার করা কোডের সামঞ্জস্য বজায় রাখতে সাহায্য করে।
isinstance() এবং issubclass() ব্যবহার করা
বিমূর্ত ক্লাস ব্যবহার করে আপনি isinstance() বা issubclass() দিয়ে ক্লাস উত্তরাধিকার সম্পর্ক নিশ্চিত করতে পারেন, যা কোডের সুরক্ষা ও নমনীয়তা বাড়ায়।
1from abc import ABC, abstractmethod
2
3# Definition of the abstract base class
4class Animal(ABC):
5
6 @abstractmethod
7 def sound(self):
8 pass
9
10# Concrete implementation in the subclass
11class Dog(Animal):
12 def sound(self):
13 return "Woof!"
14
15class Cat(Animal):
16 def sound(self):
17 return "Meow!"
18
19class Vehicle(ABC):
20
21 @abstractmethod
22 def start_engine(self):
23 pass
24
25 @abstractmethod
26 def stop_engine(self):
27 pass
28
29class Car(Vehicle):
30 def start_engine(self):
31 return "Car engine started"
32
33 def stop_engine(self):
34 return "Car engine stopped"
35
36print("Dog() is an Animal? -> ", isinstance(Dog(), Animal)) # True
37print("Dog is subclass of Animal? -> ", issubclass(Dog, Animal)) # True
38print("Cat() is a Vehicle? -> ", isinstance(Cat(), Vehicle)) # Falseisinstance() ব্যবহার করা হয় কোনও বস্তু নির্দিষ্ট একটি শ্রেণির উদাহরণ কিনা তা পরীক্ষা করার জন্য, এবং issubclass() ব্যবহার করা হয় কোনও শ্রেণি নির্দিষ্ট একটি শ্রেণির উপশ্রেণি কিনা তা পরীক্ষা করার জন্য।
সারসংক্ষেপ
abc মডিউল ব্যবহার করে বিমূর্ত ক্লাস ডিজাইন করার মাধ্যমে, আপনি শ্রেণিগুলির মধ্যে ইন্টারফেস পরিষ্কার করতে এবং প্রয়োজনীয় পদ্ধতি ও বৈশিষ্ট্যের বাস্তবায়ন আরোপ করতে পারেন। এটি কোডের সামঞ্জস্য বজায় রাখতে এবং ত্রুটি কমাতে সাহায্য করে, যা বিশেষত বড় প্রকল্পগুলির জন্য কার্যকরী হয়।
পাইথনে বিমূর্ত ক্লাসগুলি একটি গুরুত্বপূর্ণ সরঞ্জাম যা নমনীয় অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং সমর্থন করে, শ্রেণির পুনঃব্যবহারযোগ্যতা ও রক্ষণাবেক্ষণযোগ্যতা বাড়ায়।
আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।