سازمان‌دهی کد در جاوااسکریپت – کلاس‌ها، ماژول‌ها و وراثت شی‌گرا

در جاوااسکریپت، دو الگوی اصلی برای سازمان‌دهی داده و رفتار وجود دارد: کلاس‌ها و ماژول‌ها. این مقاله به بررسی ساختار کلاس‌ها، نحوهٔ تعریف و نمونه‌سازی آن‌ها، و مفهوم وراثت و چندریختی (polymorphism) در طراحی شی‌گرا می‌پردازد. درک این الگوها برای نوشتن کدهای منظم، قابل‌نگهداری و توسعه‌پذیر ضروری است.

کلاسماژولوراثتچندریختی

~3 دقیقه مطالعه • بروزرسانی ۲۸ مهر ۱۴۰۴

مقدمه


در جاوااسکریپت، دو الگوی رایج برای سازمان‌دهی کد وجود دارد: کلاس‌ها و ماژول‌ها. این دو الگو می‌توانند به‌صورت مستقل یا ترکیبی در برنامه‌ها استفاده شوند. شناخت هر دو الگو و کاربرد مناسب آن‌ها برای تسلط بر JS ضروری است.


کلاس‌ها در جاوااسکریپت


کلاس‌ها در JS تعریف‌هایی برای ساختارهای دادهٔ سفارشی هستند که شامل داده و رفتار مرتبط با آن داده‌اند. کلاس‌ها خودشان مقدار اجرایی نیستند — برای استفاده باید با new نمونه‌سازی شوند.


class Page {
  constructor(text) {
    this.text = text;
  }
  print() {
    console.log(this.text);
  }
}

class Notebook {
  constructor() {
    this.pages = [];
  }
  addPage(text) {
    var page = new Page(text);
    this.pages.push(page);
  }
  print() {
    for (let page of this.pages) {
      page.print();
    }
  }
}

var mathNotes = new Notebook();
mathNotes.addPage("Arithmetic: + - * / ...");
mathNotes.addPage("Trigonometry: sin cos tan ...");
mathNotes.print();

در این مثال، کلاس Page داده‌ای از نوع رشته دارد و متدی برای چاپ آن. کلاس Notebook مجموعه‌ای از صفحات را نگه می‌دارد و متدی برای افزودن و چاپ آن‌ها دارد.


وراثت کلاس‌ها


جاوااسکریپت از وراثت کلاس‌ها پشتیبانی می‌کند. کلاس‌های فرزند می‌توانند رفتار کلاس والد را به ارث ببرند و آن را گسترش دهند:


class Publication {
  constructor(title, author, pubDate) {
    this.title = title;
    this.author = author;
    this.pubDate = pubDate;
  }
  print() {
    console.log(`
Title: ${this.title}
By: ${this.author}
${this.pubDate}
`);
  }
}

class Book extends Publication {
  constructor(details) {
    super(details.title, details.author, details.publishedOn);
    this.publisher = details.publisher;
    this.ISBN = details.ISBN;
  }
  print() {
    super.print();
    console.log(`
Publisher: ${this.publisher}
ISBN: ${this.ISBN}
`);
  }
}

class BlogPost extends Publication {
  constructor(title, author, pubDate, URL) {
    super(title, author, pubDate);
    this.URL = URL;
  }
  print() {
    super.print();
    console.log(this.URL);
  }
}

در این مثال، کلاس‌های Book و BlogPost از Publication ارث‌بری می‌کنند و متد print() را بازنویسی می‌کنند. فراخوانی super.print() باعث اجرای نسخهٔ والد متد می‌شود.


چندریختی (Polymorphism)


امکان داشتن متدهایی با نام یکسان در کلاس والد و فرزند، و اجرای نسخهٔ مناسب در زمان اجرا، ویژگی‌ای‌ست به نام چندریختی

جمع‌بندی


کلاس‌ها و وراثت در جاوااسکریپت ابزارهایی قدرتمند برای سازمان‌دهی داده و رفتار هستند. با استفاده از کلاس‌ها می‌توان ساختارهای منظم، قابل‌توسعه و خوانا ایجاد کرد. شناخت تفاوت‌ها و کاربردهای مناسب این الگوها، پایه‌ای مهم برای طراحی حرفه‌ای در JS است.


نوشته و پژوهش شده توسط دکتر شاهین صیامی