السلام عليكم ورحمة الله وبركاته
لايخفى على احدكم اهمية تنظيم الحزم والفئات داخل برنامجه – فهذا يساعدك على بناء تطبيقات سهلة التطوير والتحديث والصيانة. ان دراسة وتعلم التنظيم والتصميم الجيد للانظمة يساعد كثيرا ليس فقط في سهولة التطوير ولكن ايضا في سهولة فهم البرنامج.
قبل ان تبدأ في تعلم كيفية تصميم انظمة جيدة التصميم تحتاج لان تكون على دراية كاملة في جميع الامور المتعلقة في اللغات الكائنية التوجه.
هناك مشاكل كثيرة تواجه المطورين عند اختيار تصميم معين لنظام معين. هذه المشاكل قد تأخذ وقتا طويلا من المطور في حلها. فهو يبدأ اولا بتحليل المشكلة ثم الى معرفة الحل ثم الى اعادة التصميم للنظام(الفئات).
ولحل هذه المشكلة – استحدث شئ يسمى design patterns . وهي باختصار عبارة عن المشاكل الشائعة بين المطورين في عملية تنظيم الفئات.
لتوضيح هذه الصورة دعونا نأخذ مثال بسيط على واحده من هذه الباترنز.
اسم الباترن: Singleton
لنفرض ان عندك برنامج فيه مجموعة من البانلز وفي كل مرة تظهر للمستخدم بانل معينة في حال حدث حدث معين. اذا انت ستحتاج في كل مرة يحدث الحدث – ان تقوم باستدعاء الفريم الرئيسي واضافة بانل معينة داخلة. وبما ان نظامك سوف يحتوي فقط على فريم رئيسي واحد – تحتاج للدخول الى هذا الفريم واضافة بانل معينة من داخل فئات اخرى.( اتمنى ان الصورة وضحت).
دعني اقول لك ماذا كنت افعل قبل ان اقرأ عن هذا الباترن.
اولا ساعرف كلاس جديد ليقوم بتخزين هذا الفريم:
public class ObjectsStorage {
public static MainFrame frame;
}وبعد ذلك من داخل MainFrame اقوم بتعريف هذا المتغير بهذه الطريقة:
public MainFrame() {
----
----
ObjectsStorage.frame = this;
}بعد ذلك استطيع استخدام ObjectsStorage.frame في اي مكان داخل البرنامج وان اضيف او احذف منه ماارغب من البانلز.
قد يقول البعض ومالمشكلة في ذلك:
اولا: MainFrame يجب ان ينفذ والا سوف تحصل على خطأ. في حالتنا السابقة – انا اتفق معك ان الفريم الرئيسي سنفذ لامحالة. لكن في حالات كثيرة اخرى لن تستطيع ضمان ذلك.
ثانيا: ليس لديك التحكم الكامل في هذا الكائن ObjectsStorage.frame – لانه عام و static اذا يحق لاي شخص الدخول الى هذا الكائن وتغيير مايريد فيه.
اذا هنا تتضح اهمية هذا الباترن – فهو يريك كيف تختار التنظيم الجيد لفئاتك اذا كان عندك كائن عام على مستوى البرنامج ( في حالتنا هذا الكائن هو من نوع MainFrame ) وهذا الكائن لايوجد منه الا نسخة واحده في كل البرنامج.
الحل :
public class MainFrame extends JFrame {
private static MainFrame frame;
private MainFrame() {
frame = this;
}
public static MainFrame getMainFrame(){
return frame;
}قد تتساءل – لماذا وضعنا private constructor . اذا سألت هذا السؤال فيحق لي ان اقول لك انه يجب عليك مراجعة شروط قراءة هذا الدريس( تصغير درس) ولكنني سأجيبك:
انت تريد من برنامجك ان يكون له كائن واحد فقط من نوع MainFrame - ولا تريد ان تجعل اي شخص يعمل نسخة اخرى من داخل فئته. ولهذا جعلنا هذه الفئة تحتوي على هذا ال private constructor . ( ارأيت كم ان اللغات الكائنية التوجه ممتعة وبسيطة).
ومن داخل اي كلاس اخر تستطيع ان تستدعي MainFrame.getMainFrame() .
اتمنى ان اكون قد وضحت الفكرة ولاي اسئلة انا حاضر.
ملاحظة سأبدأ بين فترة واخرى في عرض بعض ال design patterns التي اعرفها واتمنى ان البداية تكون جيدة- وفي النهاية تهمني اراؤكم.


