
Car לא מתארת רכב מסוים. כדי ליצור משאית גרירה אפשר להעתיק את כל המאפיינים, אבל זה שכפול קוד.class TowTruck : Car אומר שמשאית הגרירה יורשת מ-Car, ולכן יש לה שם, שנה וצבע בלי לכתוב אותם שוב.Tow שקיימת רק אצלה ולא ב-Car רגיל.BigTowTruck, יורשת מ-TowTruck, ולכן מקבלת את כל מה שיש לאב שלה.protected ב-TowTruck, ורק המחלקה היורשת רואה אותה.class TowTruck : Carprotected int towCapacity;הטקסט המלא של הדקות הראשונות בהרצאה «הורשה - Inheritance (הסבר נוסף)» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, זאת ההרצאה השנייה בסדרת הרצאות בנושא של Object Oriented Programming. בהרצאה הזאת אנחנו נלמד על הכלל השני, על העיקרון השני ב-OOP, שנקרא Inheritance, הורשה.
אז אנחנו נלמד בהרצאה הזאת על מה זה למעשה הורשה, זה נקרא Inheritance, ונלמד גם על מודיפייר חדש שנקרא Protected. למדנו על Public, על Private, היום אנחנו נלמד על מה זה Protected ואיך זה מתקשר בעצם לעיקרון הזה של inheritance.
אז לפני שאני בכלל אתחיל עם הנושאים של השיעור, אני רוצה לתת איזה הדגמה קטנה. אני בטוח שחלק מכם שצפיתם עד עכשיו בהרצאות, שאלתם את עצמכם לגבי הדוגמה שנתנתי.
הדוגמה הזאת שאנחנו עבדנו איתה במהלך כל ההרצאות של ה-class car. אז אמרתי שיש פה class car ואנחנו יכולים לעשות איתה כל מיני פעולות, יש לה כל מיני מאפיינים, אבל לא ראינו באמת דוגמה ממשית.
אז יש לי במקרה איזו תוכנית מהאינטרנט של משחק עם רכב שפשוט ייתן לכם קצת, ימחיש לכם שזה נראה קצת מפחיד. אז הדוגמא הזאת תמחיש לכם אולי מה אנחנו בעצם עושים פה עם הקלאס הזה.
אז בואו נתחיל לשחק. כמו שאמרנו, יש לנו פה רכב, אוקיי? והרכב הזה יכול להיות מיוצג על ידי הקלאס הזה שאנחנו בנינו פה, אוקיי? יש לו צבע, כמו שאתם רואים פה, יש לו את הצבע שלו, גלגלים.
אנחנו יכולים להגיד לו, בזה שאנחנו קוראים לפונקציה לנסוע, אנחנו למעשה מורים לו לנסוע. אז הוא עכשיו מתחיל לנסוע. אם אנחנו רוצים שהוא יעצור, אנחנו אומרים לו לעצור.
אם אנחנו רוצים שייסע אחורה אולי, אנחנו אומרים לו שייסע אחורה. אז כמו שאתם רואים, הדוגמה הזאתי, כל הדוגמה שיצרנו פה של הקלאס car שעבדנו איתה במהלך הרצאות, היא לא סתם דוגמה תיאורטית שאין לה שום שימוש במציאות.
אז אתם רואים שאנחנו כן יכולים להשתמש עם זה בעולם התכנות. אוקיי, אז הסטייה הצידה מהנושא. בואו נחזור לנושא שלנו. אז אנחנו יצרנו קלאס של car שמיישג איזה רכב כלשהו, יש לו כל מיני מאפיינים ויש לו כל מיני פונקציות.
עכשיו, בוא נגיד, הקלאס הזה של car הוא, אפשר להגיד שהוא קצת כללי מדי. זאת אומרת, מה אם אנחנו רוצים לדוגמה ליצור משהו ספציפי יותר?
מה אם אנחנו רוצים אחר כך ליצור לדוגמה מכונית גרירה, גרר, או משאית גרירה, אוקיי? ואנחנו רוצים שלמשאית גרירה האלה יהיו כל מיני מאפיינים וכל מיני פונקציות.
עכשיו, משאית גרירה היא גם סוג של רכב. אז בואו נגיד, יש לנו אפשרות אחת. אפשרות אחת, אנחנו נכנס לדבר הבא. אנחנו הולכים ליצור קלאס חדש, ולקרוא לו tow truck, רכב גרירה או משאית גרירה, איך שאתם רוצים לקרוא לזה, אוקיי?
ועכשיו למעשה להעתיק את כל מה שרשמנו פה מבחינת ה-Name, EAR, כל הדברים האלה, אני אעשה קופי ופייסט, אוקיי?
כלומר, יש למכונית הזאת את אותם מאפיינים שיש יש לה מכונית שיצרנו פה, יש לה שם מן הסתם לכל רכב, יש לו שם, יש לו את השנה שהוא נוצר, יש לו צבע, אלה מאפיינים שהם אפשר להגיד גלובליים לכל רכב, הם רלוונטיים, הם כלליים לכל רכב, לכל רכב יש אותם.
אבל אנחנו רוצים שלרכב הזה למעשה יהיה לו נגיד פונקציה שנקראת לדוגמה tow, גרור, תתחיל לגרור את הרכב, tow זה לגרור.
אז tow זה למעשה משהו ייחודי, למכונית הספציפית הזאת שיצרנו פה, אין אותה פונקציה הזאתי בקלאס מסוג רכב, אוקיי? אבל בקלאס מסוג רכב יש לנו כל מיני דברים שיש אותם, הם משותפים גם לקלאס הזה וגם לקלאס הזה, אז זה נראה קצת בוא נגיד מיותר, אנחנו צריכים להעתיק עכשיו את כל המשתנים האלה פה,
ומה אם ניצור עכשיו קלאס אחר של מכונית מירוץ? גם למכונית מירוץ יש שם, יש לה שנה, יש לה צבע, אולי לצורך אף אחד קלאס של מכונית משפחתית או מיני-וואן.
הדברים האלה הם דברים שיש אותם לכל רכב, הם דברים כלליים, אנחנו רוצים להיות ספציפיים יותר. אז בדיוק בשביל הדבר הזה קיימת דרך שאנחנו לא נצטרך לשכפל עכשיו להעתיק את כל הדבר הזה.
והדרך הזאת נקראת inheritance, או בעברית הורשה, וזה למעשה הכלל השני באובג'קט אוריינטד פרוגרמינג. במקום שאנחנו עכשיו ניקח את כל הדברים האלה ונעתיק אותם שוב, בואו נמחוק אותם, אוקיי?
ואנחנו עושים את הדבר הבא. אנחנו יצרנו פה את הקלאס של tow truck, שזה משאית גרירה. אנחנו עכשיו עושים רווח, רושמים נקודתיים ורושמים car.
מה שרשמתי פה עכשיו זה שהקלאס הזה שיצרתי, אוקיי? שנקרא tow truck, משאית גרירה, הוא יורש את מה שיש לקלאס car שיצרתי פה למעלה.
אנחנו מבינים אחרות, כל מה שיש לcar יש גם לtow truck. זה מתאים לcar, יש לך name ו-ear ו-caller ו-ease roof. הדברים האלה שייכים גם לtow truck.
כי למעשה car זה מין הגדרה כללית, זה רכב. אבל לא ציינו בדיוק איזה רכב. כתבנו car, car יכול להיות כל סוג של רכב. אבל אנחנו רוצים להיות ספציפיים ולהגיד, עכשיו אנחנו רוצים ליצור class שנקרא מכונית משאית גרירה.
אז אנחנו צריכים להיות מאוד מאוד ספציפיים, פה והספציפיות הזאתי דורשת מאיתנו לתת דברים מיוחדים לקלאס הזה למשל רכב רגיל רכב רגיל לדוגמה רכב פרטי הוא לא משמש לגרירה אז לא יהיה לו את הפונקציה הזאתי של tow של לגרור אז כמו שאנחנו רואים בזה שאנחנו עכשיו עושים את הדבר הזה את הפעולה הזאתי אנחנו למעשה יורשים