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

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

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

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

الگوهای رایج برنامه‌نویسی ناهمگام در جاوا اسکریپت: Promise.race، Promise.all، و Promise.any کامل و مثال‌ها
1403/08/01 19:08

الگوهای رایج برنامه‌نویسی ناهمگام در جاوا اسکریپت: Promise.race، Promise.all، و Promise.any کامل و مثال‌ها

مطالعه بیشتر
آموزش کامل Super Global ها در PHP (متغیرهای سراسری)
1405/04/27 22:29

آموزش کامل Super Global ها در PHP (متغیرهای سراسری)

مطالعه بیشتر
آموزش ساخت یک گالری تصویر با استفاده از جاوا اسکریپت: راهنمای گام به گام
1403/08/03 16:57

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

مطالعه بیشتر
آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل
1405/05/04 23:25

آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل

مطالعه بیشتر
آموزش جامع ساخت پنل مدیریت ساده و استاندارد با PHP
1405/05/14 22:19

آموزش جامع ساخت پنل مدیریت ساده و استاندارد با PHP

مطالعه بیشتر
واحدهای CSS مدرن: آموزش استفاده از vw، vh، vmin و vmax برای طراحی واکنش‌گرا
1403/08/11 20:43

واحدهای CSS مدرن: آموزش استفاده از vw، vh، vmin و vmax برای طراحی واکنش‌گرا

مطالعه بیشتر
استفاده از clip-path در CSS برای برش‌های زیبا و جذاب: راهنمای کامل
1403/08/16 22:58

استفاده از clip-path در CSS برای برش‌های زیبا و جذاب: راهنمای کامل

مطالعه بیشتر
آموزش سیر تا پیاز تاریخ و زمان در PHP (استاندارد گوگل)
1405/04/27 21:58

آموزش سیر تا پیاز تاریخ و زمان در PHP (استاندارد گوگل)

مطالعه بیشتر
درک Props و انتقال داده‌ها بین کامپوننت‌ها در Vue.js | آموزش کاربردی
1404/09/24 20:16

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

مطالعه بیشتر
آموزش توسعه و مدیریت پروژه‌های بزرگ در جاوا اسکریپت: آشنایی با ابزارها و فریم‌ورک‌های کاربردی
1403/08/04 19:43

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

مطالعه بیشتر
معرفی React.js و بررسی مزایای آن برای توسعه وب و اپلیکیشن
1402/06/28 00:59

معرفی React.js و بررسی مزایای آن برای توسعه وب و اپلیکیشن

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

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

مطالعه بیشتر

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