آموزش رایگان جاوا اسکریپت (JavaScript)

آموزش جامع اینترفیس‌ها و کلاس‌ها (Classes) در ES6 جاوا اسکریپت: مفاهیم و کاربردها

28م مهر 1403 محراب حسن زاده
آموزش جامع اینترفیس‌ها و کلاس‌ها (Classes) در ES6 جاوا اسکریپت: مفاهیم و کاربردها

در ECMAScript 6 (ES6)، قابلیت‌های جدیدی برای برنامه‌نویسی شیءگرا به جاوا اسکریپت اضافه شد که شامل کلاس‌ها (Classes) و اینترفیس‌ها (Interfaces) می‌شود. این ویژگی‌ها به توسعه‌دهندگان کمک می‌کنند تا کدهای خود را ساختارمندتر، قابل‌فهم‌تر و قابل‌مدیریت‌تر بنویسند. در این مقاله، به بررسی مفاهیم کلاس‌ها و اینترفیس‌ها در ES6 می‌پردازیم و نحوه استفاده از آن‌ها را توضیح می‌دهیم.

 

کلاس‌ها (Classes) در ES6

کلاس‌ها در ES6 به عنوان یک راه جدید و ساده برای تعریف شیءها و وراثت در جاوا اسکریپت معرفی شدند. کلاس‌ها به توسعه‌دهندگان این امکان را می‌دهند که به صورت واضح‌تر و سازمان‌یافته‌تر از اصول شیءگرا استفاده کنند.

 

تعریف کلاس‌ها

برای تعریف یک کلاس در ES6 از کلمه‌کلیدی class استفاده می‌کنیم. ساختار کلی تعریف کلاس به صورت زیر است:


class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const ali = new Person('Ali', 30);
ali.greet(); // Output: Hello, my name is Ali and I am 30 years old.

 

در این مثال:

  • class Person برای تعریف کلاس Person استفاده می‌شود.

  • constructor یک متد خاص است که برای مقداردهی اولیه به خصوصیات شیء استفاده می‌شود.

  • متد greet یک متد عمومی است که می‌توان از آن در نمونه‌های کلاس استفاده کرد.

 

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

کلاس‌ها در ES6 به راحتی از کلاس‌های دیگر ارث می‌برند. برای این کار از کلمه‌کلیدی extends استفاده می‌کنیم.


class Student extends Person {
  constructor(name, age, grade) {
    super(name, age); // فراخوانی سازنده کلاس پدر
    this.grade = grade;
  }

  study() {
    console.log(`${this.name} is studying in grade ${this.grade}.`);
  }
}

const sara = new Student('Sara', 20, '12th');
sara.greet(); // Output: Hello, my name is Sara and I am 20 years old.
sara.study(); // Output: Sara is studying in grade 12th.

 

در این مثال:

  • Student کلاس جدیدی است که از Person ارث می‌برد.

  • super(name, age) برای فراخوانی سازنده کلاس پدر و مقداردهی به خصوصیات آن استفاده می‌شود.

  • study متدی است که به طور خاص برای کلاس Student تعریف شده است.

 

متدهای استاتیک و خصوصی

کلاس‌ها در ES6 از متدهای استاتیک و خصوصی نیز پشتیبانی می‌کنند.

متدهای استاتیک:


class MathUtils {
  static add(x, y) {
    return x + y;
  }
}

console.log(MathUtils.add(2, 3)); // Output: 5

 

متدهای خصوصی:


class Person {
  #socialSecurityNumber;

  constructor(name, socialSecurityNumber) {
    this.name = name;
    this.#socialSecurityNumber = socialSecurityNumber;
  }

  getSocialSecurityNumber() {
    return this.#socialSecurityNumber;
  }
}

const ali = new Person('Ali', '123-45-6789');
console.log(ali.getSocialSecurityNumber()); // Output: 123-45-6789
// console.log(ali.#socialSecurityNumber); // SyntaxError: Private field '#socialSecurityNumber' must be declared in an enclosing class

 

در این مثال، #socialSecurityNumber یک متغیر خصوصی است که فقط از داخل کلاس قابل دسترسی است.

 

اینترفیس‌ها (Interfaces) در جاوا اسکریپت

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

 

شبیه‌سازی اینترفیس‌ها

برای شبیه‌سازی اینترفیس‌ها در جاوا اسکریپت، می‌توانیم از کلاس‌های انتزاعی (Abstract Classes) و الگوهای طراحی استفاده کنیم.

ایجاد یک "اینترفیس" و پیاده‌سازی آن در کلاس‌ها:


class Drawable {
  draw() {
    throw new Error("Method 'draw()' must be implemented.");
  }
}

class Circle extends Drawable {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  draw() {
    console.log(`Drawing a circle with radius ${this.radius}`);
  }
}

