ABA


"שאלה כללית על OOP"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10011 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10011
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות, דרג אמינות חבר זה
   13:51   02.08.10   
אל הפורום  
  שאלה כללית על OOP  
 
   יש לי וויכוח כאן עם חברים מהעבודה כמה נכון לעשות כזה דבר.
אני אנסה לפשט את זה כמה שיותר .
יש לי אובייקט של "בית"
ועוד אובייקט מסוג "חדר"

האם נכון שבתוך "חדר" יהיה מאפיין (PROPERTY) שיחזיק בתוכו INSTANCE ל"בית" ?

זאת אומרת שבבנאי של "חדר" או באיזה SET פונקציה הפונקציה תקבל INSTANCE של "בית" ותשמור אותו במאפיינים של ה"חדר" ?

-------

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

סתם מעניין מה אתם חושבים.
תודה.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אני לא רואה סיבה לעשות את זה.. ronen333  02.08.10 13:59 1
     אתה יכול לפרט אלו דרכים אחרות bmaorlo  02.08.10 14:07 2
         שמע לקבוע PARENT זה חוסך זכרון ronen333  02.08.10 16:01 5
  מכתב akoka2 02.08.10 14:32 3
  מכתב Deuce  02.08.10 15:45 4
  לדעתי זה יחס של Composition david19  03.08.10 03:44 6
     אולי לא INSTANCE אבל נראה לי שבשביל יעילות כדאי שיהיה Ice Cold  03.08.10 11:01 7
         אתה לא משתמש ב-OOP כדי לייעל את התכנית. Deuce  03.08.10 11:40 8
             אני מסכים ולא מסכים ג'וני הקטן 03.08.10 13:04 9
                 יש חריגים וחשוב להדגיש את זה. Deuce  03.08.10 13:11 10
                     אז אנחנו מסכימים :) ג'וני הקטן 03.08.10 13:22 12
             תראה במקרה של בית, אולי זה באמת לא נכון, אני לא רואה Ice Cold  03.08.10 13:20 11

       
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   13:59   02.08.10   
אל הפורום  
  1. אני לא רואה סיבה לעשות את זה..  
בתגובה להודעה מספר 0
 
   אם יש לך סיבה ממש טובה לעשות את זה תעשה את זה, אבל אם אין.. למה שתעשה משהו כזה?
אם זה כדי לדעת איזה חדר משתייך לאיזה בית, זה אפשרי והגיוני.. אבל לא חסר דרכים אחרות שהן הגיוניות לעשות משהו כזה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות, דרג אמינות חבר זה
   14:07   02.08.10   
אל הפורום  
  2. אתה יכול לפרט אלו דרכים אחרות  
בתגובה להודעה מספר 1
 
   איך אתה יכול לדעת על ידי חדר לאיזה בית הוא שייך ?
בלי לעשות משהו כזה ?
אתה יכול לפרט קצת בבקשה ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות, דרג אמינות חבר זה
   16:01   02.08.10   
אל הפורום  
  5. שמע לקבוע PARENT זה חוסך זכרון  
בתגובה להודעה מספר 2
 
   יעיל, וקל.
אבל לא תמיד התנאים מאפשרים לך לתת הפניה לדבר כזה.
זה כל מה שאני אומר..
לפעמים אולי תרצה לשמור רק את הID שלו.
אתה גם יכול לסדר מידע בצורה כזו או אחרת שתדע לאיזה בית הוא משתייך..
זה באמת לוי בהרבה תיכנונים, והלוגיקה של התוכנית שלך.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

דרג אמינות חבר זה
   14:32   02.08.10   
אל הפורום  
  3. מכתב  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 02.08.10 בשעה 14:54 בברכה, akoka2
 
איך שאני רואה את זה, 2 מחלקות נפרדות ולהעביר לחדר מופע של הבית שלו בקונסטרקטור.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   15:45   02.08.10   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 0
 
לדעתי, מבחינה קונספטואלית לא יהיה נכון לעשות את זה.
זה לא רק שחדר מוכל בבית, אלא שזה ברמה של חדר לא יכול להתקיים ללא בית. בספרות המקצועית של OOP זה נקרא Aggregation.
במצב כזה נהוג לפעמים לעשות את המחלקה Room כמחלקה פנימית של בית כך שהגישה אליה תהיה דרך בית. לטעמי זאת החשיבה ההגיונית ביותר, שכן חדר כישות עצמאית לא יכול בכלל להתקיים בלי בית (במקרה שאכן חדר נמצא - כמובן - בתוך בית).
כאשר חדר הינו מחלקה פנימית של בית, הגישה אליו תהיה דרך הבית והמתודות של אובייקט הבית יכולות לגשת לכל עצם בבית, בפרט המתודות שאחראיות על החדר.

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

