প্রোগ্রামিং সিরিজ : Object Oriented Programming (OOP)

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

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

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

|  inheritance |  polymorphism |  encapsulation |

OOP -এর বেয়াইন কোলা ব্যাঙ

লিটন ভাইয়ের দোকানে চা খেতে খেতে রাশেদ বলতে শুরু করল, শোন, লেবু দিয়ে বানানো চা-কে বলে লেবু-চা। তুলা দিয়ে বানানো বালিশকে বলে তুলার বালিশ। একইভাবে কোনো একটা প্রোগ্রাম অবজেক্ট দিয়ে বানানো হলে, তাকে বলে অবজেক্টের প্রোগ্রাম। এই অবজেক্টের প্রোগ্রামকে স্টাইল করে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object Oriented Programming) বা সংক্ষেপে OOP বলে।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object Oriented Programming) কথাটার মধ্যে তিনটা শব্দ আছে। প্রথমটা হচ্ছে Object যার মানে হচ্ছে বস্তু বা জিনিস। সেকেন্ড শব্দটা হচ্ছে ওরিয়েন্টেড। এই ওরিয়েন্টেড (Oriented) শব্দটার দিকে খেয়াল করলে বুঝতে পারবি, ওরিয়েন্টেড শব্দটা আসছে ওরিয়েন্ট (Orient) থেকে। আর ওরিয়েন্ট মানে মুখ করে থাকা বা কোনো কিছু ঘিরে থাকা। তার মানে অবজেক্ট ওরিয়েন্টেড বলতে বোঝায় অবজেক্টকে ঘিরে বা অবজেক্ট ব্যবহার করে। আর তাই অবজেক্ট ঘিরে বা প্রচুর অবজেক্ট দিয়ে যে প্রোগ্রামিং করা হয় তাকে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) বলে।

কত রঙ্গ দেখি দুনিয়ায়

দুনিয়াতে কোটি কোটি রকমের জিনিস বা অবজেক্ট আছে। তাই কোটি কোটি রকমের ক্লাস ডিক্লেয়ার করে সেই সব ক্লাস থেকে কোটি কোটি রকমের অবজেক্ট বানানো যায়। সে জন্যই তুই গরু অবজেক্ট বানানোর জন্য গরু ক্লাস ডিক্লেয়ার করছ। আর ছাগল অবজেক্ট বানানোর জন্য ছাগল ক্লাস ডিক্লেয়ার করছ।

একটু চিন্তা করলে বুঝতে পারবি, গরুর যেমন চারটা পা, দুইটা শিং, একটা লেজ আছে। ছাগলেরও চারটা পা, দুইটা শিং, একটা লেজ আছে। তাই বলা যায় গরুর কিছু প্রপার্টির সাথে ছাগলের কিছু প্রপার্টির মিল আছে। যদিও গরুর সব প্রপার্টির সাথে ছাগলের সব প্রপার্টি মিলবে না। তবে কিছু কিছু মিলবে আর কিছু কিছু মিলবে না। অর্থাৎ গরু এবং ছাগলের মধ্যে কিছু কমন প্রপার্টি আর কিছু আনকমন প্রপার্টি আছে।  

একইভাবে চিন্তা করলে বাস, ট্রাক, প্রাইভেট কার, টেম্পো এগুলা সবই আলাদা আলাদা অবজেক্ট। কিন্তু এদের মধ্যেও কিছু কমন প্রপার্টি আছে। যেমন সব কয়টারই চাকা আছে, ইঞ্জিন আছে, ড্রাইভার আছে, দরজা আছে। আবার তাদের নিজস্ব আলাদা আলাদা আনকমন প্রপার্টিও আছে।

অবজেক্টের বংশ, হয়ে যাক ধ্বংস

ধর, তুই একটা প্রোগ্রাম বানাতে চাস। প্রোগ্রামটার কাজ হবে একটা গ্যারেজ ম্যানেজ করা। কবে কয়টা গাড়ি ঠিক করাতে আনে সেগুলার হিসাব রাখা। সেই প্রোগ্রামের জন্য তোকে বাস ক্লাস, ট্রাক ক্লাস, টেম্পো ক্লাস ও প্রাইভেট কার ক্লাস ডিক্লেয়ার করা লাগবে। নরমালি চিন্তা করলে তুই বাস ক্লাস ডিক্লেয়ার করার সময় বাসের সব প্রপার্টি লিখে ফেলবি। একইভাবে ট্রাক ক্লাস ডিক্লেয়ার করার সময় ট্রাকের সব প্রপার্টি লিখে ফেলবি। নিচের মতো করে।

