Systems Hub
01 / 13
সব একসাথে ধাপে ধাপে
🧱

প্রতিবার কি নতুন করে
সব লিখতে হবে?

না! OOP শিখলে একবার লেখা code বারবার ব্যবহার হয়। রহিম-করিম-জাবের সবার জন্য আলাদা code লিখতে হবে না — একটা blueprint বানাও, সব কাজে লাগাও।

❌ একই code বারবার ✅ একবার লেখো, সবখানে চলে

এই slide-এ: OOP কী, কেন দরকার, ৪টা pillar — Encapsulation, Inheritance, Polymorphism, Abstraction — বাস্তব উদাহরণে।

জিরো থেকে

OOP কী? — বাস্তব জীবনের মত ভাবো

🏭

Class = Blueprint (নকশা)

যেমন একটা বাড়ির নকশা। নকশা নিজে বাড়ি না — কিন্তু নকশা দিয়ে অনেক বাড়ি বানানো যায়।

📝

Class = নকশা

class মানুষ {'{'}
  নাম: string
  বয়স: number
  কথাবলো() {'{'} ... {'}'}
{'}'}
👤

Object = বাস্তব মানুষ

// ৩টা আলাদা মানুষ
const রহিম = new মানুষ()
const করিম = new মানুষ()
const জাবের = new মানুষ()

একটা Class থেকে হাজারো Object বানানো যায়। প্রতিটা Object-এর নিজের data থাকে, কিন্তু behavior (কাজ করার পদ্ধতি) একই।

সমস্যা → সমাধান

OOP ছাড়া কী সমস্যা?

😱 OOP ছাড়া — রহিম, করিম, জাবেরের জন্য আলাদা code

// Procedural style — nightmare!
let রহিম_নাম = "রহিম"; let রহিম_বেতন = 50000;
let করিম_নাম = "করিম"; let করিম_বেতন = 60000;
let জাবের_নাম = "জাবের"; let জাবের_বেতন = 55000;
// ১০০০ কর্মচারী হলে? 😱

✅ OOP সহ — একটা Class, সব কর্মচারী

class কর্মচারী {'{'}
  constructor(নাম, বেতন) {'{'} this.নাম = নাম; this.বেতন = বেতন; {'}'}
  বেতনদেখাও() {'{'} return `${'{'}this.নাম{'}'}: ${'{'}this.বেতন{'}'} টাকা`; {'}'}
{'}'}
// এখন যতজন খুশি
const রহিম = new কর্মচারী("রহিম", 50000);
const করিম = new কর্মচারী("করিম", 60000);
৪টা স্তম্ভ

OOP-এর ৪টা মূল নীতি

🔒

Encapsulation

ভেতরের জিনিস লুকাও, বাইরে শুধু যা দরকার দাও।
যেমন: ATM-এর ভেতরে কীভাবে কাজ করে জানো না, কিন্তু টাকা তুলতে পারো

👨‍👦

Inheritance

Parent class-এর সব গুণ child-এ আসে।
যেমন: মানুষ → Student, Teacher — সবার নাম-বয়স আছে

🎭

Polymorphism

একই নাম, আলাদা কাজ।
যেমন: কুকুর কামড়ায়, বিড়াল আঁচড়ায় — দুজনকেই বলা হয় "আক্রমণ করো"

🎭

Abstraction

জটিলটা লুকাও, সহজটা দেখাও।
যেমন: গাড়ি চালাতে engine কীভাবে কাজ করে জানতে হয় না

প্রথম স্তম্ভ

Encapsulation — ক্যাপসুলের মত

💊 ওষুধের ক্যাপসুল

ভেতরে কী আছে দেখা যায় না। কিন্তু কাজ করে। কেউ সরাসরি ভেতরে হাত দিতে পারে না।

🏦 রহিমের bank account

class BankAccount {'{'}
  #balance = 0; // private — বাইরে থেকে দেখা যাবে না
  টাকাজমাও(amount) {'{'}
    if (amount <= 0) throw "Invalid!";
    this.#balance += amount;
  {'}'}
  balanceদেখো() {'{'} return this.#balance; {'}'} // শুধু দেখতে পারবে
{'}'}
const রহিমAccount = new BankAccount();
রহিমAccount.টাকাজমাও(5000);
// রহিমAccount.#balance = 999999; ← এটা কাজ করবে না! 🔒

Encapsulation মানে: validation, rules সব ভেতরে। বাইরে থেকে ভুল data দেওয়ার সুযোগ নেই।

দ্বিতীয় স্তম্ভ

Inheritance — বাপের গুণ ছেলেতে

👨‍👩‍👧‍👦 স্কুলের উদাহরণ

class মানুষ {'{'} // Parent class
  constructor(নাম) {'{'} this.নাম = নাম; {'}'}
  পরিচয়() {'{'} return `আমি ${'{'}this.নাম{'}'}`; {'}'}
{'}'}
class ছাত্র extends মানুষ {'{'} // মানুষ-এর সব পাবে
  constructor(নাম, রোল) {'{'} super(নাম); this.রোল = রোল; {'}'}
  পড়াশোনা() {'{'} return `${'{'}this.নাম{'}'} পড়ছে`; {'}'}
{'}'}
class শিক্ষক extends মানুষ {'{'}
  পড়াও() {'{'} return `${'{'}this.নাম{'}'} পড়াচ্ছে`; {'}'}
{'}'}
ছাত্র রহিম পাবে
পরিচয়() ✓
পড়াশোনা() ✓
শিক্ষক করিম পাবে
পরিচয়() ✓
পড়াও() ✓

