মজার ও সহজ প্রোগ্রামিং, পাইথন প্রোগ্রামিং [পর্ব-১৪] :: অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং

8
423

আমার প্রিয় বন্ধুরা , আাশা করি ভাল আছেন । আজ আমি আপনাদের দেখাতে চেয়েছিলাম একটা গুই প্রোগ্রাম । কিন্তু , একটা জিনিস ভেবে আমি আজ তা পারছি না । কারণ ভেবে দেখলাম , অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং টা একটু না জানলে আপনাদের গুই টা বোঝা কষ্টকর হয়ে যাবে । যদিও আমি আপনাদের অবজেক্ট ওরিয়েন্টেড এর কয়েকটা বই আপনাদের দিয়েছিলাম , তবুও সেগুলো ছিল ইংলিশ এ । তাই , আজ আামি আপনাদের অবজেক্ট ওরিয়েন্টেড সম্পর্কে একটা ভাল ধারণা দেব । অবশ্য কেউ যদি চান যে অবজেক্ট ওরিয়েন্টেড শিখবেন না , কোন সমস্যা নেই । এটা না জেনেও প্রোগ্রামার হওয়া যায় । তবে এর সুবিধা হল , এটা প্রোগ্রামিং টাকে আরও অনেক সহজ করে দেয় । প্রোগ্রামারের সময় অনেক বাচিয়ে দেয় । তবে এটা কিন্তু কঠিন কোন কিছুই না একেবারেই । এটা খুবই সহজ একটা ধারণা । এই পর্যন্ত আপনারা যা কিছূ শিখেছেন তার মধ্যে সবথেকে মজার জিনিস হল এই টা । আসুন আমরা আজ অবজেক্ট ওরিয়েন্টেড সম্পর্কে একটু ধারণা নিই ।

অবজেক্ট ওরিয়েন্টেড এর মূল কথা একটু খাটি বাংলায় খুলে বলি । ধরুন আপনার যখন কোন জিনিসের দরকার হয় , তথন আাপনি কী করেন ? বাজারে গিয়ে বা কোন প্রতিবেশীর কাছ থেকে গিয়ে নিয়ে আসেন । আর আপনি কারিগর হলে নিজেই তৈরী করে নেন । কিন্তু, ভেবে দেখূন , এক জিনিস বার বার তৈরী করা বা বার বার প্রতিবেশীর কাছে চাওয়া যেন কেমন একটা । তাই সবথেকে ভাল হয় যদি আপনি সেগুলো আপনার ঘরে কোথাও সংরক্ষন করে রাখেন । আর এই কাজটা করলে আপনি ইচ্ছা মত ঘরের থেকে জিনিস গুলো নিয়ে ইউজ করতে পারবেন । আর এই ধারণাটাই হল অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ।

আসুন আমরা উপরের কথা গুলোর সাথে বাস্তবের পাইথন প্রোগ্রামিং এর একটু মিল খুজে নিই । আমাদের পাইথন এ অবজেক্ট ওরিয়েন্টেড এ রয়েছে প্রধানত ২ টি অংশ । ১. class ২.object । এই ক্লাস টা হল আমাদের ঘরের মত । যেখানে আমরা সব জিনিস সংগ্রহ করে রাখতে পারব । আর অবজেক্ট টা হল আমাদের ব্যবহার্য সব জিনিসের মত । এগুলো হতে পারে বিভিন্ন ফাংশন , কন্ডিশনাল স্টেটমেন্ট প্রভৃতি । আমরা এ পর্যন্ত পাইথনের যা কিছু শিখেছি সবই অবজেক্ট হতে পারে । ধরুন আপনি একটা ক্লাসের ভিতর অনেক গুলো ফাংশন তৈরী করে রাখলেন । এরপর সময় ও প্রয়োজনমত এগুলো নিয়ে ব্যবহার করলেন । এখন আমি আপনাদের দেখাব কীভাবে এই ক্লাসের মধ্যে ফাংশন তৈরী করে রাখতে হয় ,আর তা কীভাবেই বা ব্যবহার করতে হয় । আর এ কাজ গুলোই হল অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ।
সবাই আমার সাথে নিচের প্রোগ্রামটা লিখুন :

class tt:
    def say(self):
        print("hello world")
    def talk(self):
        print("Hi techtunes user, How are you ?")
    def wh(self):
        a = 1
        while a < 10:
            print(a)
            a = a+1
    def fo(self):
        m = ["hacking","programming","linux","java","web design","edutune","web devolopment","html","css"]
        for i in m:
            print(i)
r = tt()
r.talk()
r.say()
r.wh()
r.fo()

দেখূন , এখানে class tt: লেখার দ্বারা আমরা একটি ক্লাস ডিক্লেয়ার করেছি । আপনারাও সব সময় এই ভাবে ক্লাস ডিক্লেয়ার করবেন । এরপর দেখূন, আমরা এই ক্লাসের মধ্যে ৪ টা ফাংশন তৈরী করেছি । তবে একটা জিনিস দেখূন , আমরা প্রত্যেক ফাংশন তৈরী র সময় () এর মধ্যে self কথাটা লিখেছি । এর কারণ হল , এটাই অর্ডিনারী প্রোগ্রামিং থেকে অবজেক্ট ওরিয়েন্ডেড এর পার্থক্য । এই self প্যারামিটারের নিজস্ব কোন মান থাকবে না । এটি পাইথন ই দিয়ে নেবে । এটি একটা ভ্যরিয়েবল । এটি মূলত অর্থ নির্দেশ করে “itself” বা নিজে থেকে কর । আপনি এটি self এর বদলে অন্য কিছুও ইউজ করতে পারেন । কিন্তু পাইথনে self ইউজ করার জন্য রিকমেন্ডেশন দেওয়া আছে কারণ এটা ইউজ করলে সব IDE এর অর্থটা ভাল ভাবে বুঝতে পারে । self প্যারামিটারটি অনেক ভ্যারিয়েবল সংরক্ষণ ও করতে পারে । একটু পরে আমরা সেটা দেখব ।

দেখূন ১ম অংশে আমরা শুধূ ফাংশন তৈরী করেছি । আশা করি ফাংশন সম্পর্কে আপনাদের বেশী কিছু বলতে হবে না । এরপর দেখূন , ২ঙ অংশে আমরা এই ফাংশন গুলো ইউজ করেছি ।

প্রথমে r = tt() দ্বারা আমরা বলে নিয়েছি যে r হল tt এরই কাজ করবে । এইভাবে না লিখে আমরা অন্য ভাবেও লিখতে পারি , কিন্তু সেটা কঠিন হয়ে যায় ।সেটা হল tt().talk() । এরপর এরপর r. এর পর ফাংশনের নামগুলো লিখে [r.talk(),r.wh()] আমরা উপরের তৈরী ফাংশন গুলোকে ডেকে কাজ করতে বলেছি । ফলে ফাংশন গুলো একের পর এক কাজ করে গেছে । আপনি এখানে সব ফাংশনকে একসাথে না ডেকে ১ টা বা ২ টা কেও ডাকতে পারেন । এই যে ফাংশন গুলি আপনি তৈরী করলেন , এগুলোকে আপনি একটা বড় প্রোগ্রাম এর সব স্থঅনে কাজে লাগাতে পারেন । আপনাকে শুধু পদ্ধতি টা ঠিক রিখে তাদের ডাকতে শিখতে হবে । এবার দেখুন আমরা এমন একটা প্রোগ্রাম তৈরী করব যেটা টেকটিউনসে প্রত্যেক ইউজারের ইউজার নেম, মোবাইল নাম্বার ও পাসওয়ার্ড বলার কাজে ব্যবহৃত হবে । সবাই নিচের কোড গুলি লিখূন :

