SlideShare uma empresa Scribd logo
1 de 2
Baixar para ler offline
‫הורשה והיררכיה של מחלקות‬

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

      ‫מחלקת ההורה (‪ )Base Class‬היא שתוריש למחלקת הילד (‪ )Derived Class‬את התכונות. ההורשה תתבצע באופן‬
                                                                                               ‫ציבורי, פרטי או מוגן.‬

                                                    ‫ראשית נעסוק בהורשה ציבורית. מבחינת כתיבה ההורשה תתבצע כך:‬

‫...{ ‪.class DERIVED CLASS : public BASE CLASS‬‬

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

  ‫נניח ובנינו מחלקה מסוג ‪ ,Robot‬וכל הרובוטים יודעים לבצע 2 פעולות: לחשב ולאכול. כמו כן, לכל רובוט יש שם, רמת‬
‫חוכמה והיכולת להיות שמח או עצוב. עם זאת, קיימים רובוטים בעלי תכונות ייחודיות המבדילות אותם מרובוטים אחרים.‬
    ‫2‪ R2D‬למשל, יודע לדבר ספרדית, לעומתו אופטימוס פריים יודע לשנות צורה.2‪ R2D‬ואופטימוס פריים אינם חולקים‬
  ‫תכונות אלו, אך הם כן חולקים את היכולת לבצע את הפעולות "חישוב" ו"אכילה" ולשניהם יש שם, רמת חוכמה והיכולת‬
                                                                                               ‫להיות שמח או עצוב.‬

                                                                    ‫אם כן, כאן ניתן לראות בבירור את היופי שבהורשה.‬

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

  ‫בחזרה לדוגמה שלנו, היות וכבר יש בידנו מחלקה בשם ‪ ,Robot‬על מנת להגדיר את המחלקות 2‪ R2D‬ואופטימוס פריים,‬
                                                           ‫כל שעלינו לעשות יהיה להשתמש בתכונות ההורשה באופן הבא:‬

‫‪class R2D2: public Robot‬‬
‫:‪{ public‬‬
   ‫} ;"‪R2D2 () { cout << ּ R2D2 Robot Built‬‬
  ‫} ;"‪∾R2D2(){cout << ּ R2D2 Robot Destroyed‬‬
   ‫} ;"‪void SpeakSpanish () { cout << "asta – la – vista‬‬
‫וכנ"ל לגבי אופטימוס פריים. כך שבעצם יצרנו מחלקות חדשות שהתשתית שלהן היא מחלקה קיימת, מבלי לשכפל שורות,‬
                                                                 ‫ובכך שמרנו על יעילות, צמצום וקריאות הקוד.‬

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

   ‫נציין שמחלקת ההורה, ה – ‪ base class‬היא איזשהו רעיון מופשט, ועל כן נקראת גם ‪ ,Abstract Date Type – ADT‬כך‬
    ‫שלעולם אנו לא באמת ניצור אובייקט מסוג ‪ ,Robot‬אלא תמיד רובוט מסוג מסוים, שהרי גם בחיים האמיתיים אנו לא‬
   ‫מתייחסים לבנאדם כאל צורת חיים אלא יורדים בדרגות ההיררכיה עד לרמת השם של האדם, אך אם נחשוב על הנושא‬
‫בצורה מבנית, נוכל לראות שאותו "יוסי" לדוגמא, משתייך למחלקה "גבר". אותו הגבר הוא תת מחלקה של "בן אדם" ואותו‬
                                                                      ‫בן אדם הוא תת מחלקה של "צורת חיים".‬

  ‫למחלקת "צורת חיים" יש גם תת מחלקה בשם "בעל חיים" ולה תת מחלקה בשם "יונק" שלה תת מחלקה בשם "כלב" ולה‬
                                                                                  ‫תת מחלקה בשם "לברדור".‬

                                                      ‫באופן דומה, אנו נרצה לייצר היררכית הורשה ברמת הקוד.‬

    ‫בחזרה לדוגמא שלנו, על מנת ליצור רובוט מסוג 2‪ R2D‬בערימה (‪ ,)Free Store‬אנו נבצע יצירת אובייקט כמו מקודם:‬

‫;)(2‪R2D2 * r2d2#1 = new R2D‬‬

                              ‫מה שהרווחנו כאן היא היכולת לרשום את השורה ;)"1#2‪r2d2#1  SetName ("R2D‬‬

  ‫למרות שבהגדרת המחלקה 2‪ R2D‬עצמה, כלל לא מופיעה הפונקציה ‪ SetName‬וכנ"ל לגבי התכונה ‪ .Name‬אלו תכונות‬
                                                                           ‫שיש לילד מעצם ההורשה מההורה.‬

Mais conteúdo relacionado

Destaque

Destaque (9)

ג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטים
ג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטיםג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטים
ג'אווה - תכנות מונחה עצמים - מחלקות ואובייקטים
 
ג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטה
ג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטהג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטה
ג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטה
 
מתמטיקה דיסקרטית - לוגיקה
מתמטיקה דיסקרטית - לוגיקהמתמטיקה דיסקרטית - לוגיקה
מתמטיקה דיסקרטית - לוגיקה
 
SQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםSQL - מודל ישויות קשרים
SQL - מודל ישויות קשרים
 
ג'אווה - תכנות מונחה עצמים - ממשקים
ג'אווה - תכנות מונחה עצמים - ממשקיםג'אווה - תכנות מונחה עצמים - ממשקים
ג'אווה - תכנות מונחה עצמים - ממשקים
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
 
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרותמתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
מתמטיקה דיסקרטית - תורת הקבוצות - הגדרות
 
Java - OOP - Exceptions Handling
Java - OOP - Exceptions HandlingJava - OOP - Exceptions Handling
Java - OOP - Exceptions Handling
 

Mais de מורן אלקובי

Mais de מורן אלקובי (14)

MySQL - מילון השאילתא
MySQL - מילון השאילתאMySQL - מילון השאילתא
MySQL - מילון השאילתא
 
SQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםSQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתונים
 
SQL - מודל הנתונים
SQL - מודל הנתוניםSQL - מודל הנתונים
SQL - מודל הנתונים
 
SQL - אלגברה של יחסים
SQL - אלגברה של יחסיםSQL - אלגברה של יחסים
SQL - אלגברה של יחסים
 
תכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותתכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקות
 
טורי חזקה
טורי חזקהטורי חזקה
טורי חזקה
 
כלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםכלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטים
 
DLL מדריך לעבודה עם
DLL מדריך לעבודה עםDLL מדריך לעבודה עם
DLL מדריך לעבודה עם
 
עבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סיעבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סי
 
מצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשב
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3
 
מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3
 
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולותמתמטיקה דיסקרטית - תורת הקבוצות - פעולות
מתמטיקה דיסקרטית - תורת הקבוצות - פעולות
 

הורשה והיררכיה של מחלקות

  • 1. ‫הורשה והיררכיה של מחלקות‬ ‫בדומה לחיים האמיתיים, בהם הורים מורישים תכונות מסוימות לילדיהם וילדים כפועל יוצא מכך יורשים תכונות אלו‬ ‫מהוריהם, כך באופן דומה לגמרי מתרחשת הורשה עבור קוד תוכנה כאשר התכונות המועברות הן משתנים ופונקציות.‬ ‫מחלקת ההורה (‪ )Base Class‬היא שתוריש למחלקת הילד (‪ )Derived Class‬את התכונות. ההורשה תתבצע באופן‬ ‫ציבורי, פרטי או מוגן.‬ ‫ראשית נעסוק בהורשה ציבורית. מבחינת כתיבה ההורשה תתבצע כך:‬ ‫...{ ‪.class DERIVED CLASS : public BASE CLASS‬‬ ‫כפי שהזכרנו במאמר "תכנות מונחה עצמים - מחלקות", לכל מחלקה יש בנאי והורס ועל כן, גם לתתי מחלקות יהיו קיימים‬ ‫אלמנטים אלו, שהרי אלו יעברו אליהן בהורשה.‬ ‫נניח ובנינו מחלקה מסוג ‪ ,Robot‬וכל הרובוטים יודעים לבצע 2 פעולות: לחשב ולאכול. כמו כן, לכל רובוט יש שם, רמת‬ ‫חוכמה והיכולת להיות שמח או עצוב. עם זאת, קיימים רובוטים בעלי תכונות ייחודיות המבדילות אותם מרובוטים אחרים.‬ ‫2‪ R2D‬למשל, יודע לדבר ספרדית, לעומתו אופטימוס פריים יודע לשנות צורה.2‪ R2D‬ואופטימוס פריים אינם חולקים‬ ‫תכונות אלו, אך הם כן חולקים את היכולת לבצע את הפעולות "חישוב" ו"אכילה" ולשניהם יש שם, רמת חוכמה והיכולת‬ ‫להיות שמח או עצוב.‬ ‫אם כן, כאן ניתן לראות בבירור את היופי שבהורשה.‬ ‫אם נצטרך לבנות מחדש את המחלקה של כל סוג של רובוט עם שינויים קלים בתכונה כזו או אחרת, אותה תכונה הייחודית‬ ‫לו, אנו נמצא את עצמנו במהרה משכפלים קטעי קוד ויוצרים קבצים עמוסים טקסט, דבר שבסופו של דבר יקשה עלינו‬ ‫להתמצא ולסייר בקטע הקוד ובפרויקטים גדולים יותר, אף יהיה בזבזני מבחינת משאבי מערכת, עבודת מעבד ושימוש‬ ‫בזיכרון.‬ ‫בחזרה לדוגמה שלנו, היות וכבר יש בידנו מחלקה בשם ‪ ,Robot‬על מנת להגדיר את המחלקות 2‪ R2D‬ואופטימוס פריים,‬ ‫כל שעלינו לעשות יהיה להשתמש בתכונות ההורשה באופן הבא:‬ ‫‪class R2D2: public Robot‬‬ ‫:‪{ public‬‬ ‫} ;"‪R2D2 () { cout << ּ R2D2 Robot Built‬‬ ‫} ;"‪∾R2D2(){cout << ּ R2D2 Robot Destroyed‬‬ ‫} ;"‪void SpeakSpanish () { cout << "asta – la – vista‬‬
  • 2. ‫וכנ"ל לגבי אופטימוס פריים. כך שבעצם יצרנו מחלקות חדשות שהתשתית שלהן היא מחלקה קיימת, מבלי לשכפל שורות,‬ ‫ובכך שמרנו על יעילות, צמצום וקריאות הקוד.‬ ‫מכאן שקיימת עדיפות עליונה לזהות את התכונות המשותפות ולהציג אותן במחלקת ההורה, כך שלא נצטרך לשכתב‬ ‫שורות קוד עבור מחלקות ילד שיוצרו בהמשך.‬ ‫נציין שמחלקת ההורה, ה – ‪ base class‬היא איזשהו רעיון מופשט, ועל כן נקראת גם ‪ ,Abstract Date Type – ADT‬כך‬ ‫שלעולם אנו לא באמת ניצור אובייקט מסוג ‪ ,Robot‬אלא תמיד רובוט מסוג מסוים, שהרי גם בחיים האמיתיים אנו לא‬ ‫מתייחסים לבנאדם כאל צורת חיים אלא יורדים בדרגות ההיררכיה עד לרמת השם של האדם, אך אם נחשוב על הנושא‬ ‫בצורה מבנית, נוכל לראות שאותו "יוסי" לדוגמא, משתייך למחלקה "גבר". אותו הגבר הוא תת מחלקה של "בן אדם" ואותו‬ ‫בן אדם הוא תת מחלקה של "צורת חיים".‬ ‫למחלקת "צורת חיים" יש גם תת מחלקה בשם "בעל חיים" ולה תת מחלקה בשם "יונק" שלה תת מחלקה בשם "כלב" ולה‬ ‫תת מחלקה בשם "לברדור".‬ ‫באופן דומה, אנו נרצה לייצר היררכית הורשה ברמת הקוד.‬ ‫בחזרה לדוגמא שלנו, על מנת ליצור רובוט מסוג 2‪ R2D‬בערימה (‪ ,)Free Store‬אנו נבצע יצירת אובייקט כמו מקודם:‬ ‫;)(2‪R2D2 * r2d2#1 = new R2D‬‬ ‫מה שהרווחנו כאן היא היכולת לרשום את השורה ;)"1#2‪r2d2#1  SetName ("R2D‬‬ ‫למרות שבהגדרת המחלקה 2‪ R2D‬עצמה, כלל לא מופיעה הפונקציה ‪ SetName‬וכנ"ל לגבי התכונה ‪ .Name‬אלו תכונות‬ ‫שיש לילד מעצם ההורשה מההורה.‬