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

হুট করে বুঝতে পারলে কোড এমন এক জট পাকিয়েছে, যেখানে একটা ফাংশনে হাত দিলে অন্য ৩টা ফিচার ভেঙে যায়। ক্লাসের assignment এর deadline আছে, আর তুমি debug করছো ২ দিন ধরে! তখন মনে মনে বললে “আরে কেউ কি এমন কিছু দেয় না যেটা দিয়ে এই জিনিসগুলা সামলাইতে পারি?”
Exactly! এখানেই আসে OOP বা Object-Oriented Programming।
এটা এমন একটা পদ্ধতি, যেটা শুধু কোড লেখার নিয়ম না, বরং বড় প্রজেক্ট কীভাবে manage করা যায়, রিয়েল লাইফ সমস্যা কীভাবে model করা যায়, সেই দিকেও ফোকাস করে।
এই ব্লগে, আমরা গল্প করে করে বুঝে নিবো:
OOP মানে আসলে কী?
আমাদের কেন OOP শিখতে হবে?
রিয়েল লাইফে এটা কতটা দরকারি? OOP শিখলে জীবনে, ক্যারিয়ারে, ফ্রিল্যান্সিং এ কী কী সুবিধা পাওয়া যায় ?
চল, তাহলে শুরু করা যাক…
একটা ছোট্ট প্রশ্ন: যদি তুমি একটা শহর চালাতে চাও, তাহলে কী একা করতে পারবা?
একটা শহর চালানোর জন্য লাগে পুলিশ, হাসপাতাল, ইলেকট্রিসিটি, ওয়াটার, ট্রান্সপোর্ট, স্কুল, রেস্টুরেন্ট, আরও কত কিছু!
এই প্রতিটা জায়গায় আলাদা লোক কাজ করে, আলাদা দায়িত্ব থাকে, আর একটা নির্দিষ্ট নিয়মে কাজ করে বলেই তো শহরটা ঠিকভাবে চলে।
এখন ধরো, প্রোগ্রামিং-এ আমরা একটা বড় সফটওয়্যার বানাতে চাই। তুমি কি সব ফাংশন একসাথে একটা জায়গায় লিখে ফেলবা?
যদি করো, তাহলে সেই প্রজেক্ট আর maintainable থাকে না। নতুন কেউ কোড বুঝতে পারে না।
এই সমস্যার সমাধান দিতেই এসেছে OOP। যেখানে আমরা প্রজেক্টকে ভাগ করি objects এ। প্রতিটা object এর আছে কিছু properties (মানে গুণাবলি), আর কিছু methods (মানে কাজ)।
মনে করো, তুমি একটা ছোট্ট Burger Shop চালাও। দোকানের নাম ধরো, “CodeBurger”।
তুমি একা-একা প্রথমে customer এর order নিচ্ছো, নিজে কিচেনে গিয়ে বানাচ্ছো, তারপর serve করছো। প্রথমদিকে ঠিকঠাক চলছিলো, কারণ অর্ডার ছিলো কম।
কিন্তু হুট করে একদিন TikTok-এ তোমার দোকানের viral video ছড়িয়ে পড়লো। এখন প্রতিদিন ১০০+ অর্ডার!
তুমি একা সব করতে গিয়ে গলা শুকিয়ে ফেললে। হাত-পা কাঁপছে, মাথা ঝিমঝিম করছে। তখন বুঝলে এইভাবে আর চলবে না। তোমাকে একটা system বানাতে হবে।
তুমি একটা team গঠন করলে:
- একজন order নিবে → Order Manager
- একজন বানাবে → Chef
- একজন serve করবে → Waiter
এখন সবাই যার যার কাজ করছে। একসাথে efficient হয়ে উঠলো তোমার shop।
এই পুরো system টাই হলো একটা object model:
Burger = Object
- Ingredients = Properties
- cook(), serve() = Methods
Burger একটা class. তুমি চাইলে এর থেকে subclass বানাতে পারো:
এই সমস্যার সমাধান দিতেই এসেছে OOP। যেখানে আমরা প্রজেক্টকে ভাগ করি objects এ। প্রতিটা object এর আছে কিছু properties (মানে গুণাবলি), আর কিছু methods (মানে কাজ)।
মনে করো, তুমি একটা ছোট্ট Burger Shop চালাও। দোকানের নাম ধরো, “CodeBurger”।
তুমি একা-একা প্রথমে customer এর order নিচ্ছো, নিজে কিচেনে গিয়ে বানাচ্ছো, তারপর serve করছো। প্রথমদিকে ঠিকঠাক চলছিলো, কারণ অর্ডার ছিলো কম।
কিন্তু হুট করে একদিন TikTok-এ তোমার দোকানের viral video ছড়িয়ে পড়লো। এখন প্রতিদিন ১০০+ অর্ডার!
তুমি একা সব করতে গিয়ে গলা শুকিয়ে ফেললে। হাত-পা কাঁপছে, মাথা ঝিমঝিম করছে। তখন বুঝলে এইভাবে আর চলবে না। তোমাকে একটা system বানাতে হবে।
তুমি একটা team গঠন করলে:
একজন order নিবে → Order Manager
একজন বানাবে → Chef
একজন serve করবে → Waiter
এখন সবাই যার যার কাজ করছে। একসাথে efficient হয়ে উঠলো তোমার shop।
এই পুরো system টাই হলো একটা object model:
Burger = Object
Ingredients = Properties
cook(), serve() = Methods
Burger একটা class. তুমি চাইলে এর থেকে subclass বানাতে পারো:
তুমি এখন বারবার Burger বানাতে পারো, আলাদা ধরনের, কিন্তু একই structure মেনে। এই হলো OOP এর সৌন্দর্য।
চলো পয়েন্ট ধরে ধরে বলি কেন OOP শিখা উচিত:
- বড় প্রজেক্ট মেইন্টেইন করতে গেলে OOP অপরিহার্য:
যখন তুমি ছোট কোড লেখো, তখন হয়তো OOP-এর প্রয়োজন অনুভব করো না। কিন্তু যতই প্রজেক্ট বড় হয়, ততই কোড জটিল ও বিশৃঙ্খল হয়ে উঠে। OOP এই জটিলতাকে নিয়মিত ও ব্যবস্থাপযোগ্য করে তোলে। Class ও Object ভিত্তিক structure ব্যবহার করে তুমি বড় প্রজেক্টকে ছোট, manageable অংশে ভাগ করে পরিষ্কারভাবে সাজাতে পারবে। এতে করে ডেভেলপমেন্ট, debugging, এবং scaling অনেক সহজ হয়।
- Data এবং Function একসাথে সংরক্ষণ করার সুবিধা:
OOP-এর সবচেয়ে বড় বৈশিষ্ট্য হলো: Data (attribute/properties) এবং Function (method) একত্রে object এর ভিতরে থাকে। এর ফলে সে data কে পরিবর্তন বা ব্যবহার করার জন্য দরকারি সব ফাংশন ঐ একই জায়গায় থাকে। এতে করে কোড পড়া, বোঝা এবং ব্যবহার করা অনেক সহজ হয়, পাশাপাশি logically grouping করা যায়।
উদাহরণ:
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
greet() {
console.log(`Hello, ${this.name}`);
}
}
এখানে name & email হলো data আর greet() হলো function, যেটা ঐ data নিয়েই কাজ করছে।
- Code Reusability (পুনঃব্যবহারযোগ্য কোড) Inheritance এর মাধ্যমে
Inheritance-এর সাহায্যে একটা class অন্য class-এর বৈশিষ্ট্য ও কাজ (method) গুলো গ্রহণ করতে পারে। এতে বারবার একই কোড লেখার দরকার পড়ে না। মূল class কে base/class হিসেবে রেখে subclass গুলো তার behavior extend করতে পারে।
উদাহরণ:
class Animal {
speak() {
console.log("Animal speaking...");
}
}
class Dog extends Animal {
bark() {
console.log("Dog barking...");
}
}
এতে Animal এর speak() method, Dog class এর মধ্যেও কাজ করবে, আলাদা করে আবার লিখতে হবে না।
- Data Security ও Control Encapsulation ব্যবহার করে
Encapsulation হচ্ছে একটা object এর ভিতরের data কে বাইরের world থেকে লুকিয়ে রাখা, যাতে বাইরের কেউ সরাসরি ঐ data access বা modify করতে না পারে। এর ফলে কোডের উপর নিয়ন্ত্রণ বাড়ে এবং security নিশ্চিত হয়।
উদাহরণ:
class BankAccount {
private double balance;
public BankAccount(double balance) {
this.balance = balance;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) balance += amount;
}
}
এখানে private কিওয়ার্ড দ্বারা balance কে লুকানো হয়েছে।
- Flexible Behavior Polymorphism এর মাধ্যমে:
Polymorphism হলো একই interface বা method-এর ভিন্ন ভিন্ন behavior। অর্থাৎ, এক method বিভিন্ন class-এ নিজের মতো করে behave করতে পারে। এতে কোড general রাখা যায় কিন্তু context এ ভিন্ন output পাওয়া যায়।
উদাহরণ:
// Base class
class Bird {
sound() {
console.log("Bird makes a sound");
}
}
// Subclass 1
class Parrot extends Bird {
sound() {
console.log("Parrot says: Hello!");
}
}
// Subclass 2
class Crow extends Bird {
sound() {
console.log("Crow says: Caw Caw!");
}
}
// Subclass 3
class Duck extends Bird {
sound() {
console.log("Duck says: Quack Quack!");
}
}
// Function demonstrating polymorphism
function makeSound(bird) {
bird.sound(); // Method হলো একই, কিন্তু behavior context অনুযায়ী পরিবর্তন হয়
}
// Create objects
const myParrot = new Parrot();
const myCrow = new Crow();
const myDuck = new Duck();
// Call the same method on different objects
makeSound(myParrot); // Output: Parrot says: Hello!
makeSound(myCrow); // Output: Crow says: Caw Caw!
makeSound(myDuck); // Output: Duck says: Quack Quack!
ব্যাখ্যা:
- এখানে আমরা Bird নামক একটি base class তৈরি করেছি যার sound() নামক একটি method আছে।
- এরপর আমরা Parrot, Crow, এবং Duck নামে তিনটি subclass তৈরি করেছি যেগুলো Bird class কে extend করেছে।
- প্রতিটি subclass তাদের নিজস্ব ভাবে sound() method-টি override করছে।
- makeSound() নামে একটি function ব্যবহার করে আমরা Polymorphism ব্যবহার করছি যেখানে একই method ভিন্ন object অনুযায়ী ভিন্ন output দিচ্ছে।
এটাই মূলত Polymorphism একই নামের method বিভিন্ন object অনুযায়ী ভিন্নভাবে behave করে।

কোড Maintain করা সহজ হয়:
OOP ব্যবহার করলে কোড well-organized থাকে। একেকটি class একেক কাজের জন্য দায়ী থাকে। ফলে কোনো bug থাকলে সেটা কোন class-এ আছে বোঝা সহজ হয়। এমনকি যখন নতুন কোনো developer টিমে আসে, সে খুব সহজেই বুঝতে পারে কোন class কিসের জন্য, কোন module কী করছে।
বাস্তব জীবনের জিনিসগুলো সহজে Model করা যায়:
OOP বাস্তব জীবনের জিনিসগুলোকে represent করতে পারে খুব সুন্দরভাবে। যেমনঃ মানুষ, গাড়ি, স্কুল, বই এই সব কিছুই OOP-এর object হিসেবে উপস্থাপন করা যায়। এতে বুঝতে সুবিধা হয়, এবং problem-solving ও বেশি সহজ হয়।
উদাহরণ: একজন Student এর নামে class বানানো যায় Student, যার মধ্যে থাকবে নাম, রোল নম্বর, grade ইত্যাদি, এবং methods থাকবে পড়া, পরীক্ষা দেওয়া ইত্যাদি।
Web Developer রিপন মিয়া:
রিপন মিয়া একটা mid-level web developer। সে আগে ফাংশন দিয়ে ছোট ছোট প্রজেক্ট বানাতো। যখন একটা বড় inventory management সিস্টেম করতে হয়, তখন সে পড়লো মহাবিপদে।
কোথায় কোন ফাংশন আছে, কে কার সাথে কানেক্টেড সব গুলিয়ে ফেলে। তখন এক সিনিয়র তাকে বলল:
“OOP শেখো, জীবন সুন্দর হবে।”
রিপন মিয়া ধীরে ধীরে OOP শিখলো। class বানালো, subclass বানালো, method override করলো, private property ব্যবহার করলো। আজ সে একটা বড় টিমের লিড। সে বলে:
“OOP না জানলে, আমি এখনও ওই inventory software এর debug নিয়েই পড়ে থাকতাম। হাহা এটাই বাস্তব”
OOP মানে শুধু কোড না, mindset
OOP আসলে একটা design pattern। এটা তোমাকে শেখায় কীভাবে software টা structure করবা, কীভাবে দায়িত্ব ভাগ করবা, আর কীভাবে future change handle করবে।