class techtunes:
    def creat(self,user,id_no,password):
        self.user = user
        self.id = id_no
        self.password = password
    def showdetails(self):
        print("this user name is",str(self.user) + " and mobile no is", str(self.id) + " and  password is ",str(self.password))
t = techtunes()
a = input("enter your name : ")
b = int(input("Enter your mobile number : "))
c = int(input("enter your password : "))
t.creat(a,b,c)
t.showdetails()

দেখূন এখানে আমরা techtunes নামে একটা ক্লাস নিয়েছি । তারপর এর মধ্যে ২ টা ফাংশন তৈরী করেছি । প্রথমে আমরা creat নামে একটা ফাংশন তৈরী করেছি যেটা টেকটিউনসের সকল ইউজারের ইউজার নেম , মোবাইল নং ও পাসওয়ার্ড জমা রাখতে সক্ষম ।

creat(self,user,id_no,password): দ্বারা আমরা বোঝঅতে চেয়েছি যে user,id_no,password নামক ৩ টি ভ্যারিয়েবল আমরা কাজে লাগিয়েছি ইউজারের সব তথ্য নেওয়ার জন্য । এখানে self টাও ওকটি ভ্যরিয়েবল যার কোন নিজস্ব মান নেই , কিন্তু সে অপর ভ্যারিয়েবলকে সংরক্ষন করতে পারে । এরপরের লাইনেই বিষয়টা আরও ক্লিয়ার হয়েছে । দেখুন self.user = user এ self এর সাথে যে user টা আছে সেটার সাথে কিন্তু = চিহ্নে পরের user এর কোন মিল নেই । এরা ২ টি আলাদা । এখানে , self.user এ user কে বলা হয় ডিপেন্ডেন্ট ভ্যরিয়েবল । আর = চিহ্নে পরের টাকে বলা হয় লোকাল ভ্যরিয়েবল । self টা ব্যবহার করা হয় এই কারণে যে , যখনই ফাংশন কে কল করো না কেন , তাকে কোন স্পেসিফিক কাজ বলে না দিলেও সে ফাংশনে যে কাজ করতে বলা হয়েছে সে সেই কাজ করে যায় । আপনার self না দিয়ে ট্রাই করে দেখুন । দেখবেন প্রোগ্রামটা ঠিক ঠাক কাজ করছে না । একই ভাবে আমরা id_no ও password কেও একই ভাবে কাজ করতে বলেছি । এখানে কিন্তু self.user বা self.id সবাই এক একটা ভ্যারিয়েবল । আমরা বলে দিয়েছি এদের মান হবে উপরের user ,id_no ও password এর মানের সমান ।

এরপর আমরা showdetails নাদের আরেকটা ফাংশন নিয়ে বলে দিয়েছি উপরের যে তথ্য আমা বা ইউজার রা ইনপুট দিবে তা একটা স্পেসিফিক ফর্মে প্র্রিন্ট করতে । এরপর আমরা a b c তিনটি ভ্যরিয়েবল দ্বারা ইউজারের নাম , মোবাইল নাম্বার ও পাসওয়ার্ড ইনপুট নিয়েছি । এরপর t.creat(a,b,c) দ্বারা আমরা ১ম ফাংশন কে কল করে ইউজারে প্রোফাইল তৈরী করতে বলেছি এবং t.showdetails() দ্বারা আমরা ২য় ফাংশনকে কল করে তাদের স্ট্রিং গুলো সো করতে বলেছি । আপনারা আরও অনেক তথ্য একই ভাবে এখানে এ্যাড করতে পারেন আরও ভ্যারিয়েবল এর সংখ্যা বাড়িয়ে । বা আরও বেশী ফাংশন তৈরী করে আরও কাজ করতে পারেন ।

এবার আমি আপনাদের এমন একটা বিষয় বলব যে আপনাদের কাজ আরও কমে যাবে । ধরুন আপনি একটা ক্লাস লিখে ফেলেছেন । এখন আরেকটা ক্লাস লিখবেন । কিন্তু দেখছেন এই ক্লাস টাতে আগের ক্লাস টার অনেক কাজ রয়ে গেছে । অর্থাৎ এই ক্লাস টা লিখতে আগের ক্লাসের অনেক ফাংশন এর প্রয়োজন হচেছ । কোন চিন্তা নেই । আপনি সহজেই আগের ক্লাসটাকে এই ক্লাসের ভিতর ঢুকিয়ে দিতে পারবেন । কী ভাবে ? শুধু পরের ক্লাস টা ডিক্লেয়ার করার সময় () এর মধ্যে আগের ক্লাস টার নাম লিখে নিন । যেমন আমাদের তৈরী দুটি ক্লাসের ভিতরই এই কাজটা করতে পারি । সেক্ষেত্রে লিখুন
class techtunes(tt):

এখানে ১ম ক্লাসটিকে বলা হয় ২য় টির ফাদার ক্লাস । এখন আপনি ২য় ক্লাসটি দিয়ে ১ম টির সব কাজও করতে পারবেন আবার ২য় টির কাজ তো করতে পারবেনই । দেখুন এভাবে লিখলে আমাদের প্রোগ্রামটি কেমন হয় ?

class tt:
    def say(self):
        print("hello world")
    def talk(self):
        print("arindam")
    def wh(self):
        a = 1
        while a < 10:
            print(a)
            a = a+1
    def fo(self):
        m = ["hacking","programming","linux","java","web design","edutune","web devolopment","html","css"]
        for i in m:
            print(i)
r = tt()
r.talk()
r.say()
r.wh()
r.fo()

class techtunes(tt):
    def creat(self,user,id_no,password):
        self.user = user
        self.id = id_no
        self.password = password
    def showdetails(self):
        print("this user name is",str(self.user) + " and mobile no is", str(self.id) + " and my password is ",str(self.password))
t = techtunes()
a = input("enter your name : ")
b = int(input("Enter your mobile number : "))
c = int(input("enter your password : "))
t.creat(a,b,c)
t.showdetails()
t.fo()
t.talk()
t.say()
t.wh()

দেখুন এখন আমরা দুটি ক্লাসের কাজই করতে পারছি । এখন () ভিতর থেকে আগের ক্লাসের নামটি মুছে দিয়ে দেখুন , আগের ক্লাসের যে কাজগুলি ছিল , সেগুলিতে এখন ইরর দেখাচ্ছে । অবশ্য আপনি আগের মত r.wh() লিখে আগের ক্লাসের কাজগুলি করতে পারবেন ।

দেখুন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং টা আসলে অনেক বড় । এভাবে এক কথায় বা দুই কথায় বুঝিয়ে দেবার জিনিস এটা না । আমি নিজেই অবজেক্ট ওরিয়েন্টেড এর কিছুই জানি না । বি এস সি তে অবজেক্ট ওরিয়েন্টেড এর উপর আলাদা বই আছে । তবে এটা জাস্ট প্রাথমিক একটা ধারণা । আপনারা যাতে পরবর্তী এডভান্স জিনিসগুলো ভালভাবে বুঝতে পারেন তারই একটা ভিত্তি হল এই লেখাটা ।এই লেখাটাকে অবজেক্ট ওরিয়েন্টেড প্রোগ্রমিং এর সূত্র এর মত ধরে নিতে পারেন । এরপর থেকে আপনাদের নিজেদের উদ্যোগে অবজেক্ট ওরিয়েন্টেড শিখতে হবে ।

