ক্লাস এবং অবজেক্ট

পাইথন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ। অবজেক্ট হছে ডেটা কালেকশন বা ভ্যারিয়েবল এবং মেথড এর সমষ্টি। মেথড হচ্ছে ফাংশন, যে গুলো ঐ ডেটা বা ভ্যারিয়েবলের উপর কাজ করে।

ক্লাস হচ্ছে অবজেক্ট এর ব্লু প্রিন্ট। একটা বাড়ীর স্কেচ এর কথা চিন্তা করি। এটা হচ্ছে ক্লাস। যার মধ্যে বাড়িটি কেমন হবে, কয়েকটি রুম, ফ্লোর, দরজা, জানালা ইত্যাদি সব থাকে। আর বাড়িটি হচ্ছে অবজেক্ট। বাড়িটির স্কেস / ব্লু প্রিন্ট ব্যবহার করে আমরা যত ইচ্ছে ততগুলো বাড়ি তৈরি করতে পারি। আর ক্লাস থেকে অবজেক্ট তৈরিকে বলে ইন্সটান্স/ instance তৈরি। মানে এক একটা অবজেক্ট হচ্ছে ক্লাসের এক একটা ইন্সট্যান্স।

আমরা একটা সিম্পল ক্লাস তৈরি করব Hello নামে।

class Hello:
     def sayHello(self):
          print ("Hello world!")

hello1 = Hello()
hello1.sayHello()

class Hello: দিয়ে ক্লাসের নাম দিয়েছি। এরপর এর ভেতরে ক্লাসের ডেটা এবং মেথড গুলো। আমাদের Hello ক্লাসে একটি মাত্র মেথড রয়েছে। sayHello নামে। যাকে কল করলে Hello world! প্রিন্ট করবে।
hello1 = Hello() এখানে Hello ক্লাসের একটি ইন্সট্যান্স তৈরি করে নিয়েছি, hello1 নামে। এরপর hello1.sayHello() দিয়ে Hello ক্লাসের sayHello মেথড টাকে কল করেছি। তা Hello World! প্রিন্ট করেছে। আমরা চাইলে Hello ক্লাসের একের অধিক ইন্সট্যান্স তৈরি করে নিতে পারি।

class Hello:
     def sayHello(self):
          print ("Hello world!")

hello1 = Hello()
hello1.sayHello()

hello2 = Hello()
hello2.sayHello()

এখানে hello2 নামে আরেকটি ইন্সট্যান্স তৈরি করেছি। এরপর মেথড sayHello কল করেছি।

Contractor

কনস্ট্রাকটর তৈরি করা হয় __init__ দিয়ে। দুইটা আন্ডারস্কোর init এবং দুইটা আন্ডারস্কোর দিয়ে। নিচের মত করে।

