אם אתה יכול לנהוג במכונית נוסעים בעלת 4 דלתות, תוכל גם לנהוג בטנדר. אם נהגת במכונית עם מנוע בעירה, תוכל גם לנהוג במכונית חשמלית.

צורתם וגודלם של רכבי נוסעים עשויים להיות שונים מאחד לשני. המנוע שמפעיל את הרכבים האלה יכול להיות שונה לחלוטין גם כן. אבל זה לא משנה לנהג.

אתה פשוט נכנס, מתגייס, מתניע את הרכב, מכניס אותו להילוך ונוסע. הסיבה לכך היא מכוניות, משאיות וטנדרים רַב צוּרוֹת.

פולימורפיזם: לשבור אותו

בואו נסתכל על המילה פולימורפיזם. אתה יכול לפרק את זה פולי, מורף, ו ism.

פולי פירושו רבים, כמו פירושו של מצולע לזוויות רבות. כאשר הוא משמש כשם עצם, א מורף הוא גרסה של מין. וכן ism יכול להתכוון למערכת.

אז פולימורפיזם פירושו פשוט מערכת של וריאציות רבות. זה עדיין לא אומר לך הרבה על אופן השימוש בו בתכנות. זה הלאה.

אם זה הולך כמו ברווז... מדוע אובייקטים פולימורפיים מדהימים

כאשר אתה יוצר בכיתה בקוד שלך שירש ממחלקה אחרת, אתה מחייב את המחלקה החדשה לחוזה. החוזה קובע כי כל משתנה ופונקציה בהורה יהיו גם בילד.

לכל רכב יש הגה, דוושות גז ובלימה, ופנייה. אתה לא צריך לפתוח את מכסה המנוע כדי לנהוג במכונית. מה שחשוב זה שזו מכונית.

instagram viewer

אותו דבר חל על שיעורים שירשו משיעורים אחרים. להלן דוגמא ב- TypeScript:


רכב ברמה {
מנוע פרטי: string;
צמיגים _ פרטיים: מספר;
קונסטרוקטור (מנוע: string = "בעירה", צמיגים: מספר = 4) {
this._engine = מנוע;
this._tires = צמיגים;
}
להאיץ (מהירות: מספר) {
console.log ("מאיץ במהירות של" + מהירות);
}
בלם (לחץ: מספר) {
console.log ("החלת" + לחץ + "לחץ");
}
פונה שמאלה() {
console.log ("פנייה שמאלה");
}
פנה ימינה() {
console.log ("פנייה ימינה");
}
}
מכונית בכיתה מרחיבה את הרכב {
}
טסלה בכיתה מרחיבה את הרכב {
קונסטרוקטור () {
סופר ("חשמלי");
}
}

בדוגמה זו, יש א רכב מעמד. ה אוטו המחלקה יורשת מה רכב מעמד. וכן טסלה יורש מ אוטו. עכשיו בואו ניצור כמה אובייקטים ונסתכל עליהם.

תן ל- myCoupe: רכב = רכב חדש ();
console.log (myCoupe);
console.log (myCoupe.constructor.name);
תן ל- mySedan: Vehicle = טסלה חדשה ();
console.log (mySedan);
console.log (mySedan.constructor.name);
myCoupe.turnLeft ();
mySedan.turnLeft ();

אתה יכול לראות שהצהרנו myCoupe להיות אוטו ו mySedan להיות רכב. אחר כך יצרנו מיידיות myCoupe בתור חדש רכב ו mySedan בתור חדש טסלה. אם אתה בקר בארגז החול של TypeScript והפעל את הקוד, תראה שהוא פועל ללא שגיאה. וזה מתנהג כפי שהיית מצפה, בהתבסס על החוזה.

במילים אחרות, כל הרכבים יכולים לפנות שמאלה מכיוון שהם ירשו אותו מה- רכב מעמד. המהדר יודע שכל ילד של רכב הסכים לחוזה. אז זה מניח שהכל בסדר, לא משנה באיזה מחלקות אובייקטים הוקלדו או הופקו.

