প্রোগ্রামিং সিরিজঃ Class থেকে object

পুরোটা পড়ার সময় নেই? ব্লগটি একবার শুনে নাও।

এই লেখাটি নেয়া হয়েছে “আদর্শ” থেকে প্রকাশিত এবং ঝংকার মাহবুব লিখিত ২য় বই “প্রোগ্রামিংয়ের বলদ টু বস” বই থেকে।

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

|  Class |  Class এর প্রয়োজনীয়তা | Class থেকে Object |

Class -এর নাকে উঠছে ফোঁড়া

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

রাস্তার পাশে যে ভাপা পিঠা বানায়, সে চিতই পিঠাও বানায়। আর চিতই পিঠা বানানোর সিস্টেম খেয়াল করলে দেখবি, একটা মাটির কড়াইয়ে অনেকগুলা ছোট ছোট খোপ বা গর্ত থাকে। এই কড়াইকে আঞ্চলিক ভাষায় ‘খোলা’ বা ছাঁচ বলে। সেটার মধ্যে চিতই পিঠার তরল মিশ্রণ ঢেলে দিলে কিছুক্ষণ পরে চিতই পিঠা হয়ে যায়। সব চিতই পিঠা দেখতেও একই রকমের হয়।

শুধু একই টাইপের পিঠা না। বরং একই জাতের পাখি, একই টাইপের যানবাহন, একই পেশার মানুষ দেখতে মোটামুটি একই রকমের হয়। কারণ তাদের একই রকমের প্রপার্টি বা বৈশিষ্ট্য থাকে। এই একই রকমের প্রপার্টিওয়ালা জিনিসগুলাকে একসাথে একই জাতের বা একই গোত্রের বা একই শ্রেণির বলতে পারস। এই শ্রেণি একটা বাংলা শব্দ। শ্রেণিকে ইংরেজিতে ক্লাস (class) বলে।

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

একইভাবে প্রোগ্রামিং করার সময় একই টাইপের একাধিক অবজেক্ট বানাতে গেলে একটা ক্লাস ডিক্লেয়ার করা হয়। তারপর সেই ক্লাস থেকে অবজেক্ট বানানো হয়। যাতে সেই ক্লাস থেকে বানানো সব অবজেক্টের একই রকমের প্রপার্টি থাকে। যদিও প্রপার্টিগুলার মান ভিন্ন ভিন্ন হতে পারে। তারপরও তাদের একই নামের প্রপার্টি থাকে। তখন অবজেক্টগুলা একসাথে নিয়ে কাজ করতে, হিসেবে রাখতে সুবিধা হয়।

প্রোগ্রামিং করার সময় ক্লাস লিখা খুবই সহজ। জাস্ট class শব্দটা লিখবি তারপর ক্লাসের একটা নাম দিয়ে দুইটা সেকেন্ড ব্র্যাকেট দিবি। নিচের মতো করে। আর তুই যেহেতু ভাপা পিঠা বানাচ্ছস, তাই এই ক্লাসের নাম দিবি— ভাপা (Vapa)

class Vapa { };

এভাবে দুইটা সেকেন্ড ব্র্যাকেট দিলে ক্লাসের কোনো প্রপার্টি থাকবে না। তাই এইটা থেকে কোনো ক্লাস তৈরি করলে সেটারও কোনো প্রপার্টি থাকবে না। তবে ক্লাস থেকে অবজেক্ট বানানোর সিস্টেমটা আগে দেখে নে। জাস্ট তিনটা স্টেপ।

১. প্রথমে var লিখে অবজেক্টের একটা নাম দিবি। যেহেতু পিঠা বানাতে চাস। তাই এর নাম দিলি আমার পিঠা বা ইংরেজিতে myPitha । তারপর সমান চিহ্ন দিবি।

২. তোর উদ্দেশ্য হচ্ছে Vapa ক্লাস থেকে নতুন একটা অবজেক্ট বানানো। তাই ক্লাসের নামের আগে new লিখবি।  new শব্দটার বাংলা মানে হচ্ছে নতুন। তার মানে তুই নতুন একটা অবজেক্ট বানাতে চাচ্ছস। সে জন্যই নতুন বা new শব্দটা লিখছস।

৩. new লিখার পরে যে ক্লাস থেকে অবজেক্ট বানাতে চাস, সেটার নাম লিখবি। তুই যেহেতু Vapa ক্লাস থেকে পিঠা বানাতে চাস তাই Vapa লিখবি। এবং তারপর দুইটা প্রথম ব্র্যাকেট দিয়ে দিবি। ব্যস, কাজ শেষ।  

var myPitha = new Vapa();

