תכנות מונחה עצמים (OOP) - הקדמה

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

מאת: ארז קלר

חלק 1 - הקדמה
 
מכונית


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



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

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

 
ביום יום, כולנו משתמשים בעשרות חפצים שאין אנו יודעים כיצד הם בנויים ומורכבים ואין לנו מושג קלוש כיצד הם מבצעים את תפקידם, ולמרות זאת אנו יודעים להשתמש בהם ולנצל את  הפונקציונאליות שלהם לטובתנו ותועלתנו.
לדוגמה: מחשב, טלפון סלולארי, נגן MP4, שלט רחוק וכו'.
האם, כמשתמשים, חוסר ההכרות עם הקרביים של אותם המכשירים הוא בעוכרנו?, לא וזו עובדה!
הכיצד זה יתכן?, כיצד ניתן לנהוג במכונית מבלי להכיר את הדרך בה היא ממלאת אחר ייעודה?,
כיצד ניתן להשתמש במחשב מבלי להבין לעומק את צורת הפעולה של המעבד וכיצד הכונן הקשיח כותב וקורא מידע וכיצד ניתן להשתמש בטלפון סלולארי מבלי להכיר את קרביו?.
זה ניתן משום שלמבנה הפנימי ולדרך הפעולה והמימוש הפנימי של אותם המכשירים אין משמעות עבור המשתמש בהם, כל שאנו צריכים להכיר הוא את "ממשק המשתמש" (ורצוי שהוא יהיה ידידותי).
בשביל לנהוג במכונית אנו צריכים לדעת להפעיל את הפונקציונאליות שלה (כיצד להתניע, כיצד לשלב הילוך קדמי/אחורי, כיצד להאט ולעצור, כיצד להדליק את האורות בחשיכה וכדומה) אולם אין אנו צריכים לדעת כיצד המכונית מבצעת וכיצד היא מגיבה לדרישות שלנו ממנה.
בשביל לצפות בטלוויזיה מספיק לדעת כיצד מדליקים אותה, כיצד בוחרים ערוץ, כיצד קובעים את רמת הקול.
אין צורך להבין ולהכיר את מבנה האנטנה וכיצד הטלוויזיה ממירה ומגבירה אותות אלקטרוניים ואנאלוגיים לתמונה וכיצד המכשיר מתמודד עם רעשים בקליטה.
אובייקטים הם "קופסאות שחורות", אנו יודעים מה הם מבצעים, אנו יודעים אלו פעולות ניתן לבצע איתם או עליהם,  אולם אין אנו יודעים כיצד הם מבצעים אותם.
וזוהי בדיוק המהות והכוונה של התכונה הראשונה – Encapsulation – ניתן להשתמש באובייקטים, אנו יודעים מהם מבצעים, אולם הדרך בה הם מבצעים את הפעולה סמויה ונסתרת מאיתנו.

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

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

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

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