לפעמים זה נקרא "הקלדת ברווז". המהדר מניח שאם הוא הולך כמו ברווז ומדבר כמו ברווז, יכול להיות שזה גם ברווז. אז המהדר לא דואג לפרטים ופשוט מתייחס לאובייקט כמו ברווז.

פולימורפיזם הופך את הקוד שלך לחסין כדורים

יתרון נוסף של חוזה הפולימורפיזם הוא ערובה לכך שהקוד שלך יפעל. אם הקלדת היטב את כל המשתנים שלך ומה כל פונקציה מחזירה, אתה יודע שכל ילד תמיד יתאים למשתנים, פונקציות וסוגים.

זה אומר שאתה יכול להוסיף ולשנות את הקוד בשיעורים שלך מבלי לשבור את התוכנית שלך. כל אובייקט המתייחס לא רכב object תמיד יקבל נתונים ופונקציונליות העונה על הציפיות, לא משנה כמה אוטו שינויים.

הקוד בתוך הפונקציה עשוי לא להוציא את התוצאות הנכונות. אבל זו בעיה מסוג אחר. כל עוד הפונקציה עוקבת אחר החוזה ומחזירה את סוג המשתנה הצפוי, היא לא תגרום לשגיאת שבירת קוד.

פולימורפיזם הוא עצום, ו להלן 10 עקרונות תכנות נוספים שכדאי לדעת.

תרגל פולימורפיזם

  • השתמש בקישור ארגז החול למעלה כדי ליצור א סִירָה מעמד.
  • הסר חפץ סירה חדש באופן שהוא רכב סוג, אבל עדיין נראה כמו סירה.
  • וודא שהסירה עדיין מתנהגת כמו רכב.

דוגמא אחרונה לפולימורפיזם

פולימורפיזם יכול להיות מושג מסובך לתפיסה ראשונית. אבל ברגע שאתה מקבל את זה, עשית צעד עצום לקראת הבנת מהו בעצם תכנות מונחה עצמים. אבל הרעיון עדיין נראה תיאורטי. אז הנה דוגמא מוצקה בעולם האמיתי שתעזור לכם לראות עד כמה היא שימושית.

תארו לעצמכם שאתם בונים יישום אינטרנט המתחבר למסד נתונים של MySQL. ואז הבוס מחליט לעבור למסד נתונים של PostgreSQL. האם זה אומר שאתה צריך לכתוב מחדש את כל שיחות מסד הנתונים שלך?

לא, זה לא. אם האפליקציה שלך משתמשת ב- גישה למידע בכיתה עם תת-כיתות שלמעשה מסתובבות עם הנתונים, יש לך מזל. ה גישה למידע class מגדיר כיצד האפליקציה שלך מתקשרת עם נתונים, לא כיצד היא מתקשרת עם מסד הנתונים.

יש לך מחלקות משנה כמו MySQLA Access ו PostgresQLA Access שעושים את כל העבודה המלוכלכת. אבל אם לאפליקציה שלך יש רק גישה למידע אובייקטים, תוכל להחליף מסדי נתונים מבלי לשכתב שורה אחת של קוד אפליקציה.

לַחֲלוֹקצִיוּץאימייל
כיצד לארגן את הקוד מונחה האובייקט שלך בירושה

הכוונה נכונה לתכנות מונחה עצמים פירושה שאתה צריך לדעת על ירושה וכיצד היא יכולה לפשט את הקידוד ולצמצם טעויות.

קרא הבא

נושאים קשורים
  • תִכנוּת
  • תִכנוּת
  • תכנות מונחה עצמים
על הסופר
לי נתן (19 מאמרים פורסמו)

לי הוא נודד במשרה מלאה ופולימאי בעל תשוקות ותחומי עניין רבים. חלק מתשוקות אלו סובבות סביב פרודוקטיביות, התפתחות אישית וכתיבה.

עוד מאת לי נתן

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה