LISP একটি ফাংশনাল প্রোগ্রামিং ভাষা হলেও, এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর ধারণা সমর্থন করতে পারে, বিশেষ করে Common Lisp Object System (CLOS) ব্যবহার করে। CLOS LISP এর একটি শক্তিশালী OOP সিস্টেম যা ক্লাস এবং অবজেক্ট তৈরি, ইনহেরিট্যান্স, পলিমরফিজম, এবং এনক্যাপসুলেশন সমর্থন করে।
এখানে আমরা দেখবো কিভাবে LISP-এ class এবং object তৈরি করা যায় CLOS ব্যবহার করে।
১. Class তৈরি করা (Creating a Class)
LISP-এ একটি ক্লাস তৈরি করতে defclass ম্যাক্রো ব্যবহার করা হয়। একটি ক্লাস ডিফাইন করার সময়, তার অ্যাট্রিবিউট বা প্রপার্টি (যেমন, ভেরিয়েবল বা ফিল্ড) ঘোষণা করতে হয়।
Syntax:
(defclass class-name (superclass)
((attribute1 :initform value :accessor attribute1)
(attribute2 :initform value :accessor attribute2)))class-name: ক্লাসের নামsuperclass: ঐ ক্লাস যদি অন্য ক্লাস থেকে ইনহেরিট করে তবে তার নাম (যেমন,objectবা অন্য কোনো ক্লাস)attribute: ক্লাসের প্রপার্টি বা ভেরিয়েবল
উদাহরণ (Class তৈরি করা):
(defclass person ()
((name :initarg :name :accessor person-name)
(age :initarg :age :accessor person-age)))এখানে:
personনামে একটি ক্লাস তৈরি করা হয়েছে।- দুটি অ্যাট্রিবিউট
nameএবংageরয়েছে, যেগুলি:initargদিয়ে ইনিশিয়ালাইজ হবে এবং:accessorএর মাধ্যমে অ্যাক্সেস করা যাবে।
২. Object তৈরি করা (Creating an Object)
LISP-এ ক্লাসের একটি অবজেক্ট তৈরি করতে make-instance ফাংশন ব্যবহার করা হয়। এটি ক্লাসের একটি ইনস্ট্যান্স তৈরি করে এবং তার প্রপার্টি বা অ্যাট্রিবিউটের মান প্রদান করা যায়।
Syntax:
(make-instance 'class-name :attribute1 value1 :attribute2 value2)উদাহরণ (Object তৈরি করা):
(setq john (make-instance 'person :name "John Doe" :age 30))এখানে, john নামে একটি অবজেক্ট তৈরি করা হয়েছে person ক্লাস থেকে, যেখানে name "John Doe" এবং age ৩০ প্রদান করা হয়েছে।
৩. Accessor এবং Setter Method ব্যবহার করা
LISP-এ, CLOS ক্লাসে প্রপার্টি অ্যাক্সেস করতে accessor ফাংশন ব্যবহার করা হয়। আপনি ক্লাসে ডিফাইন করা accessor ফাংশনগুলির মাধ্যমে অ্যাট্রিবিউটের মান রিড করতে পারেন।
উদাহরণ (Accessor Method ব্যবহার):
(person-name john) ; আউটপুট: "John Doe"
(person-age john) ; আউটপুট: 30এখানে, person-name এবং person-age অ্যাক্সেসর ব্যবহার করে আমরা john অবজেক্টের name এবং age অ্যাট্রিবিউটের মান পেতে পারি।
৪. Method তৈরি করা (Creating a Method)
LISP-এ defmethod ব্যবহার করে মেথড তৈরি করা হয় যা ক্লাসের অবজেক্টে কাজ করবে। মেথড ডিফাইন করার সময় তার আর্গুমেন্ট হিসেবে ক্লাসের অবজেক্ট এবং অন্যান্য আর্গুমেন্ট দেয়া হয়।
Syntax:
(defmethod method-name ((object class-name) other-arguments)
"Method body")উদাহরণ (Method তৈরি করা):
(defmethod print-person ((p person))
(format t "Name: ~A, Age: ~A" (person-name p) (person-age p)))এখানে, print-person একটি মেথড যা person ক্লাসের অবজেক্ট নিয়ে তার নাম এবং বয়স প্রিন্ট করবে।
মেথড কল করা:
(print-person john) ; আউটপুট: Name: John Doe, Age: 30এখানে, print-person মেথড কল করে আমরা john অবজেক্টের নাম এবং বয়স প্রিন্ট করেছি।
৫. Inheritance (Inheriting a Class)
CLOS তে ইনহেরিট্যান্স সমর্থিত। আপনি একটি ক্লাসকে অন্য ক্লাস থেকে ইনহেরিট করতে পারেন।
উদাহরণ (Inheritance):
(defclass employee (person)
((salary :initarg :salary :accessor employee-salary)))
(setq jane (make-instance 'employee :name "Jane Smith" :age 25 :salary 50000))এখানে, employee ক্লাসটি person ক্লাস থেকে ইনহেরিট করছে। employee ক্লাসে নতুন একটি অ্যাট্রিবিউট salary যোগ করা হয়েছে।
মেথড ব্যবহার:
(print-person jane) ; আউটপুট: Name: Jane Smith, Age: 25
(employee-salary jane) ; আউটপুট: 50000এখানে, jane একটি employee অবজেক্ট, যেটি person ক্লাস থেকে name এবং age অ্যাট্রিবিউট ইনহেরিট করেছে এবং employee ক্লাসে salary অ্যাট্রিবিউট যোগ হয়েছে।
সারসংক্ষেপ
- Class তৈরি: LISP-এ ক্লাস তৈরি করতে
defclassব্যবহার করা হয়। - Object তৈরি: ক্লাসের অবজেক্ট তৈরি করতে
make-instanceব্যবহার করা হয়। - Accessor Methods: ক্লাসের প্রপার্টি অ্যাক্সেস করতে
accessorফাংশন ব্যবহার করা হয়। - Method তৈরি:
defmethodব্যবহার করে ক্লাসের মেথড তৈরি করা হয়। - Inheritance: একটি ক্লাস থেকে অন্য ক্লাস ইনহেরিট করতে
defclassএর মধ্যে সুপারক্লাস নির্ধারণ করা হয়।
LISP এর CLOS (Common Lisp Object System) একটি শক্তিশালী OOP সিস্টেম যা ক্লাস, অবজেক্ট, মেথড, এবং ইনহেরিট্যান্সসহ অন্যান্য OOP ধারণাগুলি সাপোর্ট করে।
Read more