תכנות מונחה עצמים (OOP) - הורשה - מבוא תיאורטי

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

 הורשה - מבוא תיאורטי
 
מאת: ארז קלר


עט, עפרון, מחדד וטוש הם כלי כתיבה.
מכונית, אופנוע, רכבת, אופניים ומטוס הם כלי תחבורה.
אורן, אלון, זית, תפוז, ותפוח הם עצים.
מנהל, מורה ותלמיד הם אנשים.
בחיי היומיום אנו נוהגים לשייך אובייקטים שונים לקבוצות מוגדרת, כולנו יודעים שתפוח, תמר, תפוז, בננה, קלמנטינה ואגס הם פירות, כיצד אנו יודעים זאת?,
כולנו מכירים ויודעים מה זה לוח אם, וזיכרון, וכרטיס מסך, ומעבד, ודיסק קשיח, מקלדת וכו', וכולנו יודעים שהם רכיבי מחשב.
מאפיין מרכזי בחשיבה האנושית הוא הניסיון לקשור בין אובייקטים שונים, ליצור מעין "קירבה משפחתית" בין האובייקטים.
בהתנהגות היומיומית שלנו, כבני אדם, אנו מסווגים ומתייגים אובייקטים קרובים לקבוצות משותפות בהסתמך על המכנה המשותף שלהם.
 
למרות שלמכונית, משאית, מטוס ורכבת יש תכונות משותפות רבות,כגון:
מהירות, אמצעי ההנעה, שנת ייצור, מספר רישוי, שם יצרן וכו',
ולמרות שלכולם יש גם התנהגויות משותפת:
עצירה, האצה, התנעה, כיבוי, שינוי כיוון נסיעה וכו',
לכל אחד מהם יש גם אוסף תכונות והתנהגויות שונות וייחודיות.
המושג "כלי תחבורה" הוא מושג כללי המייצג את המכנה המשותף של משפחת אובייקטים בעלי קירבה מסוימת, כל ארבעת האובייקטים הנ"ל הם מקרים פרטיים של כלי תחבורה.
מקרה פרטי מייצג התמחות, בעוד שהמכנה המשותף מייצג כלליות.
 
מהי כלליות? (Generalization)
כולם יודעים שכלי תחבורה מוביל נוסעים או מטענים, ושלכל כלי תחבורה יש מנוע כלשהו (בנזין, דיזל, חשמלי וכו'), אולם המושג כלי תחבורה הוא כללי מידי ואינו מרמז על סוג הכלי בו מדובר.
המשפט "רכשתי רהיט חדש" יכול להתייחס לארון, שולחן, מיטה, מדף, כיסא.
המשפט "אני עובד בחברת Shoshana LTD " מוביל למסקנה שהדובר נושא בתפקיד בחברה האמורה, אולם באיזה תפקיד?, לזה אין תשובה.
כלליות מייצגת קבוצה של אובייקטים מבלי לפרט על מהות האובייקט הממשי.
 
מהי התמחות? (Specialization)
"נסעתי ברכבת", "נהגתי במכונית", "טסתי במטוס".
לא רק הפעילות ברורה, ברור גם באיזה אובייקט מדובר.
"רכשתי ארון בגדים" – הפעם ברור יותר מה רכשתי .
"אני איש מכירות בחברת Shoshana LTD"" – הפעם גם ברור מה התפקיד המדויק שלי בחברה.
 
הורשה היא התכונה השנייה של כל שפה מונחית אובייקטים.
באמצעות הורשה נוכל להגדיר מחלקות חדשות המתבססות על מחלקות קיימות.
הורשה מביאה לעולם מונחה העצמים את אותה התפיסה היומיומית שלנו, באמצעותה מסווגים את האובייקטים השונים לקבוצות אשר מספקות מכנה משותף זהה.
הורשה מספקת למחלקה יכולת לרשת תכונות והתנהגויות ממחלקה קודמת.
 
מקובל להגדיר את המחלקה הקיימת כמחלקת הבסיס (Base Class), ואת המחלקה היורשת כמחלקה נגזרת (Derived Class):
דיאגרמת הורשה Derived:Base
 
מחלקה היורשת מקבלת ממחלקת הבסיס את כל מה שהוגדר בה, הן את התכונות (Data Members) והן את המתודות  (Methods)  ומוסיפה עליהן תכונות ומתודות משל עצמה.

 
ניתן לתאר את הקשרים בין מחלקת הבסיס (Base) למחלקה הנגזרת (Derived) כיחסי
" Is a ". לדוגמה: Horse is a Mammal ,Chair is a Furniture.


 
דוגמה להורשה
נתונות שתי המחלקות הבאות:
דיאגרמה של המחלקה Circle ושל המחלקה Rectangle
האחת מייצגת עיגול והשנייה מלבן, שתי המחלקות מגדירות את המיקום של הצורה במרחב ואת הצבע.
המחלקה Circle מגדירה בנוסף גם את רדיוס העיגול והמחלקה Rectangle , בנוסף, מגדירה את הרוחב והגובה.
המיקום (X,Y) והצבע (Color) הינן תכונות המשותפות לשתי המחלקות.
כאשר נקלוט ערכים לתכונות נרצה לבדוק את תקיפותן, לא נרצה ש-X או Y יכילו מספר שלילי, או שהן יכילו ערך הגבוה מהערך המקסימאלי המותר,ולא נרצה שהצבע יכיל ערך לא קיים.
במקרה זה הבדיקה תעשה הן במחלקה Circle והן במחלקה Rectangle משום שהתכונות הן פרטיות למחלקה ורק מתודה של המחלקה תוכל לגשת אליהן.
מכיוון שכך שכפלנו את קוד הבדיקה וזה רע מאוד.
זה רע מאוד כי שיכפול קוד הבדיקה יוצר בעיות קשות בתחזוקה של התוכנית ומעודד שגיאות לוגיות.
הפיתרון לכך הוא למצוא את אותן תכונות משותפות וליצור מהן מחלקה חדשה.
את הבסיס המתמטי להורשה ניתן למצוא אי שם בכיתה ג' או ד' שם למדנו שאת הביטוי :
AB+AC ניתן לייצג בצורה הבאה: A(B+C).
ולכן, באיור התכונות X,Y ו- Color הן תכונות משותפות:
המכנה המשותף
 
נגדיר מחלקת בסיס משותפת:
 
מחלרת הבסיס BaseShape
במחלקת הבסיס יוגדרו כל התכונות והמתודות המשותפות.
המחלקות Circle ו- Rectangle ירשו אותה.
לדוגמה:
הורשה


המחלקות Rectangle ו- Circle אינן צריכות להגדיר את התכונות X, Y, Radius , הן מוגדרות במחלקה BaseShape.
המחלקה BaseShape הינה מחלקה כללית, היא יכולה להיות מחלקת הבסיס של כל צורה כלשהיא, ומכיוון שכך, אנו יודעים שמדובר בצורה גיאומטרית כלשהיא, אולם אין אנו יודעים באיזו צורה מדובר.
המחלקות Circle ו- Rectangle הינן מחלקות מתמחות המגדירות צורות ברורות וחד משמעיות.

 





כל הזכויות שמורות למחבר ©