Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ما هو تعدد الأشكال؟

جزء من قسم البرمجة كائنية التوجه في رحلة JavaScript على Coddy. الدرس 35 من 56.

تعدد الأشكال هو مبدأ أساسي في البرمجة كائنية التوجه، ويسمح للكائنات من فئات مختلفة بالاستجابة للطريقة نفسها بطرق مختلفة.

في JavaScript، يظهر تعدد الأشكال غالبًا عندما تتجاوز الفئات الابنة الأساليب الموروثة من الفئات الأصلية.

لننشئ فئة أصل بسيطة تحتوي على أسلوب speak():

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

والآن، لنُنشئ فئةً فرعيةً تمتد من Animal:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

إليك فئة فرعية أخرى:

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

تنفّذ كل فئة فرعية الطريقة speak() بشكل مختلف. هذا هو تعدد الأشكال في العمل!

يمكننا الآن إنشاء كائنات مختلفة واستدعاء الطريقة نفسها على كلٍّ منها:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // حيوان ما يصدر صوتًا
console.log(dog.speak());    // ريكس ينبح
console.log(cat.speak());    // ويسكرز يموء

تستجيب الكائنات الثلاثة للطريقة speak()، لكن كلًّا منها يفعل ذلك بطريقته الخاصة.

challenge icon

التحدي

لديك نظام إشعارات مع Notification من النوع الأب واثنين من الفئات الابنة. مهمتك هي إضافة method ‏send(message) إلى كل فئة ابنة مع تطبيقات مختلفة.

  1. في EmailNotification class، يجب أن تُرجع method السلسلة النصية: "Sending '(message)' via Email"
  2. في SMSNotification class، يجب أن تُرجع method السلسلة النصية: "Sending '(message)' via SMS"

جرّب بنفسك

import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';

// كود الاختبار - لا تعدّل
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // يجب أن يستخدم send() الخاصة بـ EmailNotification
console.log(sms.send("Hello!"));    // يجب أن يستخدم send() الخاصة بـ SMSNotification
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت