פורסם 2009 בדצמבר 2915 שנים נגיד יש לי 2 בנאיםבמידה ובנאי 1 נקרא, המטודה x תעשה כך וכךאחרת מטודה x תעשה משהו אחראפשרי?
פורסם 2009 בדצמבר 2915 שנים שים בקלאס שלך איבר שקובע איזה איזה פעולה המתודה צריכה לעשות, ובכל בנאי תשים בו את הערך המתאים.כלומר, בבנאי 1 תעשה flag=1 ובבנאי 2 תעשה flag=2, ואז המתודה תפעל לפי flag.(זו הדרך הכי פשוטה, אבל היא חורנית ולא בדיוק "נכונה" במובן של תכנות נכון)
פורסם 2009 בדצמבר 2915 שנים מחבר שים בקלאס שלך איבר שקובע איזה איזה פעולה המתודה צריכה לעשות, ובכל בנאי תשים בו את הערך המתאים. כלומר, בבנאי 1 תעשה flag=1 ובבנאי 2 תעשה flag=2, ואז המתודה תפעל לפי flag. (זו הדרך הכי פשוטה, אבל היא חורנית ולא בדיוק "נכונה" במובן של תכנות נכון) זה בהחלט פתרון, אבל רציתי לדעת האם יש משהו built in אם לא ידוע לך כנראה שאין אגב תודה
פורסם 2009 בדצמבר 2915 שנים למה שיהיה משהו כזה built in? זה דבר מאוד פרטני.יש כמובן כל מיני פתרונות אחרים, כמו שימוש במצביעים לפונקציה / ירושה / template, אבל אי אפשר לומר בכלליות איזה פתרון הוא הכי מתאים בלי לדעת עוד פרטים.
פורסם 2009 בדצמבר 2915 שנים מחבר למה שיהיה משהו כזה built in? זה דבר מאוד פרטני.יש כמובן כל מיני פתרונות אחרים, כמו שימוש במצביעים לפונקציה / ירושה / template, אבל אי אפשר לומר בכלליות איזה פתרון הוא הכי מתאים בלי לדעת עוד פרטים.סתם אני אסביר, לדוגמא מימוש stackישנם 2 דרכים כלליות, מערך או רשימה מקושרתבמידה והגודל ידוע אפשר להשמש במערך, אם לא, ברשמהעכשיו הפונקציות על 2 מבני הנתונים הללו שונות, לכן סתם רציתי לחשוב אם ניתן יהיה לבצע פונקציות שונותכלומר, רציתי ליצור מחסנית שכוללת את 2 האפשרויות בו זמנית, המטרה לימודית לחלוטין דרך אגב
פורסם 2009 בדצמבר 2915 שנים הדבר הנכון היא להגדיר ממשק כללי למחסנית (נקרא לו לדוגמה IStack), שיגדיר את הפעולות המותרות על מחסנית, ולהגדיר שתי מחלקות נפרדות למחסנית - ListStack ו-ArrayStack - שכל אחת מהן מממשת את הממשק IStack, אבל באופן שונה.בשביל לבחור באיזה מימוש להשתמש, אתה צריך factory - אובייקט שיש לו פונקציה יחידה, שמקבלת פרמטר שקובע באיזה מימוש של מחסנית להשתמש (וכמובן עוד פרמטרים אחרים הדרושים ליצירת המחסנית, אם יש כאלו) ומחזירה את המחסנית המתאימה כאובייקט IStack.
פורסם 2009 בדצמבר 2915 שנים מחבר הדבר הנכון היא להגדיר ממשק כללי למחסנית (נקרא לו לדוגמה IStack), שיגדיר את הפעולות המותרות על מחסנית, ולהגדיר שתי מחלקות נפרדות למחסנית - ListStack ו-ArrayStack - שכל אחת מהן מממשת את הממשק IStack, אבל באופן שונה.בשביל לבחור באיזה מימוש להשתמש, אתה צריך factory - אובייקט שיש לו פונקציה יחידה, שמקבלת פרמטר שקובע באיזה מימוש של מחסנית להשתמש (וכמובן עוד פרמטרים אחרים הדרושים ליצירת המחסנית, אם יש כאלו) ומחזירה את המחסנית המתאימה כאובייקט IStack.כה פחות או יותר מה שתיארתי לעצמימחשבה יפה בכל אופן, כנראה שאין דרך אחרתתודה שניצל!
פורסם 2009 בדצמבר 3015 שנים הקטע של factory זה שיטה מקובלת אך לא הכרחית. לפעמים עדיף פשוט לתת למשתמש לקרוא לבנאי הנכון של המחלקה שהוא רוצה: (כלומר לקרוא לבנאי ListStack או לבנאי ArrayStack ישירות), ולעבוד על האובייקט דרך הממשק המשותף (IStack).להתנהגות קוראים פולימורפיזם, וזו הדרך הבסיסית והכי built-in בשפות מונחות עצמים להשיג את מה שאתה רוצה.
פורסם 2009 בדצמבר 3015 שנים מחבר הקטע של factory זה שיטה מקובלת אך לא הכרחית. לפעמים עדיף פשוט לתת למשתמש לקרוא לבנאי הנכון של המחלקה שהוא רוצה: (כלומר לקרוא לבנאי ListStack או לבנאי ArrayStack ישירות), ולעבוד על האובייקט דרך הממשק המשותף (IStack). להתנהגות קוראים פולימורפיזם, וזו הדרך הבסיסית והכי built-in בשפות מונחות עצמים להשיג את מה שאתה רוצה. זה היה הפתרון הראשון שעלה לי בראש אבל זה לא פתרון למה שחיפשתי חיפשתי דרך בעצם לעשות זאת בצורה יותר פשטנית המטרה הייתה לימוד, האם קיימת דרך לעשות זאת בקלאסס אחד, בלי אלמנט ה flag עכשיו אני מביא כמובן שלא, תודה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.