۷

کلاس‌ها و برنامه‌نویسی شیءگرا (OOP)

نوشتن کدهای شیءگرا با کلاس‌ها، ارث‌بری و ... .

کلاس‌ها: کارخونه ساخت آبجکت

کلاس‌ها نقشه‌هایی برای ساختن آبجکت‌ها هستن. باهاشون می‌تونیم ویژگی‌ها (Properties) و رفتارها (Methods) رو برای یه نوع خاص از آبجکت تعریف کنیم.

class Player {
  // ویژگی‌ها
  name: string;
  health: number;
  private score: number = 0; // private یعنی فقط از داخل خود کلاس قابل دسترسه

  constructor(name: string, health: number) {
    this.name = name;
    this.health = health;
  }

  // متد
  attack(): void {
    console.log(`${this.name} attacks!`);
    this.score += 10;
  }
}

const player1 = new Player("Hero", 100);
player1.attack();
// console.log(player1.score); // Error! Property 'score' is private.

ارث‌بری (Inheritance)

با ارث‌بری، یه کلاس می‌تونه همه ویژگی‌ها و متدهای یه کلاس دیگه (کلاس والد) رو به ارث ببره و چیزای جدیدی هم بهش اضافه کنه.

class Mage extends Player {
  mana: number;

  constructor(name: string, health: number, mana: number) {
    super(name, health); // فراخوانی constructor کلاس والد
    this.mana = mana;
  }

  castSpell(): void {
    console.log(`${this.name} casts a powerful spell!`);
    this.mana -= 20;
  }
}

const mage1 = new Mage("Gandalf", 80, 150);
mage1.attack(); // این متد رو از Player به ارث برده
mage1.castSpell();

تمرین! 🧠

یه کلاس `Animal` با یه ویژگی `name` و یه متد `move` که یه مسافت (عدد) رو می‌گیره و یه پیام چاپ می‌کنه بساز. بعد یه کلاس `Dog` بساز که از `Animal` ارث‌بری می‌کنه و یه متد جدید به اسم `bark` داره که پیام "Woof! Woof!" رو چاپ می‌کنه.

جواب تمرین

class Animal {
  name: string;
  constructor(theName: string) {
    this.name = theName;
  }
  move(distanceInMeters: number = 0) {
    console.log(`${this.name} moved ${distanceInMeters}m.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }
  bark() {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("پیکو");
dog.bark();
dog.move(10);