নোটিশ : আজ self এর ব্যবহার টা নতুন অনেকের কাছে গোলমেলে লাগতে পারে । যারা বুঝতে পেরেছেন তাদের তো কিছু্ই বলার নেই । আর যারা বুঝতে পারেন নি , তারা self টা বিভিন্ন জায়গায় বসিয়ে বা যেসব স্থানে বসানো আছে সেখান থেতে তুলে দিয়ে যে ইরর দেখায় তা বোঝার চেষ্টা করুন ।আর তার পরেও বুঝতে না পারলে মনে করুন এটা একটা গনিতের সূত্রের মত । এইসব স্থানে এটা না বসালে কাজ হবে না । আর প্রচুর প্রাকটিস করতে থাকুন । প্রাকটিস করতে করতে এক সময় ঠিকই বুঝে যাবেন । চিন্তার কোন কারণ নেই ।

আর একটা বিষয় । আসলে আপনারা অনেকেই হুকুশ পাকুশের পাইথন টা পড়েছেন । না পড়লে একবার কষ্ট করে এই লিংক থেকে দেখে আসবেন: http://hukush-pakush.appspot.com/ । আবার টিউনার পেজেও পাইথনের একটা টিউটোরিয়াল আছে । তার লিংকটা হল : http://www.tunerpage.com/python-programming/ । এটাও দেখে আসুন একবার । এই ২ টা টিউটোরিয়াল আমিও পড়েছি । এখন আমার লেখা আর এই ২ টা লেখার মধ্যে কোনটা আপনাদের ভাল লেগেছে এবং কেন ভাল লেগেছে সেটা একটু বলবেন । দয়া করে সবাই আপনাদের মনের কথাটাই বলবেন ।আমাকে খুশি করার জন্য কোন কথা বলার দরকার নেই । আমার লেখা খারাপ লাগলে কোথায় খুত হয়েছে সেটা একটু ধরিয়ে দেবেন । আপনাদের সুচিন্তিত মতামতই আমাকে আরও ভাল লিখতে সাহায্য করবে । আর এতদিন এই কথাটা বলিনি তার কারণ হুকুশ পাকুশে ও টিউনার পেজে যে বিষয়গুলো লেখা আছে তার সব আামি লিখে কভার করতে পারি নি । আর এই কথা বলছি এই জন্য যে অনেকের সন্দেহ আছে আমি এই টিউটোরিয়াল লিখি কপি পেষ্ট করে । ১ম পর্বে তো একজন বলেই ফেলেছিলেন যে আমি হুকুশ পাকুশ থেকে কপি পেষ্ট করেছি । যাই হোক , সবাই একটু কষ্ট করে কমেন্টে আমার লেখার উইক পয়েন্ট গুলো ধরিয়ে দিলে খুবই খুশি হব । সবার কাছ থেকে সাজেসন্স আশা করছি । সবার কাছে সব জিনিস সমান ভাল লাগে না । একজনের কাছে যা ভাল লাগে অন্য জনের কাছে তা খারাপ লাগতেই পারে ।

বাংলায় পাইথনের টিউটোরিয়াল খুবই কম । আসলে আমার লেখার উদ্দেশ্য হল তাই আগ্রহীরা যাতে বাংলায় পড়ে পাইথনের বেসিকটা শিখতে পারে । আর আমিও আপনাদের মতই পাইথনে বিগিনার । তাতে আমি কতটা সফল হয়েছি নিজেও জানি না । তবে এই টিউটোরিয়াল লেখার কৃতিত্ব আমার একার না । লেখার সময় আমি আপনাদের কাছ থেকে যে ভালবাসা পেয়েছি তার জন্য আমি আপনাদের সবার কাছে চির কৃতজ্ঞ । এতে আপনাদেরও সমান অবদান আছে ।

সবাই ভাল থাকবেন । আর বুঝতে না পারলে বলবেন । আমার সাধ্য মত বোঝানোর চেষ্টা করব । সবাইকে ধন্যবাদ ।

8 COMMENTS

LEAVE A REPLY

Please enter your comment!
Please enter your name here