Reactive Accelerator
typeScript
Introduction of Class in TypeScript

টাইপস্ক্রিপ্ট ক্লাস

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


১. ক্লাস ডিফিনিশন (Class Definitions)

ব্যাখ্যা: ক্লাস হচ্ছে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি মূল ভিত্তি, যার মাধ্যমে এমন অবজেক্ট তৈরি করা যায় যেগুলোর মধ্যে তথ্য (properties) এবং আচরণ (methods) থাকে।

কোথায় ব্যবহৃত হয়: যখন আমরা কোনো কিছুর ব্লুপ্রিন্ট তৈরি করতে চাই যেমনঃ ইউজার, প্রোডাক্ট, গাড়ি ইত্যাদি।

class User {
  name: string;
  age: number;
 
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
 
  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

২. কনস্ট্রাক্টর (Constructors)

ব্যাখ্যা: কনস্ট্রাক্টর একটি বিশেষ মেথড যেটি ক্লাস থেকে অবজেক্ট তৈরি হওয়ার সময় অটোমেটিক কল হয়।

কোথায় ব্যবহৃত হয়: অবজেক্ট তৈরির সময় প্রাথমিক মান সেট করার জন্য।

class Product {
  constructor(public name: string, public price: number) {}
}
 
const pen = new Product("Pen", 10);

৩. অ্যাক্সেস মোডিফায়ার (Access Modifiers)

ব্যাখ্যা: অ্যাক্সেস মোডিফায়ার দ্বারা কোনো প্রপার্টি বা মেথড কোথা থেকে অ্যাক্সেসযোগ্য তা নির্ধারণ করা হয়।

  • public: যেকোনো জায়গা থেকে ব্যবহারযোগ্য (ডিফল্ট)
  • private: শুধুমাত্র ক্লাসের ভেতরে ব্যবহারযোগ্য
  • protected: ক্লাস এবং তার সাবক্লাসের মধ্যে ব্যবহারযোগ্য

কোথায় ব্যবহৃত হয়: ডেটা এনক্যাপসুলেশন এবং নিরাপত্তা বজায় রাখতে।

class BankAccount {
  private balance: number;
 
  constructor(initialBalance: number) {
    this.balance = initialBalance;
  }
 
  public deposit(amount: number) {
    this.balance += amount;
  }
 
  public getBalance() {
    return this.balance;
  }
}

৪. রিড-অনলি প্রপার্টি (Readonly Properties)

ব্যাখ্যা: রিড-অনলি প্রপার্টি একবার সেট করার পর আর পরিবর্তন করা যায় না।

কোথায় ব্যবহৃত হয়: যখন কোন প্রপার্টি অপরিবর্তনীয় (immutable) রাখা প্রয়োজন।

class Book {
  readonly isbn: string;
  constructor(isbn: string) {
    this.isbn = isbn;
  }
}

৫. অপশনাল প্রপার্টি (Optional Properties)

ব্যাখ্যা: অপশনাল প্রপার্টি এমন একটি প্রপার্টি যেটা দেওয়া না দিলেও চলে (? দিয়ে চিহ্নিত)।

কোথায় ব্যবহৃত হয়: যখন কোনো ডেটা ঐচ্ছিক হতে পারে।

class User {
  constructor(
    public name: string,
    public age?: number // ঐচ্ছিক
  ) {}
}
 
const u1 = new User("John");

৬. প্যারামিটার প্রপার্টি (Parameter Properties)

ব্যাখ্যা: কনস্ট্রাক্টরের মধ্যে যে প্যারামিটারগুলোতে public/private/protected ব্যবহৃত হয়, সেগুলো অটোমেটিক ক্লাসের প্রপার্টি হয়ে যায়।

কোথায় ব্যবহৃত হয়: কোড সংক্ষিপ্ত ও পরিচ্ছন্ন রাখতে।

class Car {
  constructor(public brand: string, public model: string) {}
}

৭. গেটার এবং সেটার (Getter and Setter)

ব্যাখ্যা: কোনো প্রপার্টির মান পড়া বা সেট করার সময় গেটার ও সেটার মেথড ব্যবহার করা হয়।

কোথায় ব্যবহৃত হয়: ডেটা এক্সেসের উপরে নিয়ন্ত্রণ রাখার জন্য।

class Person {
  private _age: number = 0;
 
  get age() {
    return this._age;
  }
 
  set age(value: number) {
    if (value >= 0) {
      this._age = value;
    }
  }
}

৮. স্ট্যাটিক সদস্য (Static Members)

ব্যাখ্যা: স্ট্যাটিক প্রপার্টি বা মেথড ক্লাসে থাকে এবং অবজেক্ট ছাড়াও ক্লাস থেকেই অ্যাক্সেস করা যায়।

কোথায় ব্যবহৃত হয়: শেয়ার করা ডেটা বা ইউটিলিটি মেথড সংরক্ষণ করতে।

class MathUtil {
  static PI = 3.14;
 
  static square(n: number) {
    return n * n;
  }
}
 
console.log(MathUtil.PI);
console.log(MathUtil.square(5));

৯. অ্যাবস্ট্রাক্ট ক্লাস এবং মেথড (Abstract Classes and Methods)

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

কোথায় ব্যবহৃত হয়: এমন বেস ক্লাস বানাতে যেখানে কমন স্ট্রাকচার থাকবে কিন্তু ইমপ্লিমেন্টেশন আলাদা হবে।

abstract class Animal {
  constructor(public name: string) {}
  abstract makeSound(): void;
}
 
class Dog extends Animal {
  makeSound() {
    console.log("ঘেউ ঘেউ!");
  }
}
 
const d = new Dog("Tommy");
d.makeSound();

১০. ইনহেরিটেন্স (Inheritance)

ব্যাখ্যা: ইনহেরিটেন্সের মাধ্যমে এক ক্লাস আরেক ক্লাসের প্রপার্টি ও মেথড নিজের মধ্যে গ্রহণ করতে পারে।

কোথায় ব্যবহৃত হয়: যখন কিছু কমন বৈশিষ্ট্য একাধিক ক্লাসে দরকার হয়।

class Vehicle {
  constructor(public brand: string) {}
  move() {
    console.log("গাড়ি চলছে...");
  }
}
 
class Bike extends Vehicle {
  ringBell() {
    console.log("টিন টিন!");
  }
}
 
const b = new Bike("Yamaha");
b.move();
b.ringBell();

১১. this, super, এবং instanceof

🔹 this

ব্যাখ্যা: this হচ্ছে সেই অবজেক্ট যার কনটেক্সটে কোনো ফাংশন কল হচ্ছে। ক্লাসের ভিতরে this মানে হলো ঐ ক্লাসের অবজেক্ট।

class Player {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  greet() {
    console.log(`Hi, I am ${this.name}`);
  }
}

🔹 super

ব্যাখ্যা: super হচ্ছে parent (base) ক্লাসকে নির্দেশ করে। সাবক্লাসের ভেতরে super() দিয়ে parent constructor কল করা যায়, আর super.method() দিয়ে parent এর মেথড এক্সেস করা যায়।

class Animal {
  constructor(public name: string) {}
  move() {
    console.log("চলছে...");
  }
}
 
class Cat extends Animal {
  constructor(name: string) {
    super(name);
  }
 
  move() {
    super.move();
    console.log("নরম পায়ে হাঁটছে...");
  }
}

🔹 instanceof

ব্যাখ্যা: instanceof অপারেটর দিয়ে চেক করা যায় কোনো অবজেক্ট কোনো নির্দিষ্ট ক্লাসের ইনস্ট্যান্স কিনা।

class Animal {}
class Dog extends Animal {}
 
const d = new Dog();
 
console.log(d instanceof Dog);     // true
console.log(d instanceof Animal);  // true

১২. ইন্টারফেস বনাম ক্লাস (Interface vs Class)

ব্যাখ্যা:

  • interface শুধুমাত্র structure define করে — কোনো বাস্তব ইমপ্লিমেন্টেশন রাখে না।
  • class structure + behavior (ইমপ্লিমেন্টেশন) দুইটাই দেয়।

কোথায় ব্যবহৃত হয়:

  • interface: type checking ও contracts এর জন্য।
  • class: বাস্তব object তৈরি করার জন্য।
interface Printable {
  print(): void;
}
 
class Invoice implements Printable {
  print() {
    console.log("Invoice printed");
  }
}

১৩. মিক্সিন (Mixins)

ব্যাখ্যা: মিক্সিন হলো এমন একটা প্যাটার্ন যা দিয়ে একাধিক class এর behavior একত্রে মিশিয়ে ব্যবহার করা যায়।

কোথায় ব্যবহৃত হয়: অনেকগুলো আলাদা ফিচার একাধিক ক্লাসে শেয়ার করতে চাইলে।

type Constructor<T = {}> = new (...args: any[]) => T;
 
function Jumpable<TBase extends Constructor>(Base: TBase) {
  return class extends Base {
    jump() {
      console.log("আমি লাফ দিচ্ছি!");
    }
  };
}
 
class Person {
  name = "রাহাত";
}
 
const JumpingPerson = Jumpable(Person);
const jp = new JumpingPerson();
jp.jump();

১৪. ডেকোরেটর (Decorators)

ব্যাখ্যা: ডেকোরেটর হলো একধরনের ফাংশন যা ক্লাস, মেথড বা প্রপার্টিকে সাজানোর জন্য ব্যবহার হয়। এগুলো compile-time এ কাজ করে।

কোথায় ব্যবহৃত হয়: ক্লাসকে অ্যাডিশনাল ফিচার দেওয়ার জন্য — যেমন লগিং, অথেনটিকেশন, ক্যাশিং ইত্যাদি।

নোট: experimentalDecorators টাইপস্ক্রিপ্ট কনফিগে true করে নিতে হয়।

function Logger(constructor: Function) {
  console.log("Logging class:", constructor.name);
}
 
@Logger
class Cat {
  constructor() {
    console.log("একটা বিড়াল তৈরি হলো");
  }
}

এই গাইডটি এখন TypeScript ক্লাস সম্পর্কিত প্রায় সবকিছু কভার করে ফেলেছে। তোমার যদি আরও কোনো টপিক দরকার হয় — জানিও, সাথে সাথে যোগ করে দেব। 💡