ما هو تعدد الأشكال؟
جزء من قسم البرمجة كائنية التوجه في رحلة 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()، لكن كلًّا منها يفعل ذلك بطريقته الخاصة.
التحدي
لديك نظام إشعارات مع Notification من النوع الأب واثنين من الفئات الابنة. مهمتك هي إضافة method send(message) إلى كل فئة ابنة مع تطبيقات مختلفة.
- في
EmailNotificationclass، يجب أن تُرجع method السلسلة النصية: "Sending '(message)' via Email" - في
SMSNotificationclass، يجب أن تُرجع 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يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circleإعادة التعريف ودالة المساحةعداد الأشكال Staticتدرّب بنفسك: مترجم JavaScript عبر الإنترنت