class Bus {

       constructor(driver, wheels, seats){

               this.driver = driver;

               this.wheels = wheels;

               this.seats = seats;

       }

}

class Truck{

       constructor(driver, wheels, capacity){

               this.driver = driver;

               this.wheels = wheels;

               this.capacity = capacity;

      }

}

ওপরের Bus এবং Truck ক্লাসের constructor-এর ভিতরে তাকা। দেখবি দুইটার কিছু কমন প্রপার্টি আছে। অর্থাৎ বাসেরও ড্রাইভার আছে, ট্রাকেরও ড্রাইভার আছে। একইভাবে বাসেরও চাকা আছে, ট্রাকেরও চাকা আছে। তবে বাসের মধ্যে সিট কয়টা সেটা ইম্পরট্যান্ট। সিট হিসেবে লোক ওঠায়। সেই অনুসারে মালিক টাকা পায়। কিন্তু ট্রাকের সিট ইম্পরট্যান্ট না। ট্রাকের ক্ষেত্রে ইম্পরট্যান্ট হচ্ছে কত টন মাল বহন করতে পারে। অর্থাৎ ট্রাকের ক্যাপাসিটি কত টন। 

যেহেতু Bus ও Truck দুইটা ক্লাসেরই ড্রাইভার (driver) এবং চাকা (wheels) আছে, সেহেতু এই দুইটা আলাদা আলাদা না লিখে একটা কমন জায়গায় লিখতে পারস। তাহলে একই জিনিস দুবার লেখা লাগবে না। যেহেতু বাস ও ট্রাক দুইটাই এক ধরনের যানবাহন, তাই তাদের কমন প্রপার্টিগুলা দিয়ে আরেকটা ক্লাস লিখবি। সেই ক্লাসের নাম দিবি যানবাহন (Vehicle)। আর Vehicle ক্লাসটা নিচের মতো করে ডিক্লেয়ার করে দিবি।

class Vehicle{

     constructor(driver, wheels){

           this.driver = driver;

           this.wheels = wheels;

     }

}

ওপরের Vehicle ক্লাস ডিক্লেয়ার করার মানে বাস, ট্রাক, প্রাইভেট কার, টেম্পো সবার কমন প্রপার্টিগুলা ডিক্লেয়ার করার কাজ হয়ে গেছে। এখন তোর কাজ হবে এই কমন ক্লাসের সাথে আনকমন প্রপার্টি যোগ করে Bus ও Truck পুরা ক্লাস বানানো। অর্থাৎ Vehicle ক্লাসের সাথে যার যার নিজস্ব প্রপার্টিগুলা যোগ করা। কোনো কিছুর সাথে নতুন জিনিস যোগ করার মানে সেটাকে বড় করা বা ইংরেজিতে বললে বলতে পারস extend করা। তার মানে বলা যায় Bus ক্লাস Vehicle ক্লাসকে এক্সটেন্ড (extend) করে। এইটাকে ইংরেজিতে লিখলে লিখা যায়— Bus extends Vehicle;

Vehicle ক্লাসের সাথে বাড়তি কিছু প্রপার্টি যোগ করে Bus ক্লাস বানানো হইছে। অর্থাৎ Vehicle থেকে Bus বানানো হইছে। তাই Vehicle ক্লাস ওপরে আর Bus ক্লাস নিচে। ওপরের ক্লাস হওয়ায় তাকে super ক্লাস বলে। এখন Vehicle থেকে Bus ক্লাস বানানোর জন্য নিচের মতো করে লিখতে হবে।

class Bus extends Vehicle {

      constructor(driver, wheels, seats){

              super(driver, wheels);

              this.seats = seats;

     }

}

ওপরের কোড ভালো করে দেখ। প্রথম লাইনের প্রথমেই আছে class, অর্থাৎ তুই একটা ক্লাস ডিক্লেয়ার করতেছস। তারপর আছে Bus extends Vehicle। অর্থাৎ Bus ক্লাসটা বানানো হবে Vehicle ক্লাসের সাথে কিছু এক্সট্রা প্রপার্টি যোগ করে। তারপর constructor ফাংশনের ভিতরে দেখবি super নামে একটা ফাংশনকে কল করা হইছে। একটু আগে বলছিলাম Vehicle হচ্ছে ওপরের ক্লাস। প্রোগ্রামিং করার সময় ওপরের Vehicle ক্লাসকে সুপার (super) দিয়ে বোঝানো হয়। তাই সুপার ফাংশনকে কল করা মানে ওপরের ক্লাসকে কল করা। আর কোনো একটা ক্লাসকে কল করাই হচ্ছে সেই ক্লাসের constructor ফাংশনকে কল করা। সে জন্যই super ফাংশনকে কল করা বলতে যেটা থেকে এক্সটেন্ড করা হইছে সেটার constructor ফাংশনকে কল করা বোঝায়। ওপরে যেহেতু Vehicle ক্লাসকে extend করে Bus ক্লাস বানানো হইছে, সেহেতু Bus-এর constructor ফাংশনের ভিতর থেকে super ফাংশনকে কল করার মানে হবে Vehicle ক্লাসের constructor-কে কল করা।

Vehicle ক্লাসের constructor-এ দুইটা প্যারামিটার আছে। তাই super ফাংশনকে কল করার সময় দুইটা প্যারামিটার দিয়ে দেওয়া হইছে।

এখন আবার Bus ক্লাসের constructor ফাংশনের দিকে তাকা। দেখবি super ফাংশন কল করার নিচে একটা এক্সট্রা প্রপার্টি আছে। যেটা Bus ক্লাসের নিজস্ব প্রপার্টি। সেটা এইখানে সেট করে দেওয়া হেইছে। তাতেই Bus ক্লাসের তিনটা প্রপার্টি হয়ে যাবে। দুইটা আসবে কমন ক্লাস Vehicle থেকে আর একটা নিজস্ব প্রপার্টি আছে। এখন Bus ক্লাস থেকে হানিফ বাস (hanifBus) নামে একটা অবজেক্ট ডিক্লেয়ার কর। সেটাতে ড্রাইভার হানিফ, চাকা ৬টা আর সিট ৫০টা দে। তারপর hanifBus অবজেক্টটা console.log করে দে নিচের মতো করে।

var hanifBus = new Bus(“hanif”, 6, 50);

console.log(hanifBus);

আউটপুট হিসেবে bus {driver: “hanif”, wheels: 6, seats: 50} দেখতে পাবি। একইভাবে নিচের মতো করে Truck ক্লাস ডিক্লেয়ার করে এসআর পরিবহন (srPoribohon) নামে একটা অবজেক্ট ডিক্লেয়ার কর। তারপর সেটাকে console.log করে আউটপুট দেখ।    

class Truck extends Vehicle {

        constructor(driver, wheels, capacity){

                 super(driver, wheels);

                 this.capacity = capacity;

       }

}

var srPoribohon = new Truck(“Shamsur Rahman”, 10, 5);

console.log(srPoribohon);

এই যে Vehicle-কে extends করে Bus বানানো। এইটাকে অন্যভাবে বললে বলা যায়, Vehicle ক্লাস থেকে প্রপার্টিগুলা পেয়ে Bus ক্লাস বানানো হইছে। অনেকটা বাপের কাছ থেকে উত্তরাধিকার সূত্রে জমি পেয়ে বাড়ি বানানোর মতো। তাই একটা কমন ক্লাসকে extend করে আরেকটা ক্লাস বানানোকে প্রোগ্রামিংয়ের ভাষায় বলে inheritance; এই inheritance একটা ইংরেজি শব্দ। যার অর্থ হচ্ছে উত্তরাধিকার। যেমন: বাবা-মায়ের সম্পত্তি সন্তানেরা পায় উত্তরাধিকার সূত্রে। একইভাবে ক্লাস এক্সটেন্ড করলে ওপরের ক্লাসের প্রপার্টিগুলা পায় উত্তরাধিকার (inheritance) সূত্রে।

কাকের গানে ময়ূরী নাচে

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

