עניין של עיצוב.

mooznach

New member
עניין של עיצוב.

נאמר אני בונה תוכנה ואני רוצה שהיא לא תהיה תלויה בUI שלה. זאת אומרת כל הדברים שקשורים לUI אני יכול לעשות בQt, GTK, או סתם console, בצור מודולים ולא לשנות אף שורה בקוד. עכשיו, ניסיתי לעשות דבר כזה אבל יש בעיות אם ההורשה. אולי אפשר לפתור את העניין הזה אם virtual base classes אבל אני לא ממש רוצה להכנס לכל זה. הנה קוד לדוגמא של הבעיה, אולי יש למישהו רעיון איך לעשות את זה.
//interface.h class Window { public: virtual void doRegularStuff() = 0; virtual ~Window() {} }; class SpecialWindow { public: virtual void doSpecialStuff() = 0; virtual ~SpecialWindow() {} } class TheProgram { public: void MakeYourselfUsefulAndDoStuff() { SpecialWindow *sw = createSpecialWindow(); sw->doSpecialStuff(); } protected: virtual SpecialWindow *createSpecialWindow() = 0; } //Qt implementation on the interface. class QtWindow : public QWidget, public Window { public: void doRegularStuff() { //... } }; class QtSpecialWindow : public QtWindow, public SpecialWindow { public: void doSpecialStuff() { //... } } int main() { TheProgram *prog = new QtTheProgram; prog->MakeYourselfUsefulAndDoStuff(); return 0; }​
 

mooznach

New member
יותר ספציפית:

אפשר לראות בקוד ש במקרה של QtSpecialWindow יש בעצם 2 עותקים של המחלקה Window. אחד שבא אם ההורשה מ SpecialWindow ואחד מההורשה של QtWindow. זה עיקר הבעיה.
 

צונאמי

New member
בלי להסתבך

תיצור אובייקט SEREVR שיחשוף את הממשק המתמש(למתכנת ה-UI) בצורה של פונקציות.(בלתי תלוי ב- UI לששתמש של התוכנה אותה אתה כותב) עכשיו כל ממש שאתה צריך לעשות זה לכתוב את הממשק המשתמש שאחראי לקלוט פעולות של המשתמש ולתרגם אותם לקריאות לפונקציות של האובייקט SERVER שלך.
 

צונאמי

New member
ניסיון נוסף

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