ומה אם אין מחלקות פנימיות ואין שום דרך להתקמבן עם תבנית עיצוב שמדמה מחלקה פנימית? תמיד יש!
ואם אני מתעקש?
אוקי, תמיד אתה יכול לעשות מחלקה של חדר ולאתחל ב-CTOR את הדברים שאתה רוצה מהבית - אני מניח שאתה לא צריך את כל הבית כדי לתאר חדר.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
david19 
חבר מתאריך 27.4.03
4784 הודעות, דרג אמינות חבר זה
   03:44   03.08.10   
אל הפורום  
  6. לדעתי זה יחס של Composition  
בתגובה להודעה מספר 0
 
   כי כשאין בית, אין חדרים. כלומר, כשאני הורג את המופע של הבית, אני הורג את המופעים של החדרים. אין לי בהם כל שימוש.
לבית יש INSTANCES של כל החדרים, לחדרים אין INSTANCE של הבית.


Today Job עובדים ברגע
Bigtech אתר הבית שלי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   11:01   03.08.10   
אל הפורום  
  7. אולי לא INSTANCE אבל נראה לי שבשביל יעילות כדאי שיהיה  
בתגובה להודעה מספר 6
 
REFERENCE ל-PARENT...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   11:40   03.08.10   
אל הפורום  
  8. אתה לא משתמש ב-OOP כדי לייעל את התכנית.  
בתגובה להודעה מספר 7
 
אתה משתמש ב-OOP כדי לבטא את הקונספט ואת הפונקציונליות בצורה הכי טובה.
ברגע שאתה משתמש בכוח של OOP כדי "לייעל" אז:
א. סביר להניח שלא ייעלת כלום, אלא פשוט לא עבדת נכון - בד"כ פתרון שלא מתאר בצורה טובה את הפונקציונליות הוא לא פתרון יעיל (כלומר קיים פתרון שכן מבטא את הפונקציונליות שטוב לפחות כמו הפתרון שבחרת).
ב. דרסת את כל עקרונות התכנות.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ג'וני הקטן
חבר מתאריך 24.6.10
1166 הודעות, דרג אמינות חבר זה
   13:04   03.08.10   
אל הפורום  
  9. אני מסכים ולא מסכים  
בתגובה להודעה מספר 8
 
   אם הפגיעה היא חמורה בקונספט הOOP אז זה לא נכון לעשות את זה..
אבל במקרה יצא לי לתכנת מערכת דיי גדולה עם מקרה דומה..
בגדול אני יסביר שהיה SESSION שבתוכו יש כמה CYCLES ולכל CYCLE כזה יש בתוכו FRAME..
והייתי צריך לבצע כל מיני פעולות ניהול עליהם לפי אלגוריתם AI.. עזוב חח
בקיצור אני עשיתי REFFERENCE בתוך CYCLE ל SESSION... כי מבחינת יעילות זה היה פשוט עדיף בהרבה.. והיו פונקציות שעבדתי עם רשימת CYCLES ולא רשימת SESSIONS... (לפעמים כי פשוט עוד לא יצרתי את הSESSION.. כי SESSION לא יכול להתקיים בלי CYCLE אחד מלא של כמות מינימלית של פריימים...)
בקיצור ישבתי שעות על הDESIGN הזה וזאת הדרך הכי נכונה ויעילה שמצאתי...
ברור שניתן היה לחפש את הCYCLE ברשימת SESSIONS אבל זה היה לא יעיל בעליל.


לכותב האשכול:
לפי דעתי אתה צריך סיבה ממש ממש טובה לעשות את זה כי המרחק מפה ל"הריסת כל קונספט הOOP" הוא קצר לפי דעתי..
צריך להיזהר עם זה.. אבל שיש נסיבות אז יש סיבות :P


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות, דרג אמינות חבר זה
   13:11   03.08.10   
אל הפורום  
  10. יש חריגים וחשוב להדגיש את זה.  
בתגובה להודעה מספר 9
 
במקרה שלך אגב היחס היה דו כיווני כך שזה היה בסדר לעשות רג'יסטר מהאחד לשני.

התשובה שלי כמובן היא באופן כללי, לפעמים אתה משתמש גם בכלים שיש עליהם טאבו מוחלט אבל באופן כללי לא.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ג'וני הקטן
חבר מתאריך 24.6.10
1166 הודעות, דרג אמינות חבר זה
   13:22   03.08.10   
אל הפורום  
  12. אז אנחנו מסכימים :)  
בתגובה להודעה מספר 10
 
   יש מקרים אבל צריך להיזהר :P


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק, 36 נקודות
   13:20   03.08.10   
אל הפורום  
  11. תראה במקרה של בית, אולי זה באמת לא נכון, אני לא רואה  
בתגובה להודעה מספר 8
 
שום מטרה שחדר יצטרך לדעת לאיזה בית הוא שייך למשל.

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

כשאמרתי REFERENCE לאו דווקא התכוונתי REFERENCE ל-INSTANCE של הבית, מזהה מספיק בהחלט, אפילו ברמת ID.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net