কাক (Crow) নামে একটা ক্লাস ডিক্লেয়ার কর সেটার constructor ফাংশনে age নামে একটা ইনপুট নে, যেটা দিয়ে কাকের বয়স নামক প্রপার্টি সেট করা হবে। তারপর constructor-এর নিচে আরেকটা ফাংশন লেখ, যেটার নাম sing। যেহেতু একটা class এর ভিতরে sing নামে ফাংশন ডিক্লেয়ার করতেছস তাই ফাংশনের নামের আগে function শব্দটা লিখা লাগবে না। ডাইরেক্ট ফাংশনের নাম দিয়ে শুরু করবি। আর কাক যেহেতু কা কা মধুর সুরে গান গায়, তাই sing ফাংশনের ভিতরে কাকের গান নিচের মতো করে console.log করে দে।

class Crow {

      constructor(age) {

              this.age = age;

     }

     sing(){

              console.log(“Ka Ka Ka”);

     }

}

কোনো একটা ক্লাসের মধ্যে যেসব ফাংশন থাকে, সেগুলাকে সাধরণত মেথড (method) বলা হয়। মেথড একটা ইংরেজি শব্দ যেটার বাংলা অর্থ পদ্ধতি বা উপায়। একটু আগে Crow ক্লাসে যেই sing ফাংশন দেখছিলি, সেটা হচ্ছে কাক এর গান গাওয়ার পদ্ধতি বা উপায়। তাই এইটাকে কাকের গান গাওয়ার method বলতে পারবি।

পানি নিয়ে ভাবনা, আর না আর না

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

পানি দেওয়ার সিস্টেম নিয়ে বেশি চিন্তা করে পানিতে হাবুডুবু খাওয়ার দরকার নাই। তবে একটা শব্দ মনে রাখবি। যেটাকে প্রোগ্রামিংয়ের ভাষায় Polymorphism বলে। এই Polymorphism একটা কঠিন ইংরেজি শব্দ। এই শব্দের প্রথম অংশে আছে poly যার মানে হচ্ছে বহু। আর morphism আরও কঠিন শব্দ যেটার মানে রূপ বা শেপ চেঞ্জ হওয়া। তবে সহজভাবে Polymorphism বলতে একই জিনিসের আলাদা আলাদা রূপ মনে করতে পারস। যেমন একটু আগে পানি চাওয়ার সময় তুই পানি চেয়ে গেছস। এই পানি দেওয়ার কাজটা এক একজন একেক রূপে বা একেক সিস্টেমে করতে পারে। সহজভাবে বললে বলা হয়, একটা কমন কাজ কে কীভাবে করতেছে, সেটা নিয়ে মাথা না ঘামিয়ে কাজটা করতে বলাটাই Polymorphism.

লুকিয়ে রেখো যতনে আদরে

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

এই যে ঘরের ভিতরের জিনিস বাইরের লোক বা বাইরের ভিখারিকে না জানিয়েই কাজটা করা হলো। এইটাকে বলা হয় লুকিয়ে রাখা, আবদ্ধ করে রাখা বা বেষ্টন করে রাখা। এই লুকিয়ে রাখাকে ইংরেজিতে বলা হয় enclose করে রাখা বা encapsulation করে রাখা।

encapsulatation শব্দটা একটা কঠিন ইংরেজি শব্দ। এই শব্দটাকে তিন ভাগে ভাগ করা যায় en-capsul-ation। এই শব্দের তিন পার্টের মধ্যে মাঝখানের পার্টে আছে ক্যাপসুল (capsul); এই ক্যাপসুল কিন্তু ট্যাবলেট-ক্যাপসুলের মতোই। যেগুলা অসুখ হলে রোগীদের খাওয়ানো হয়। তুই খেয়াল করলে দেখবি ক্যাপসুল সবুজ, সাদা, বা লাল রঙের কাভার দিয়ে ঢাকা থাকে। যাতে ক্যাপসুলের ভিতরে কী আছে, সেটা বাইরে থেকে দেখা না যায়।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং করার সময় ক্লাসের গুরুত্বপূর্ণ প্রপার্টি বা মেথডগুলাকে বাইরের কাউকে দেখতে দেওয়া হয় না। অর্থাৎ গুরুত্বপূর্ণ জিনিস লুকিয়ে রাখা হয় যাতে অন্যরা ক্ষতি, নষ্ট বা চেঞ্জ করতে না পারে। এই লুকিয়ে রাখা বা encapsulate করাকে প্রোগ্রামিংয়ের ভাষায় encapsulation বলে।

