Object Oriented Architecture מבוא לתכנון מונחה עצמים

5 בApril 2013

 

מהו  Object Oriented ?

כיצד נתכנן מערכת
בחשיבה מונחית עצמים?

שאלת השאלות איפה
עוצרים כשמחפשים ישויות להגדרה במערכת שלנו?

נענה אחת אחת. אבל
תחילה מבוא.

התבקשתי לאחרונה
למסור הרצאה קטנה על מבוא ל
object oriented והעליתי לעצמי נקודות
בכתב כדי לסדר את המחשבה. הנה התוצאה בקיצור נמרץ.

תרחיש א’ (דמיוני
בהחלט):

אתה נכנס למסעדה,
ומבקש “תן לי מנה..” איזה? שואל המלצר.. “לא חשוב” אתה עונה..
“העיקר מנה..”

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

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

 

תרחיש ב’ (דמיוני
בהחלט):

אתה נכנס למוסך,
“יש בעיה” אתה אומר.. “מה הבעיה?” שואל המוסכניק?
“תשמע.. נפגשתי אתמול עם ע’ ובדרך חזור היו פקקים, הייתי עסוק בלהשתיק את
הרדיו, חמותי התקשרה בדיוק .. ואז החשיך והדלקתי תאורה ו.. ו.. ו.. …  

כן ובסוף מדובר על זה
שהנורה הקדמית הימנית לא עובדת.

“טוב אומר בעל
המוסך עכשיו מאוחר אני סוגר תבוא מחר בבוקר נחליף נורה..”

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

האם אפשר לתמצת את
הסיפור ל: <מנורה>  <דולקת?> <שלילי!>
<פסיק נקודה>.

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

 

תרחיש ג’ (דמיוני
בהחלט):

ג’ון הוא מנהל הרישום
של נתונים במשרד הפנים האמריקאי. ברשותו 300,000,000 נתונים של אזרחים.

ג’ון הוא לא חכם
במיוחד. יש לו 6 רשימות שונות שבנויות כך:

רשימת נתוני שם פרטי,

-“- שם משפחה,

-“- מספר אישי,

-“- כתובת,

-“- תאריך לידה,

-“- כתובת.

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

יום אחד חוזר בנו
מבית הספר ומספר לאבא שהיום למדו אותם מה זה טבלה..  “איך עובדת טבלה” שואל ג’ון?

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

ג’ון חושב לעצמו
“איזה יופי.. ניקח את ששת הרשימות של האזרחים ונצייר טבלה גדולה עם שישה עמודות
!! תגיד למורה שהוא גאון!! “

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

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

בשלישי ג’ון ממשרד
הפנים לא סידר את האזרחים כאובייקטים מסוג “אזרח” ולכן עבד פי שישה כדי
לשלוף נתונים מלאים של אזרח.

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

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

אני ניגש עכשיו לתכנן
את עץ האובייקטים עבור מבנה הנתונים:

א.    
אובייקט ראשי רכב.

ב.     
אובייקט גלגל

ג.     
אובייקט הגה

ד.     
אובייקט מנוע

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

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

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

 

 

הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *

3 תגובות

  1. יואב30 בMay 2013 ב 8:15

    יפה מאוד .

    Reply
  2. ערן רוסו20 בJanuary 2015 ב 11:16

    פוסט מוצלח וברור. עזר מאוד

    Reply