DCSIMG
מה זה בשבילי <O.O> - Lior Israel

Lior Israel

The magic and O.O world

מה זה בשבילי <O.O>

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

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

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

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

ל O.O ניתן להגיע בצורה מובנית אבל כמו בכל דבר בחיים זה יהיה ליד טיפת אומנות אף פעם לא מזיקה.

אני יכול לדבר הרבה על O.O אבל קבלו מאמר איכותי שמעביר את התורה על רגל אחת המאמר

תוכן התגובה

AsafShelly כתב/ה:

היי ליאור,

כרגיל מעניין ומאתגר.

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

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

* UX - שם קוד ל- "חווית המשתמש" מדבר על תהליכים.

* User Scenarios הם חלק עיקרי בניתוח מערכת וגם שם מדברים על תהליכים.

* תכנות מקבילי מחייב תכנון מקבילי וארכיטקטורה מקבילית וגם שם מדובר בעיקר על ניתוח תהליכים.

מכאן המסקנה שלי היא שאת האובייקטים יש לגזור מתוך ה- flow chart.

המשמעות לטעמי היא שהשימוש ב- OOD מוגבל ל- detailed design ולא לארכיטקטורה או top level design.

הסיבה היא שאם יש הגדרה של אובייקטים ב- top level design קשה מאד לבצע תיקונים כאשר יש שינוי של ה- flow, מה שיכול להגרם בעקבות דרישה של המשתמש.

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

אז יש קיום ל- OO אבל לא OO טהור כי יש חוקים שהם יותר חשובים מחוקי OO. למשל כללים שעוזרים להמנע מ- spaghetti flow (כמו עבודה בשכבות עם קריאות רק מלמעלה למטה ולא הפוך או רוחבי).

המאמר מדבר על מצב המערכת. כיום יש בעיה עם OO כמו שאנחנו רגילים אליו כיוון שכיום ה- Call Stack מתאר את המצב של המערכת. כאשר יש קריאות בין thread-ים אז אי אפשר לתאר את המצב האמיתי של המערכת. זה גורם לכך שמתכנתים לא מבצעים קריאות בין thread-ים ובמקום זה משתמשים בנעילות.

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

כל מודל שמצליח לענות על זה (כמו חלק מהמאמר המתואר) בעצם מנסה לכופף את העולם כדי שיהיה אפשר לתאר אותו בשפת OO. זה בערך כמו לעבוד unsafe בשפת C#. לכופף הכל כדי להתאים את העולם לפי איך שאני רגיל לחשוב.

יש סיבה טובה שב- kernel לא אוהבים לעבוד עם OO. האם מישהו יכול להסביר למה?

אסף

# May 12, 2011 4:19 AM

גרי רשף כתב/ה:

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

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

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

# May 12, 2011 10:13 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 6 and 2 and type the answer here:


Enter the numbers above: