כיתה מופשטת נגד ירושה
 

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

מה זה שיעור מופשט?

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

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

מהי ירושה?

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

מה ההבדל בין כיתה מופשטת וירושה?

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