এখন myPitha অবজেক্টটা আউটপুট হিসেবে দেখতে চাইলে সেটাকে নিচের মতো করে console.log করে দে। তাহলে আউটপুট হিসেবে { } দেখতে পাবি। কারণ তোর Vapa ক্লাসের কোনো প্রপার্টি ছিল না। তাই Vapa ক্লাস থেকে বানানো myPitha অবজেক্টেরও কোনো প্রপার্টি বা বৈশিষ্ট্য থাকবে না।

console.log(myPitha);

একটা জিনিস খেয়াল করবি। অবজেক্ট বা ভেরিয়েবলের নাম লিখার সময় ছোট হাতের বর্ণ দিয়ে লিখতে হয়। যেমন : myPitha লিখতে গিয়ে m ছোট হাতের লিখছস। তবে কোনো ক্লাসের নাম লিখার সময় প্রথম বর্ণটা সাধারণত বড় হাতের লিখে। যাতে নাম দেখেই বোঝা যায় কোনটা ক্লাস। যদিও ক্লাসের নাম বড় হাতের লিখতেই হবে এমন কোনো আইন নাই, তারপরও লিখলে ভালো। সে জন্যই ভাপা (Vapa) ক্লাস লিখার সময় V বড় হাতের লিখছস।

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

স্পেশাল ফাংশন হওয়ায় constructor ফাংশনকে class-এর নাম লিখার পরে যে দুইটা সেকেন্ড ব্র্যাকেট দিছস, সেই দুইটার ভিতরে লিখতে হবে। এই ফাংশনের নাম সব সময়ই constructor লিখতে হবে। এবং এইটা ফাংশন হলেও তার নামের আগে function শব্দটা লেখা লাগবে না। কারণ ক্লাসের ভিতরে কোনো ফাংশন লিখলে ফাংশনের নামের আগে function শব্দটা লিখতে হয় না। তবে function শব্দটা না লিখলেও ফাংশনের নামের পরে দুইটা প্রথম ব্র্যাকেট দিয়ে দুইটা সেকেন্ড ব্র্যাকেট দিতে হবে।

class Vapa {

      constructor () {   

      }

}

তবে Vapa ক্লাসের ভিতরে constructor ফাংশন যেহেতু লিখছস, সেহেতু এটা দিয়ে কিছু কাজ করায় নিতে হবে। সে জন্যই কনস্ট্রাক্টরের ভিতরে কিছু প্রপার্টি সেট করে নিতে হবে। ধর, তোর ভাপা পিঠা ক্লাসে দুইটা প্রপার্টি থাকবে। প্রথম প্রপার্টি হচ্ছে নারকেল (narikel), যেটা দিয়ে বোঝানো হবে পিঠাতে কতটুকু নারকেল দেবে। অর্থাৎ নারকেলের পরিমাণ কত। আপাতত নারকেলের পরিমাণ গ্রাম দিয়ে ধরার চেষ্টা কর। তার মানে নারকেল প্রপার্টির মান 10 হলে পিঠাতে 10 গ্রাম নারকেল দেবে। আর 20 হলে পিঠাতে 20 গ্রাম নারকেল দেবে।

পিঠার দ্বিতীয় প্রপার্টি হচ্ছে গুড় টুকরা। অর্থাৎ ভাপা পিঠার মধ্যে কয় টুকরা ছোট ছোট গুড় দেবে। যেসব গুড়ের টুকরা গলে লাল হয়ে যাবে। এই গুড় (gur) কয় টুকরা (tukra) দেওয়া হবে সেই প্রপার্টিটাকে ইংরেজিতে নাম দিবি গুড় টুকরা (gurTukra); এই gurTukra-এর মান 4 হলে পিঠাতে ছোট ছোট চার টুকরা গুড় দেওয়া হবে।

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

কনস্ট্রাক্টর ফাংশনের ভিতরে প্রপার্টিগুলার নাম লেখার মধ্যে একখান কথা আছে। সেটা হচ্ছে কোনো একটা ক্লাস থেকে যে যে অবজেক্ট বানানো হবে। সে অবজেক্টগুলার যে যে প্রপার্টি থাকবে, সেগুলা কনস্ট্রাক্টর ফাংশনের ভিতরে this লিখে তারপর ডট (.) চিহ্ন দিয়ে লিখতে হবে। this একটা ইংরেজি শব্দ। এই শব্দের মানে ‘এই’। এই বলতে যখন যেই অবজেক্ট বানাচ্ছস, সেই অবজেক্টের প্রপার্টিকে বোঝানো হয়।

class Vapa {

       constructor (narikel, gurTukra) {

             this.narikel = narikel;

             this.gurTukra = gurTukra;

      }

}

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

এখন Vapa ক্লাস থেকে অবজেক্ট তৈরি করতে চাইলে আগের মতো var লিখে অবজেক্টের নাম লিখবি। এরপর সমান চিহ্ন দিয়ে new লিখবি। তারপর Vapa লিখে যে দুইটা প্রথম ব্র্যাকেট দিবি সেটার ভিতরে দুইটা মান দিতে হবে। কারণ Vapa ক্লাসের constructor ফাংশের দুইটা ইনপুট প্যারামিটার আছে। এখন তুই 10 গ্রাম নারকেল ও ছোট ছোট 4 টুকরা গুড় দিয়ে পিঠা খাইতে চাইলে তোর অবজেক্টের প্রথম প্যারামিটারের মান হবে 10, আর সেকেন্ড প্যারামিটারের মান হবে 4, তারপর নিচের মতো করে Vapa ক্লাস থেকে পিঠা অবজেক্ট বানিয়ে ফেল।

var myPitha = new Vapa(10, 4);

আর কোনো ডায়াবেটিসওয়ালা আঙ্কেল এসে 20 গ্রাম নারকেল দিয়ে, গুড় ছাড়া পিঠা খাইতে চাইলে। সে নিচের মতো করে তার পিঠা (hisPitha) অবজেক্ট বানাবে

var hisPitha = new Vapa(20, 0);

প্রফেশনাল প্রোগ্রামিং করার দুইটা বেসিক কনসেপ্ট- অবজেক্ট এবং ক্লাস শিখে ফেলছস। নিজেকে প্রোগ্রামার বানানোর জন্য আরো কয়েকধাপ এগিয়ে গেছস। ভবিষ্যতে কোন একটা নির্দিষ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজে ক্লাস নিয়ে খুঁটিনাটি জানার দরকার হলে class in java বা class in python এর মতো লিখে গুগলে সার্চ দিবি।

নিজে নিজে কর

৫.১: তুই ঠিক করলি ভ্যালেন্টাইনস ডে-তে ফুল বিক্রি করবি। সেখানে নানা রকমের ফুল থাকবে। তাই ফুল (Flower) নামে একটা ক্লাস ডিক্লেয়ার কর।  

উত্তর:

৫.২ : ওপরের Flower ক্লাস দিয়ে ভালোবাসার ফুল (loveFlower) নামে একটা অবজেক্ট বানা। আবার ধর, কেউ একজনের ভালোবাসা একসেপ্ট করতে চায় না। রিজেক্ট করতে চায়। তবে মনে কষ্ট দিতে চায় না। তাই যাকে রিজেক্ট করবে তাকে ভাই হিসেবে ফুল দিতে চায়। এখন সেই ভাইয়ের জন্য তোর Flower ক্লাস দিয়ে ভাই ফুল (vaiFool) নামে আরেকটা অবজেক্ট বানা।

উত্তর:

… ওপরের প্রেম ভালোবাসার প্রশ্ন দেখে আবেগে তোর কান্না চলে আসলে চোখ মুছতে মুছতে www.habluderAdda.com/bolod/class.html-এ চলে যা। সেখানে গিয়ে রোমান্টিক আমেজে গান গাইবি- ফুল দিয়ো, কলি দিয়ো, কাঁটা দিয়ো না। প্রপার্টি দিয়ো, ক্লাস দিয়ো, ডাইরেক্ট অবজেক্ট দিয়ো না।

ঝংকার মাহবুবের অন্যান্য লেখা সম্পর্কে জানতে চলে যাও এই লিংকে!
ঝংকার মাহবুবকে ফলো করতে পারো ফেসবুক পেইজেও!


১০ মিনিট স্কুলের লাইভ এডমিশন কোচিং ক্লাসগুলো অনুসরণ করতে সরাসরি চলে যেতে পারো এই লিঙ্কে: www.10minuteschool.com/admissions/live/

১০ মিনিট স্কুলের ব্লগের জন্য কোনো লেখা পাঠাতে চাইলে, সরাসরি তোমার লেখাটি ই-মেইল কর এই ঠিকানায়: [email protected]

Author

Jhankar Mahbub

খুব অল্প বয়সেই লেখালেখি শুরু করেন ঝংকার মাহবুব। শুরুটা ছিল বাসার দেয়ালে, বোনদের বইয়ের পাতাতে, কিংবা ঘুমন্ত অবস্থায় বাবার শরীরে আঁকাআঁকি করে। তারপর থেকে তিন দশক ধরে উনার লেখালেখির পুরোটাই গেছে পরীক্ষার খাতায়, পাশ নম্বরের আশায়।
Jhankar Mahbub
এই লেখকের অন্যান্য লেখাগুলো পড়তে এখানে ক্লিক করুন
What are you thinking?