מה זה תכנות מונחה עצמים? מאיפה מתחילים?

תכנות מונחה עצמים – Object Oriented Programming

דניאל ברודסקי Daniel Brodsky

סקירה מהירה

2023


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


מה הוא עצם?

עצם, הוא "משהו". משהו מסוים. באנגלית – אובייקט. עצם יכול להיות מטאטא, עצם יכול להיות בן אדם, עצם יכול להיות כוכב לכת, עצם הוא "משהו" מסוים, "דבר" כלשהו שקיים ונוכח.

הגדרה של האקדמיה ללשון העברית:  "דבר־מה הקיים במציאות ונקלט בחושים (בלועזית: אוֹבְּייקְט)".

לעצם יכולות להיות תכונות מסוימות כמו: צבע, גודל, קול, מהירות.

עצם לא מופיע משום מקום, לכל עצם יש תהליך בו הוא נוצר, בין אם על ידי בני אדם או על ידי הטבע בדרך כלשהי:

בניין – אנחנו, כבני אדם, בונים אותו.

יצורים חיים וצמחים – תהליכי רוויה בשילוב גורמי סביבה (כמו השמש) יוצרים אותם.

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


אז מה זה תכנות מונחה עצמים?

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

האם החפץ הזה דומם? האם הוא צומח? האם הוא חי? האם הוא מכונית? האם הוא מחשבון? האם הוא ילד? האם הוא עץ?

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

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

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

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

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


ממה עצמים בג'אווה מורכבים, מה כל מכיל או יכול להכיל?

כל עצם בג'אווה, נקרא גם "אובייקט" (object).

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

אז מה בעצם מכיל המתכון (המחלקה) של כל אובייקט?

  • כל מחלקה מורכבת מאותם הדברים שאנחנו, כבני אדם, רואים ומכירים בעצמים בחיים האישיים שלנו: צבע העצם, גודל העצם, שם העצם ועוד..לדברים האלה, שמתארים כל עצם ועצם קוראים "תכונות", ובג'אווה לכל מחלקה יש תכונות משלה שנקבעות מראש או במעמד יצירת המחלקה. לדוגמא, אם נרצה ליצור מחלקה של רכב – נוכל לקבוע כי עבור כל הרכבים עובי הצמיגים יהיה אותו הדבר, ויהיה מוגדר מראש, אך הצבע ייבחר רק במעמד יצירת הרכב. את התכונות של כל עצם אנחנו כותבים כ"שדות" (fields), והם מחזיקים את המידע ואת המידע הפנימי של העצם. 
  • בחיים שלנו אנחנו רגילים באופן טבעי לשייך עצמים לפעולות, וגם להפך, פעולות לעצמים.                                                           אם אנחנו שומעים על הפעולה "לנסוע" – אנחנו נשייך אותה באופן טבעי לכלי רכב, אם נשמע על פעולת "אכילה" נשייך את זה למאכלים וכך הלאה. גם בתכנות מונחה עצמים, ובג'אווה, למחלקות יכולות להיות מוגדרות פעולות. אותן הפעולות נקראות "שיטות" (methods), בשפת היום יום אף אחד לא אומר "שיטה" אלא אומרים "מתודה" או "מתודות". המתודות, הן האחראיות על התנהגות העצמים שנוצרים מהמחלקה. כל עצם, אובייקט, שיווצר מהמחלקה, יכיל את אותן המתודות, כי כמו שאמרנו, מחלקה היא בעצם המתכון ליצירת העצמים, וכל עצם יכיל את מה שיש במתכון: את אותן המתודות ואת אותן התכונות. אם נמשיך בדוגמא של הרכב, נוכל להגיד כי למחלקה של רכבים יהיו מתודות של: נסיעה, בלימה ועוד מתודות שמתארות פעולות שניתן לחשוב עליהן כמשותפות לכלל הרכבים בין אם משאית או ג'יפ, בין אם רכב לבן או צהוב, ולכן כל אובייקט שיווצר מהמחלקה הזו, יכיל את המתודות והפעולות הללו.

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

דניאל ברודסקי Daniel Brodsky