ফোরট্রানে Inheritance এবং Polymorphism এর ব্যবহার
ফোরট্রান 90 থেকে শুরু করে আধুনিক ফোরট্রান সংস্করণগুলোতে Object-Oriented Programming (OOP) এর বৈশিষ্ট্য যেমন Inheritance এবং Polymorphism সাপোর্ট করা হয়েছে। এই ধারণাগুলি কেবলমাত্র কোডের পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণ সহজতরই করে না, বরং প্রোগ্রামিংয়ের কাঠামো আরও সহজ এবং কার্যকর করে তোলে। যদিও ফোরট্রান OOP এর পূর্ণাঙ্গ সমর্থন প্রদান না করলেও, এটি কিছু মৌলিক ধারণা যেমন ইনহেরিট্যান্স এবং পলিমরফিজম সাপোর্ট করে।
১. Inheritance (উত্তরণ)
Inheritance হল একটি প্রোগ্রামিং ধারণা যেখানে একটি ক্লাস বা টাইপ অন্য ক্লাস বা টাইপ থেকে বৈশিষ্ট্য ও আচরণ (attributes and behaviors) উত্তরাধিকারসূত্রে গ্রহণ করে। ফোরট্রানে ইনহেরিট্যান্স কাজ করার জন্য সাধারণত type extension ব্যবহৃত হয়, যার মাধ্যমে একটি টাইপ নতুন বৈশিষ্ট্য এবং আচরণ পেতে পারে।
উদাহরণ: Type Extension (Inheritance)
module vehicle
implicit none
type :: vehicle_type
character(len=50) :: brand
real :: speed
contains
procedure :: display => display_vehicle
end type vehicle_type
contains
subroutine display_vehicle(this)
class(vehicle_type), intent(in) :: this
print *, "Brand: ", this%brand
print *, "Speed: ", this%speed
end subroutine display_vehicle
end module vehicle
module car
use vehicle
implicit none
type, extends(vehicle_type) :: car_type
character(len=50) :: model
contains
procedure :: display => display_car
end type car_type
contains
subroutine display_car(this)
class(car_type), intent(in) :: this
call display_vehicle(this%vehicle)
print *, "Model: ", this%model
end subroutine display_car
end module car
program main
use car
type(car_type) :: my_car
my_car%vehicle%brand = "Toyota"
my_car%vehicle%speed = 120.0
my_car%model = "Corolla"
call my_car%display()
end program mainব্যাখ্যা:
- vehicle_type হলো একটি বেস টাইপ যা brand এবং speed এর বৈশিষ্ট্য ধারণ করে।
- car_type হলো একটি extended type যা vehicle_type থেকে ইনহেরিট করে এবং অতিরিক্ত model বৈশিষ্ট্য রাখে।
- car_type এ
display_carসাবরুটিনে,display_vehicleনামক বেস টাইপেরdisplayফাংশনটি কল করা হয়েছে।
আউটপুট:
Brand: Toyota
Speed: 120.0
Model: Corollaব্যাখ্যা:
- Inheritance এর মাধ্যমে car_type টাইপটি vehicle_type থেকে বৈশিষ্ট্য উত্তরাধিকার হিসেবে পেয়েছে, এবং আমরা নতুন বৈশিষ্ট্য (model) যোগ করেছি।
২. Polymorphism (পলিমরফিজম)
Polymorphism হল একটি ধারণা যা একটি ইন্টারফেসের মাধ্যমে বিভিন্ন ধরনের অবজেক্টকে পরিচালনা করার সুযোগ দেয়। ফোরট্রানে polymorphism সাধারণত procedure overloading বা class polymorphism আকারে ব্যবহার করা হয়। ফোরট্রানে ক্লাস পলিমরফিজম করার জন্য, class type-bound procedure ব্যবহার করা হয়।
ফোরট্রানে পলিমরফিজম কেবলমাত্র type-bound procedures (অর্থাৎ methods) এবং procedure pointers এর মাধ্যমে পরিচালিত হয়।
উদাহরণ: Polymorphism using Type-bound Procedures
module animal
implicit none
type :: animal_type
character(len=50) :: name
contains
procedure :: speak
end type animal_type
type, extends(animal_type) :: dog_type
contains
procedure :: speak => dog_speak
end type dog_type
type, extends(animal_type) :: cat_type
contains
procedure :: speak => cat_speak
end type cat_type
contains
subroutine dog_speak(this)
class(dog_type), intent(in) :: this
print *, this%name, " says Woof!"
end subroutine dog_speak
subroutine cat_speak(this)
class(cat_type), intent(in) :: this
print *, this%name, " says Meow!"
end subroutine cat_speak
end module animal
program main
use animal
type(dog_type) :: dog
type(cat_type) :: cat
dog%name = "Rex"
cat%name = "Whiskers"
call dog%speak() ! Outputs: Rex says Woof!
call cat%speak() ! Outputs: Whiskers says Meow!
end program mainব্যাখ্যা:
- এখানে, animal_type হলো বেস টাইপ, এবং dog_type ও cat_type হলো এর এক্সটেনশন।
- speak হলো একটি টাইপ-বাউন্ড সাবরুটিন যা dog_type এবং cat_type এর জন্য ভিন্নভাবে কাজ করবে (অর্থাৎ পলিমরফিক আচরণ)।
- Polymorphism এই উদাহরণে, একই নামের speak সাবরুটিনের মাধ্যমে ভিন্ন আচরণ (উল্লেখযোগ্যভাবে Woof! এবং Meow!) অর্জন করা হয়েছে।
আউটপুট:
Rex says Woof!
Whiskers says Meow!Inheritance এবং Polymorphism এর ব্যবহারের সুবিধা
- Code Reusability: ইনহেরিট্যান্সের মাধ্যমে কোড পুনঃব্যবহারযোগ্য হয়। একবার বেস ক্লাস তৈরি করার পর, তার বৈশিষ্ট্য এবং আচরণ উত্তরাধিকারসূত্রে অন্যান্য ক্লাসে চলে আসে।
- Improved Maintainability: বেস ক্লাসের পরিবর্তন করলে এর সমস্ত সাবক্লাসের কার্যকারিতা আপডেট হয়, যা কোডের রক্ষণাবেক্ষণ সহজ করে।
- Flexibility: পলিমরফিজম ফাংশনগুলিকে বিভিন্ন ধরনের ডেটা দিয়ে ব্যবহার করার সুযোগ দেয়, এবং কোডের বিভিন্ন অংশে একাধিক আউটপুট তৈরি করতে সক্ষম হয়। এটি প্রোগ্রামটিকে আরও ফ্লেক্সিবল এবং শক্তিশালী করে তোলে।
- Clearer and Cleaner Code: ইনহেরিট্যান্স এবং পলিমরফিজমের মাধ্যমে কোড আরও পরিষ্কার, সংগঠিত এবং সহজ হয়ে ওঠে, এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
উপসংহার
ফোরট্রানে Inheritance এবং Polymorphism Object-Oriented Programming এর গুরুত্বপূর্ণ ধারণা যা কোডের পুনঃব্যবহারযোগ্যতা, মডুলারিটি এবং রক্ষণাবেক্ষণ সহজ করতে সহায়তা করে। Inheritance এর মাধ্যমে একটি ক্লাস বা টাইপ অন্য ক্লাস বা টাইপ থেকে বৈশিষ্ট্য এবং আচরণ উত্তরাধিকার হিসেবে পেতে পারে, এবং Polymorphism এর মাধ্যমে একটি ইন্টারফেসের মাধ্যমে একাধিক ধরনের অবজেক্টের আচরণ পরিচালনা করা যায়।
Read more