object oriened and swtich

vinney

Well-known member
הממשק תלוי במערכת

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

צונאמי

New member
שאלה

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

gmorph

New member
לא נראה לי שיש DESIGN

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

צונאמי

New member
למשל

סתם דוגמא: הוספה של משתמש חדש במערכת. GUEST לא יכול ליצור חשבון משתמש חדש. ADMIN כן יכול ליצור חשבון משתמש חדש.
 

gmorph

New member
לא מספיק מפורט

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

צונאמי

New member
שוב אני חוזר זה לצרכי דיון בלבד.

אין לי כרגע צורך מעשי בזה. זו סתם דוגמא ... השאלה היא הרבה יותר כללית. אני אחלק אותה לכמה חלקים: 1.האם אפשר להימנע לגמרי מהצורך ב-DOWNCAST ? 2.אם לא אז איזה design pattern אתם מכירים כדי להחליף את ה-SWITCH הסורר? 3.למה בעצם לא להשתמש ב-SWITCH תוך בידודו וקבלת האפשרות שהוא ישתנה בעתיד. (אני באמת לא רואה קושי רב כל כך לתחזק SWITCH יחיד עבור משפחה של טיפוסים - בנתיים אמרו מגעיל מעוכר ... מצטער זה לא מספיק משכנע) אם עונים על 1 כן ... אני לא בטוח שאפשר ממש לפרט אבל אשמח לפניני חוכמה
 

צונאמי

New member
הבהרה

כמובן אפשר להימנע מ-DOWNCAST אבל האם יש מקרים שבהם הוא דרוש כדי להגיע לתיכון טוב יותר. ואז 2,3 ...
 

vinney

Well-known member
אין מקרים כאלה

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