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

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

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

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

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

آموزش HTML: اولین گام برای طراحی سایت و سئو حرفه‌ای

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

آموزش تکنیک‌های پیشرفته CSS Grid: طراحی ساختارهای پیچیده و واکنش‌گرا

مطالعه بیشتر
آموزش استایل‌دهی لیست‌ها در CSS: طراحی و استایل‌دهی ul و ol
10م آبان 1403

آموزش استایل‌دهی لیست‌ها در CSS: طراحی و استایل‌دهی ul و ol

مطالعه بیشتر
آموزش استفاده از cubic-bezier در CSS برای انیمیشن‌های سفارشی و حرفه‌ای
12م آبان 1403

آموزش استفاده از cubic-bezier در CSS برای انیمیشن‌های سفارشی و حرفه‌ای

مطالعه بیشتر
تفاوت Data و Computed Properties در Vue.js | آموزش کاربردی و مثال‌محور
21م آذر 1404

تفاوت Data و Computed Properties در Vue.js | آموزش کاربردی و مثال‌محور

مطالعه بیشتر
نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue
28م شهریور 1402

نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue

مطالعه بیشتر
مقدمه‌ای به template و دیتابایندینگ در Vue.js: نحوه مدیریت داده‌ها و رندرینگ پویا
28م شهریور 1402

مقدمه‌ای به template و دیتابایندینگ در Vue.js: نحوه مدیریت داده‌ها و رندرینگ پویا

مطالعه بیشتر
معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی
28م شهریور 1402

معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی

مطالعه بیشتر
چگونه یک فوتر چسبان در CSS بسازیم: آموزش ساخت فوتر ثابت و همیشگی
2م شهریور 1403

چگونه یک فوتر چسبان در CSS بسازیم: آموزش ساخت فوتر ثابت و همیشگی

مطالعه بیشتر
کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب
11م آبان 1403

کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب

مطالعه بیشتر
آموزش ساخت یک Todo List با استفاده از DOM و جاوا اسکریپت: راهنمای گام به گام
3م آبان 1403

آموزش ساخت یک Todo List با استفاده از DOM و جاوا اسکریپت: راهنمای گام به گام

مطالعه بیشتر

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