آموزش رایگان جاوا اسکریپت (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 به شما این امکان را می‌دهند که به راحتی اشیاء و وراثت را مدیریت کنید. همچنین، با شبیه‌سازی اینترفیس‌ها می‌توانید تضمین کنید که کلاس‌های شما پیاده‌سازی صحیحی از متدها و خصوصیات مورد نظر را دارند. با استفاده از این قابلیت‌ها، می‌توانید کدهای خود را ساختارمندتر و قابل‌مدیریت‌تر کنید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

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

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

مطالعه بیشتر
آموزش ساخت یک برنامه ساده با Fetch API در جاوا اسکریپت: راهنمای گام به گام
1م آبان 1403

آموزش ساخت یک برنامه ساده با Fetch API در جاوا اسکریپت: راهنمای گام به گام

مطالعه بیشتر
آموزش قالب‌بندی متن در HTML: استفاده از تگ‌ها و CSS برای استایل‌دهی
23م مرداد 1402

آموزش قالب‌بندی متن در HTML: استفاده از تگ‌ها و CSS برای استایل‌دهی

مطالعه بیشتر
آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننت‌ها
28م شهریور 1402

آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننت‌ها

مطالعه بیشتر
نصب Node.js و Create React App: شروع پروژه‌های React.js به‌صورت آسان
28م شهریور 1402

نصب Node.js و Create React App: شروع پروژه‌های React.js به‌صورت آسان

مطالعه بیشتر
آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر
2م بهمن 1402

آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر

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

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

مطالعه بیشتر
آموزش طراحی و استایل‌دهی فرم‌ها با CSS: ایجاد فرم‌های کاربرپسند و واکنش‌گرا
18م شهریور 1402

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

مطالعه بیشتر
روش‌های کار با Conditional و Loop در Vue.js | آموزش v-if، v-show و v-for
28م آذر 1404

روش‌های کار با Conditional و Loop در Vue.js | آموزش v-if، v-show و v-for

مطالعه بیشتر
تفاوت PHP با HTML، CSS و JavaScript؛ راهنمای جامع و ساده برای مبتدیان
21م خرداد 1405

تفاوت PHP با HTML، CSS و JavaScript؛ راهنمای جامع و ساده برای مبتدیان

مطالعه بیشتر
آموزش کامل عملگرهای منطقی در PHP (همراه با تفاوت‌های کلیدی)
3م تیر 1405

آموزش کامل عملگرهای منطقی در PHP (همراه با تفاوت‌های کلیدی)

مطالعه بیشتر
آموزش جامع پارامترها و مقادیر بازگشتی در PHP (بر اساس استانداردهای مدرن)
16م تیر 1405

آموزش جامع پارامترها و مقادیر بازگشتی در PHP (بر اساس استانداردهای مدرن)

مطالعه بیشتر

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