מהו פולימורפיזם?
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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()); // Some animal משמיע קול
console.log(dog.speak()); // Rex נובח
console.log(cat.speak()); // Whiskers מייללכל שלושת האובייקטים מגיבים למתודה speak(), אך כל אחד עושה זאת בדרכו שלו.
אתגר
יש לך מערכת התראות עם מחלקת אב Notification ושתי מחלקות צאצא. המשימה שלך היא להוסיף את המתודה send(message) לכל אחת ממחלקות הצאצא, עם מימושים שונים.
- במחלקה
EmailNotification, המתודה צריכה להחזיר את המחרוזת: "Sending '(message)' via Email" - במחלקה
SMSNotification, המתודה צריכה להחזיר את המחרוזת: "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
סקירה מהירה: אובייקטיםהוספת מתודות לאובייקטיםהבנת מילת המפתח thisפונקציות בנאימילת המפתח newאתגר סיכום7הורשה ומילת המפתח extends
הורשההקשר "הוא-סוג-של"מילת המפתח extendsהמתודה super()הורשת מאפיינים ומתודותאתגר סיכום8ארגון קוד OOP
ארגון מחלקות במודוליםתרגלו בעצמכם: קומפיילר JavaScript אונליין