تصميم واجهة المستخدم الرسومية على غرار فوتوشوب

StackOverflow https://stackoverflow.com/questions/1807211

  •  05-07-2019
  •  | 
  •  

سؤال

في أداة مثل Photoshop ، هناك مجموعة مختارة من الأدوات التي يمكنك النقر عليها (مثل القلم ، فرشاة إلخ). بمجرد النقر فوق أداة ، يمكنك استخدام هذه الأداة للطلاء ، ومسحها ، اعتمادًا على الأداة المحددة.

أتساءل كيف سيتم تنفيذ ذلك بشكل أفضل في تصميم OO. لا يمكنني إلا أن أفكر في وجود guimanager يعرف دائمًا الأداة التي يتم اختيارها ، ثم عندما تكتشف القماش (منطقة الرسم) نقرة ماوس أو اسحب الماوس يسأل Guimanager عن الأداة المحددة وتطبيق سلوك هذه الأداة.

هل يصف أي شخص حلًا ممكنًا في تفاصيل مستوى الفصل (أو بأي تفصيل إذا لم يكن لديك وقت).

هل كانت مفيدة؟

المحلول

ألق نظرة على نمط الدولة الذي له مثالك بالضبط.

ومع ذلك ، فإنه ليس في الواقع سؤال واجهة المستخدم الرسومية ولكنه أكثر من ذلك لنهج موجه نحو الكائن لكيفية تصميم هذه المشكلة. واجهة المستخدم الرسومية لا يلعب حقًا في هذا.

نصائح أخرى

لست متأكدًا من أن مبادئ OO تلعب حقًا في هذا إلا بمعنى أن جميع العناصر الرسومية قد تكون مستمدة من فصول قاعدة مشتركة في واجهة المستخدم الرسومية الخاصة بك.

من المفترض أن يكون مقدار التعقيد في التطبيق الذي يحتاج إلى تسلسل هرمي لقوائم الشاشة ، على الأرجح ، الفرق بين التكوين مقابل الميراث مقابل النمط الوظيفي مقابل أي شيء.

على الرغم من أنه إذا كنت متحمسًا لكتابة البرنامج مرتين باستخدام أنماط مختلفة ، فقد يكون من المثير للاهتمام رؤية النتائج. يعد تصنيف أنماط البرمجة المختلفة سؤالًا مفتوحًا بدون إجابات حقيقية في هذه المرحلة ، على الرغم من أننا نعتقد أن فترات OO مهمة بطريقة لم يتم تحديدها تمامًا بعد.

تتمثل إحدى الأفكار في هذا إلى وجود فئة للأدوات. فقط رسم هذا في C ++-مثل الكود الكاذب:

class Tool
{
public:
    // Keep a pointer to the "document", i.e. some representation of the
    // image you are editing
    Tool(Document *pDoc);

    // Process mouse events -- this need to be overridden to execute
    // the appropriate behaviour depending on the concrete type of tool
    virtual void OnMouseEvent(const MouseEvent &e) = 0;

    // and so on
};

ترث بعد ذلك من فئة الأدوات المجردة هذه لتوفير الأدوات الخرسانية التي يحتاجها التطبيق الخاص بك. عند تحديد أداة معينة ، تقوم بتسهيل كائن أداة مماثل وتذكره في مكان ما. تقوم النافذة بإعادة توجيه أحداث الماوس إلى كائن الأداة النشط حاليًا ، والذي يقوم بعد ذلك بالشيء المناسب للأداة التي تم تحديدها.

هذا هو تنفيذ نمط الدولة الذي يشير إليه يوهانس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top