লুয়া (Lua) একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষা নয়, তবে এটি মেটামেথডস এবং মেটাটেবিলের সাহায্যে অবজেক্ট-ওরিয়েন্টেড ধারণা, যেমন ইনহেরিট্যান্স এবং পলিমরফিজম, বাস্তবায়ন করতে সক্ষম। এখানে, আমরা লুয়া ভাষায় ইনহেরিট্যান্স এবং পলিমরফিজম কিভাবে কাজ করে এবং কিভাবে এগুলির বাস্তবায়ন করা যায় তা আলোচনা করব।
১. ইনহেরিট্যান্স (Inheritance)
ইনহেরিট্যান্স হল একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং কৌশল যা একটি ক্লাস বা অবজেক্টের গুণাবলী অন্য ক্লাস বা অবজেক্টের মধ্যে উত্তরাধিকার সূত্রে প্রদান করে। লুয়া ভাষায়, মেটামেথডস এবং মেটাটেবিল ব্যবহার করে ইনহেরিট্যান্স কাস্টম ডেটা টাইপের মধ্যে বাস্তবায়িত করা যায়।
উদাহরণ: ইনহেরিট্যান্স বাস্তবায়ন
ধরা যাক, আপনি দুটি অবজেক্ট Animal এবং Dog তৈরি করতে চান যেখানে Dog অবজেক্টটি Animal অবজেক্ট থেকে বৈশিষ্ট্যগুলি উত্তরাধিকারসূত্রে গ্রহণ করবে।
-- Animal ক্লাস
Animal = {}
Animal.__index = Animal
function Animal.new(name)
local self = setmetatable({}, Animal)
self.name = name
return self
end
function Animal:speak()
print(self.name .. " makes a sound")
end
-- Dog ক্লাস, Animal থেকে ইনহেরিট করা
Dog = setmetatable({}, Animal) -- Dog ক্লাসকে Animal মেটাটেবিল থেকে ইনহেরিট করা
Dog.__index = Dog
function Dog.new(name)
local self = setmetatable(Animal.new(name), Dog) -- Animal.new() ফাংশন ব্যবহার করা
return self
end
function Dog:speak()
print(self.name .. " barks") -- Dog এর speak ফাংশন কাস্টমাইজড
end
-- অবজেক্ট তৈরি করা
local myDog = Dog.new("Buddy")
myDog:speak() -- আউটপুট: Buddy barks
local myAnimal = Animal.new("Animal")
myAnimal:speak() -- আউটপুট: Animal makes a soundএখানে:
Animalহল মূল ক্লাস এবংDogহল একটি সাবক্লাস যাAnimalথেকে ইনহেরিট করেছে।Dogক্লাসেAnimal.new(name)মেথড কল করা হয়েছে যাDogঅবজেক্টকে ইনিশিয়ালাইজ করে।Dog:speak()মেথডটিDogক্লাসের জন্য কাস্টমাইজড হয়েছে, যা মূলAnimal:speak()মেথডের ওপর পলিমরফিক আচরণ প্রদর্শন করে।
২. পলিমরফিজম (Polymorphism)
পলিমরফিজম হল একটি ধারণা যার মাধ্যমে একটি ফাংশন বা মেথড বিভিন্ন ধরনের অবজেক্টে ভিন্নভাবে কাজ করতে পারে। লুয়া ভাষায় পলিমরফিজম মেটামেথডস এবং ইনহেরিট্যান্সের মাধ্যমে সহজে বাস্তবায়ন করা যায়।
উদাহরণ: পলিমরফিজম বাস্তবায়ন
লুয়া ভাষায় পলিমরফিজম সাধারণত একই নামের মেথড বিভিন্ন অবজেক্টে বিভিন্ন কার্যকলাপ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, speak() মেথড দুটি ভিন্ন ক্লাসে আলাদা আলাদা কার্যকলাপ করতে পারে।
-- Animal ক্লাস
Animal = {}
Animal.__index = Animal
function Animal.new(name)
local self = setmetatable({}, Animal)
self.name = name
return self
end
function Animal:speak()
print(self.name .. " makes a sound")
end
-- Dog ক্লাস, Animal থেকে ইনহেরিট করা
Dog = setmetatable({}, Animal)
Dog.__index = Dog
function Dog.new(name)
local self = setmetatable(Animal.new(name), Dog)
return self
end
function Dog:speak()
print(self.name .. " barks")
end
-- Cat ক্লাস, Animal থেকে ইনহেরিট করা
Cat = setmetatable({}, Animal)
Cat.__index = Cat
function Cat.new(name)
local self = setmetatable(Animal.new(name), Cat)
return self
end
function Cat:speak()
print(self.name .. " meows")
end
-- পলিমরফিজম: একই ফাংশন নাম 'speak' আলাদা আলাদা অবজেক্টে আলাদা কাজ করছে
local myDog = Dog.new("Buddy")
local myCat = Cat.new("Whiskers")
myDog:speak() -- আউটপুট: Buddy barks
myCat:speak() -- আউটপুট: Whiskers meowsএখানে, speak() মেথডটি Dog এবং Cat ক্লাসে আলাদা আলাদা আচরণ করছে। এটি পলিমরফিজম কারণ একই নামের ফাংশন ভিন্ন ভিন্ন ক্লাসে আলাদা আচরণ করে। এই প্রক্রিয়াটি সাধারণত ইনহেরিট্যান্সের সাথে মিলিত হয়ে কাজ করে।
৩. মেটামেথডস এবং পলিমরফিজম
পলিমরফিজমকে আরও শক্তিশালী এবং নমনীয় করতে মেটামেথডস ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, লুয়া টেবিলের মাধ্যমে আপনি __add, __mul ইত্যাদি অপারেটরগুলো কাস্টমাইজ করে পলিমরফিক আচরণ বাস্তবায়ন করতে পারেন।
-- Vector ক্লাস
Vector = {}
Vector.__index = Vector
function Vector.new(x, y)
local self = setmetatable({}, Vector)
self.x = x
self.y = y
return self
end
function Vector.__add(v1, v2)
return Vector.new(v1.x + v2.x, v1.y + v2.y)
end
-- পলিমরফিজম: দুইটি ভেক্টরের যোগফল করা
v1 = Vector.new(1, 2)
v2 = Vector.new(3, 4)
v3 = v1 + v2 -- __add মেটামেথড কল হবে
print(v3.x, v3.y) -- আউটপুট: 4 6এখানে, Vector ক্লাসে __add মেটামেথড ব্যবহার করে + অপারেটর কাস্টমাইজ করা হয়েছে, যা দুটি ভেক্টরের যোগফল বের করবে।
সারসংক্ষেপ
- ইনহেরিট্যান্স: লুয়া ভাষায় মেটামেথডস এবং মেটাটেবিল ব্যবহার করে ক্লাসের মধ্যে ইনহেরিট্যান্স বাস্তবায়ন করা হয়।
- পলিমরফিজম: একই নামের মেথড বা অপারেটর বিভিন্ন ক্লাসে ভিন্নভাবে কাজ করতে পারে, যা ইনহেরিট্যান্সের মাধ্যমে সহজে সম্ভব।
- মেটামেথডস: লুয়া ভাষায় অপারেটর ওভারলোডিং এবং পলিমরফিজম কাস্টমাইজ করার জন্য মেটামেথডস ব্যবহার করা হয়।
এই ধারণাগুলি লুয়া ভাষায় অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের শক্তিশালী পদ্ধতি হিসেবে কাজ করে, যার মাধ্যমে কোড পুনঃব্যবহারযোগ্য এবং কার্যকরী করা যায়।
Read more