DRY Principle: Don't Repeat Yourself। মানুষ class একবার লেখলাম — ছাত্র-শিক্ষক দুটোই পেল।

তৃতীয় স্তম্ভ

Polymorphism — একই কথা, আলাদা কাজ

🐾 জাবেরের পোষা প্রাণী

class প্রাণী {'{'} শব্দকরো() {'{'} return "..."; {'}'} {'}'}
class কুকুর extends প্রাণী {'{'}
  শব্দকরো() {'{'} return "ঘেউ ঘেউ! 🐕"; {'}'}
{'}'}
class বিড়াল extends প্রাণী {'{'}
  শব্দকরো() {'{'} return "মিঁয়াউ! 🐈"; {'}'}
{'}'}
// একই command — আলাদা ফলাফল
[new কুকুর(), new বিড়াল()].forEach(p => console.log(p.শব্দকরো()));
// "ঘেউ ঘেউ!" তারপর "মিঁয়াউ!"

বাস্তব code-এ উদাহরণ

// Payment — একই interface, আলাদা implementation
class Payment {'{'} pay(amount) {'{'} /* abstract */ {'}'} {'}'}
class বিকাশ extends Payment {'{'} pay(a) {'{'} return `bKash: ${'{'}a{'}'}`; {'}'} {'}'}
class নগদ extends Payment {'{'} pay(a) {'{'} return `Nagad: ${'{'}a{'}'}`; {'}'} {'}'}
// রহিম বিকাশে, করিম নগদে — এক function call
processPayment(payment, 5000) // payment.pay(5000)
চতুর্থ স্তম্ভ

Abstraction — জটিলটা লুকাও

📸

Camera-র Abstraction

তুমি শুধু শাটার চাপো। ভেতরে কী হয়? — ISO, aperture, sensor, image processing... কিছুই জানো না। তবুও ছবি ওঠে।

🚗

গাড়ির Abstraction

হাচান গাড়ি চালায়। Engine cylinder কীভাবে কাজ করে? জানে না। স্টিয়ারিং, গ্যাস, ব্রেক — ব্যস। বাকিটা hidden।

Code-এ Abstraction

// রহিম শুধু এটুকু জানে
sendEmail(to, subject, body);
// ভেতরে আসলে কী হয়? রহিম জানে না, জানার দরকারও নেই:
// SMTP connection → auth → TLS → queue → retry → delivery...
// database save — করিম শুধু এটুকু
prisma.user.create({'{'} data {'}'});
// ভেতরে: SQL generate → connection pool → WAL → commit...
বাস্তব উদাহরণ

সব একসাথে — E-commerce System

class User {'{'} // Abstraction: ভেতরের জটিলতা লুকানো
  #password; // Encapsulation: password private
  constructor(name, email) {'{'} this.name=name; this.email=email; {'}'}
  pay(amount) {'{'} return `${'{'}this.name{'}'} paid ${'{'}amount{'}'}`; {'}'} // Polymorphism
{'}'}
class PremiumUser extends User {'{'} // Inheritance
  pay(amount) {'{'} return `${'{'}this.name{'}'} paid ${'{'}amount*0.9{'}'} (10% off!)`; {'}'}
{'}'}
রহিম = new User()
normal user
pays full price
করিম = new PremiumUser()
premium user
10% discount!
তুলনা

ছাড়া বনাম সহ

❌ OOP ছাড়া

  • একই code বারবার লেখা
  • একটা change করলে ১০০ জায়গায় করতে হয়
  • code বড় হলে বোঝা যায় না
  • bug fix করতে nightmare
  • team work করা কঠিন

✅ OOP সহ

  • একবার লেখো, সবখানে চলে
  • একটা class fix = সব ঠিক
  • readable, organized code
  • Test করা সহজ
  • team কে আলাদা আলাদা কাজ দেওয়া যায়
10x
কম code লিখতে হয়
React, NestJS
সব OOP ব্যবহার করে
সারসংক্ষেপ

OOP — ৪ লাইনে

🔒
Encapsulation — ক্যাপসুলে ঢাকো
রহিমের password বাইরে থেকে দেখা যাবে না
👨‍👦
Inheritance — বাপের থেকে পাও
Student, Teacher — দুজনেই মানুষের গুণ পায়
🎭
Polymorphism — একই নাম, আলাদা কাজ
করিম বিকাশে, জাবের নগদে — pay() একই
🎭
Abstraction — জটিলটা লুকাও
হাচান গাড়ি চালায়, engine বোঝার দরকার নেই
🚀

এখন তুমি শুরু করো

  • একটা simple class লেখো — যেকোনো বাস্তব জিনিস নিয়ে
  • extends দিয়ে দুটো child class তৈরি করো
  • private field দিয়ে একটা Encapsulation করো
  • NestJS বা TypeScript-এ OOP ব্যবহার দেখো

OOP হলো programming-এর ভাষা — বাস্তব জগতকে code-এ রূপান্তরের কৌশল। শিখলে সব বড় framework (React, Angular, NestJS, Spring) সহজ হয়ে যাবে।