class Hello:
     def __init__:
     print (“Contractor")

     def sayHello(self):
          print ("Hello world!")

যখন একটি অবজেক্ট তৈরি করা হয়, তখনই কনস্ট্রাকটর কল হয়। যত গুলো অবজেক্ট তৈরি করা হয়, তত বার কন্সট্রাকটর কল করা হয়ঃ

class Hello:
     def __init__(self):
          print ("Constractor")

     def sayHello(self):
          print ("Hello world!")

hello1 = Hello()
hello1.sayHello()

hello2 = Hello()
hello2.sayHello()
 

উপরের প্রোগ্রামটি রান করলে দেখতে পাব দুইবার কন্সট্রাকটর প্রিন্ট হয়েছে। কারণ আমরা দুইটা Hello ক্লাসের ইন্সট্যান্স তৈরি করেছি।

কন্সট্রাকটর মূলত ডেটা সেট করার জন্য ব্যবহৃত হয়।

class Hello:
     def __init__(self, name):
          self.n = name

def sayHello(self):
         return ("Hello " + self.n)

hello1 = Hello("Jack")

print (hello1.sayHello())

উপরের প্রোগ্রামে আমরা ক্লাসের ইন্সট্যান্স তৈরি করার সময় একটা নাম পাস করেছি। কনস্ট্রাকটরে অবজেক্ট থেকে পাস করা নামটি নিয়ে একটি ভ্যারিয়েবলে রাখা হয়েছে, self.n = name দিয়ে। এখনে self হচ্ছে ঐ অবজেক্টটি, যে অবজেক্ট আমরা ব্যবহার করতেছি। তারপর sayHello তে আমরা অবজেক্ট তৈরি করার সময় যে নাম দিয়েছি, Hello + ঐ নামটি রিটার্ন করেছি।

ক্লাস নিয়ে সহজ একটা উদাহরণ দিচ্ছি।

class Calculator:
     def __init__(self, n):
         self.number = n

     def square(self):
         return (self.number*self.number)

calc = Calculator(4)
print (calc.square())

এখানে আমরা Calculator নামক একটা ক্লাস নিয়েছি। যার ভেতর একটি মেথড রয়েছে square নামে। যার কাজ হচ্ছে ক্লাসটির ইন্সট্যান্স তৈরির সময় কোন নাম্বার পাস করলে তার স্কয়ার রিটার্ন করা। স্কয়ার রিটার্ন করার মত করে আমরা যোগ, বিয়োগ, গুণ, ভাগের মেথড লিখতে পারি। পরে যোগ, বিয়োগ, গুণ ভাগ করতে চাইলে ঐ মেথড গুলো কল করলেই আমাদের যোগ, বিয়োগ করে দিবে।

এখন আমরা একটি Scientific Calculator তৈরি করতে চাই। সাইন্টিফিক ক্যালকুলেটরে যোগ বিয়োগ গুণ ভাগের পাশা পাশি আরো অনেক গুলো সুবিধে থাকে। যেমন একটা সংখ্যার সাইন মান বের করা। যেহেতু Calculator এ যোগ, বিয়োগ, গুণ ভাগ ইত্যাদি করা যায়, আমরা সাইন্টিফিক ক্যালকুলেটর তৈরির সময় আলাদা ভাবে ঐ Calculator ক্লাসের কোড গুলো না লিখে Calculator ক্লাসের সাথে আরো কিছু কোড যুক্ত করে দিলেই আমাদের কাজ হয়ে যাবে। আর এ যুক্ত করার জন্য আমরা নতুন একটা ক্লাস তৈরি করে নিব। SiCal = Scientific Calculator.

import math

class Calculator:
     def __init__(self, n):
          self.number = n

     def square(self):
          return (self.number*self.number)

class SiCalc(Calculator):
     def getSin(self):
          return math.sin(self.number)

calc = SiCalc(45)

print (calc.getSin())

এখানে আমরা SiCalc নামে একটা নতুন ক্লাস তৈরি করেছি। যার বলে দিয়েছি এটির কোন প্যারেন্ট ক্লাস আছে কিনা। আমাদের SiClac ক্লাসের প্যারেন্ট ক্লাস বা মূল ক্লাস হছে Calculator. এটাকে বলে ডিরাইভ করা। যখন আমরা বেজ ক্লাস বা মূলক্লাস থেকে ডিরাইভ করে নতুন ক্লাস তৈরি করব, তখন আমরা বেজ ক্লাসের সকল মেথড ব্যবহার করতে পারব।

আমাদের Scientific Calculator ক্লাসে একটা মেথড লিখছি, যা কোন সংখ্যা পাস করলে তার সাইন মান রিটার্ন করবে। আমরা চাইলে এখন আবার বেজ ক্লাস, Calculator এর মেথড ও ব্যবহার করতে পারি। যেমন print (calc.square()) লিখলে আমাদের স্কোয়ার প্রিন্ট করে দিবে। আর আমরা এতক্ষন যে জিনিসটা করলাম, তাকে বলে ইনহেরিটেন্স / Inheritance।


One thought on “ক্লাস এবং অবজেক্ট

Leave a Reply

Your email address will not be published. Required fields are marked *