O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

0

Compartilhar

Baixar para ler offline

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

Baixar para ler offline

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

Audiolivros relacionados

Gratuito durante 30 dias do Scribd

Ver tudo
  • Seja a primeira pessoa a gostar disto

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

  1. 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. 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‬אלו תכונות‬ ‫שיש לילד מעצם ההורשה מההורה.‬

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

Vistos

Vistos totais

566

No Slideshare

0

De incorporações

0

Número de incorporações

83

Ações

Baixados

4

Compartilhados

0

Comentários

0

Curtir

0

×