۷
کلاسها و برنامهنویسی شیءگرا (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);