const circle = new Circle(5);
circle.draw(); // Output: Drawing a circle with radius 5

 

در این مثال:

  • Drawable یک کلاس انتزاعی است که به عنوان یک "اینترفیس" عمل می‌کند. متد draw باید توسط هر کلاسی که از Drawable ارث می‌برد پیاده‌سازی شود.

  • Circle از Drawable ارث می‌برد و متد draw را پیاده‌سازی می‌کند.

 

بررسی پیاده‌سازی اینترفیس‌ها

برای اطمینان از پیاده‌سازی صحیح اینترفیس‌ها، می‌توانیم از بررسی‌های دستی استفاده کنیم.


function checkInterfaceImplementation(obj, interface) {
  const methods = Object.getOwnPropertyNames(interface.prototype);
  methods.forEach(method => {
    if (typeof obj[method] !== 'function') {
      throw new Error(`Class does not implement ${method} method from the interface.`);
    }
  });
}

class Circle extends Drawable {
  constructor(radius) {
    super();
    this.radius = radius;
  }

  draw() {
    console.log(`Drawing a circle with radius ${this.radius}`);
  }
}

const circle = new Circle(5);
checkInterfaceImplementation(circle, Drawable); // No error if all methods are implemented

 

در این مثال:

  • تابع checkInterfaceImplementation بررسی می‌کند که آیا تمامی متدهای لازم در کلاس پیاده‌سازی شده‌اند یا خیر.

 

نتیجه‌گیری

کلاس‌ها و اینترفیس‌ها (شبیه‌سازی شده) در ES6 جاوا اسکریپت ابزارهای قدرتمندی برای طراحی و پیاده‌سازی برنامه‌های شیءگرا هستند. کلاس‌ها با استفاده از کلمه‌کلیدی class به شما این امکان را می‌دهند که به راحتی اشیاء و وراثت را مدیریت کنید. همچنین، با شبیه‌سازی اینترفیس‌ها می‌توانید تضمین کنید که کلاس‌های شما پیاده‌سازی صحیحی از متدها و خصوصیات مورد نظر را دارند. با استفاده از این قابلیت‌ها، می‌توانید کدهای خود را ساختارمندتر و قابل‌مدیریت‌تر کنید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

توابع فلش (Arrow Functions) در جاوا اسکریپت: ساده‌سازی کد با استفاده از ES6
2م شهریور 1403

توابع فلش (Arrow Functions) در جاوا اسکریپت: ساده‌سازی کد با استفاده از ES6

مطالعه بیشتر
اصول پایه React.js: آشنایی با کامپوننت‌ها، وضعیت و رندرینگ
28م شهریور 1402

اصول پایه React.js: آشنایی با کامپوننت‌ها، وضعیت و رندرینگ

مطالعه بیشتر
آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر
5م شهریور 1402

آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر

مطالعه بیشتر
آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child
10م شهریور 1402

آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child

مطالعه بیشتر
استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل
16م آبان 1403

استفاده از font face در CSS برای اضافه کردن فونت‌های سفارشی: راهنمای کامل

مطالعه بیشتر
استفاده از Flexbox در CSS برای چیدمان‌های مدرن: راهنمای جامع و کاربردی
10م آبان 1403

استفاده از Flexbox در CSS برای چیدمان‌های مدرن: راهنمای جامع و کاربردی

مطالعه بیشتر
آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب
12م آبان 1403

آموزش mix-blend-mode و background-blend-mode در CSS: ترکیب رنگ‌ها و ایجاد افکت‌های جذاب

مطالعه بیشتر
آموزش مفاهیم پایه‌ای اشیاء در جاوا اسکریپت: تعریف، ویژگی‌ها و متدها
2م شهریور 1403

آموزش مفاهیم پایه‌ای اشیاء در جاوا اسکریپت: تعریف، ویژگی‌ها و متدها

مطالعه بیشتر
آموزش اضافه کردن ویدئو و صدا به وب‌سایت: نحوه استفاده از تگ‌های video و audio در HTML
23م مرداد 1402

آموزش اضافه کردن ویدئو و صدا به وب‌سایت: نحوه استفاده از تگ‌های video و audio در HTML

مطالعه بیشتر
راهنمای کامل تگ‌های <img> و <a> در HTML: تصاویر و لینک‌ها
21م مرداد 1402

راهنمای کامل تگ‌های <img> و <a> در HTML: تصاویر و لینک‌ها

مطالعه بیشتر
آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی
2م آبان 1403

آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی

مطالعه بیشتر
آموزش Emit در Vue.js | انتقال رویداد از کامپوننت فرزند به والد
28م آذر 1404

آموزش Emit در Vue.js | انتقال رویداد از کامپوننت فرزند به والد

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد