מושג חשוב בתכנות מונחה עצמים הוא ירושה. זה מספק דרך חפצים להגדיר קשרים זה עם זה. כפי שהשם מרמז, אובייקט מסוגל לרשת מאפיינים מאובייקט אחר.
במונחים קונקרטיים יותר, אובייקט מסוגל להעביר את מצבו והתנהגויותיו לילדיו. כדי שירושה תעבוד, על העצמים להיות בעלי מאפיינים המשותפים זה לזה.
בתוך ג'אווה, ניתן לקחת שיעורים משיעורים אחרים, אותם ניתן לקחת מאחרים וכן הלאה. הסיבה לכך היא שהם יכולים לרשת תכונות מהכיתה שמעליה, עד לשיעור האובייקטים העליון.
דוגמא לירושה של ג'אווה
בואו נגיד שאנחנו מכינים מעמד בשם אנושי שמייצג את המאפיינים הפיזיים שלנו. זו כיתה גנרית שיכולה לייצג אותך, אותי או כל אחד אחר בעולם. מצבה עוקב אחר דברים כמו מספר הרגליים, מספר הזרועות וסוג הדם. יש לו התנהגויות כמו לאכול, לישון והליכה.
אנושי טוב לקבל תחושה כוללת של מה שגורם לכולנו להיות זהים, אך הוא לא יכול, למשל, לספר לי על הבדלים מגדריים. לשם כך, עלינו להכין שני סוגים חדשים בכיתה הנקראים גבר ואישה. מצבם והתנהגויותיהם של שני המעמדות הללו יהיו שונים זה מזה בהרבה אופנים למעט אלה שהם יורשים מאנוש.
לפיכך, ירושה מאפשרת לנו להקיף את מצבו של הילד בכיתה ואת התנהגויותיו. לאחר מכן הכיתה יכולה להרחיב את המצב ואת ההתנהגויות כדי לשקף את ההבדלים שהוא מייצג. ההיבט החשוב ביותר של מושג זה לזכור הוא שכיתת הילדים היא גרסה מיוחדת יותר של ההורה.
מה זה סופר קלאס?
במערכת היחסים בין שני אובייקטים, סוג-על הוא השם שניתן לכיתה שמורשת ממנו. זה נשמע כמו חוג סופר דופר, אבל זכרו שזו הגרסה הגנרית יותר. שמות טובים יותר לשימוש עשויים להיות מעמד בסיס או פשוט כיתת הורים.
אם ניקח הפעם דוגמה בעולם האמיתי, נוכל להחזיק מעמד-על שנקרא אדם. מצבו מחזיק בשמו של האדם, בכתובתו, בגובהו ובמשקלו, ויש לו התנהגויות כמו לעשות קניות, להכין את המיטה ולראות טלוויזיה.
נוכל להכין שני שיעורים חדשים שירשו מאדם שנקרא סטודנט ועובד. מדובר בגרסאות מתמחות יותר מכיוון שלמרות שיש להם שמות, כתובות, צפה בטלוויזיה והופכים לקניות, יש להם גם מאפיינים השונים זה מזה.
לעובד יכולה להיות מדינה המחזיקה בתואר ומקום עבודה ואילו סטודנט עשוי להחזיק נתונים על תחום לימוד ומוסד לימודים.
דוגמא לסופר קלאס:
תאר לעצמך שאתה מגדיר כיתת אדם:
אדם בכיתה ציבורית. { }
ניתן ליצור מחלקה חדשה על ידי הרחבת הכיתה הזו:
עובד בכיתה ציבורית מאריך אדם. { }
כיתת ה- person אמורה להיות כיתת העל של שכבת העובדים.
מהי תת-סוג?
במערכת היחסים בין שני אובייקטים, תת-סוג היא השם שניתן לכיתה היורשת מהשכבה העל. למרות שזה נשמע מעט מושך, זכרו שמדובר בגרסה המיוחדת יותר לסדרת העל.
בדוגמה הקודמת, סטודנטים ופועלים הם תת-הקבוצות.
תת-קבוצות יכולות להיקרא גם כיתות נגזרות, כיתות ילדים או כיתות מורחבות.
כמה תת-סוגים אוכל לקבל?
אתה יכול לקבל כמה תתי משנה שאתה רוצה. אין הגבלה לכמה תת-קבוצות יכולות להיות. באופן דומה, אין מגבלה על מספר דרגות הירושה. ניתן לבנות היררכיה של מעמדות על תחום מסוים של משותפות.
למעשה, אם אתה מסתכל על ספריות Java API תראה דוגמאות רבות של ירושה. כל כיתה בממשקי ה- API עוברת בירושה מכיתה הנקראת java.lang. חפץ. לדוגמה, בכל פעם שאתה משתמש באובייקט JFrame, אתה בסוף שורה ארוכה של ירושה:
java.lang. חפץ. מורחבת על ידי java.awt. רכיב. מורחבת על ידי java.awt. מיכל. מורחבת על ידי java.awt. חלון. מורחבת על ידי java.awt. מסגרת. מורחבת על ידי javax.swing. JFrame.
ב- Java, כאשר תת-משנה יורשת ממעמד-על, היא מכונה "הרחבת" סוג-העל.
האם תת-המחלקה שלי יכולה לעבור בירושה ממסגרות-על רבות?
לא. ב- Java תת-סוג יכולה להרחיב רק סוג-על אחד.
מדוע להשתמש בירושה?
ירושה מאפשרת למתכנתים לעשות שימוש חוזר בקוד שכבר כתבו. בדוגמה של מעמד אנושי, איננו צריכים ליצור שדות חדשים בשיעור גבר ואישה כדי להחזיק את סוג הדם מכיוון שאנו יכולים להשתמש בשדה שעבר בירושה מהכיתה האנושית.
יתרון נוסף בשימוש בירושה הוא בכך שהיא מאפשרת לנו להתייחס לתת-משנה כאילו הייתה סוג-על. לדוגמה, נניח שתוכנית יצרה מספר מקרים של אובייקטים גבר ואישה. ייתכן שהתוכנית צריכה לקרוא להתנהגות השינה של כל האובייקטים הללו. מכיוון שהתנהגות השינה היא התנהגות של סוגת העל האנושית, אנו יכולים לקבץ את כל חפצי הגבר והאישה יחד ולהתייחס אליהם כאילו היו חפצים אנושיים.