এ তো কিচ্ছা-কাহিনির উপসংহার। OOP এর তিনটা মূল বিষয় হচ্ছে- inheritance, encapsulation ও polymorphism। বেশির ভাগ সময় এই তিনটি জিনিসকে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বা OOP এর পিলার বা খুঁটি বলা হয়।

তিন স্তর নিরাপত্তাবিশিষ্ট টয়লেট

ক্যান্টনমেন্ট এরিয়ায় গিয়ে দেখস ক্যান্টনমেন্টের বাথরুমের সামনেও তিন স্তরবিশিষ্ট নিরাপত্তাব্যবস্থা। তুই বাথরুম করতে গেছস। বাথরুমের প্রথম গেটে জিজ্ঞেস করছে inherritance কী জিনিস? তোর হাতে সময় নাই, তাড়াতাড়ি উত্তর দিলি, যানবাহন থেকে বাস বানানোই inheritance। পরের গেটে জিজ্ঞেস করছে, polymorphism কী জিনিস? তুই তাড়াতাড়ি উত্তর দিলি, কে কীভাবে পানি দিচ্ছে সেটা না জেনেই পানি চাওয়াটা polymorphism। আর একদম শেষ গেটে জিজ্ঞেস করছে, encapsulation কী জিনিস? তুই একনিশ্বাসে জবাব দিলি, ময়লা নেওয়ার লোককে বাসার ভিতরে কোন জায়গায় কীভাবে ময়লা রাখা হয়, সেটা জানতে না দেওয়াটাই encapsulation.

আগে অবজেক্ট ও ক্লাস সম্পর্কে জানতি। এখন OOP এর মেইন কনসেপ্টগুলা জেনে গেছস। দেখছস, কীভাবে একটু একটু করে তোর নলেজ লেভেল বাড়তেছে? বেশির ভাগ কোম্পানি OOP সিস্টেমে প্রোগ্রামিং করে। তাই এইটা সম্পর্কে আরও কয়েকটা খুচরা-খাচড়া জিনিস জানার জন্য www.habluderadda.com/concepts/oop-এ চলে যা।

নিজে নিজে কর

১০.১: ব্যাঙের কমন বৈশিষ্ট্য নিয়ে ব্যাঙ (Bang) নামে একটা কমন ক্লাস ডিক্লেয়ার কর।

উত্তর :

১০.২ ওপরের Bang ক্লাসকে extend করে কোলা ব্যাঙ (kolaBang) আর কুনো ব্যাঙ (kunoBang) নামে দুইটা ক্লাস ডিক্লেয়ার কর। কোলা ব্যাঙ পানিতে থাকে। মসৃন ত্বক, বর্ষাকালে প্রথম বৃষ্টি হলেই ডাক দেয়। কুনো ব্যাঙ ঘরের কোনায় থাকে। ত্বক খসখসে। (দরকার হলে গুগলে সার্চ দিয়ে কুনো ব্যাঙ আর কোলা ব্যাঙের প্রার্থক্য জেনে নিবি)

উত্তর :

১০.৩ এমন একটা কাজের নাম বল। যেটা যে করতে বলছে, তাকে সেটা কীভাবে করা হইছে বলা হয় না।

উত্তর :

…ওপরের প্রাইভেট প্রশ্নের উত্তর লেখার পরে তোর গোপন কথা ফাঁস হওয়ার রহস্য উদ্‌ঘাটন করতে, ঘরের কথা পরে জানল ক্যামনে জপতে জপতে www.habluderAdda.com/bolod/oop.html-এ চলে যা। সেখানে তোর গোপন কথা ফাঁস হওয়ার রহস্য বের করার জন্য তদন্ত কমিটি গঠন করা হবে।

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


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

১০ মিনিট স্কুলের ব্লগের জন্য কোনো লেখা পাঠাতে চাইলে, সরাসরি তোমার লেখাটি ই-মেইল কর এই ঠিকানায়: write@10minuteschool.com

Author

Jhankar Mahbub

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