نظرة عامة
عند كتابة كود أحد البرامج سواء ويب أو ديسكتوب أو موبايل او اى جهاز اخر فى المرة الأولى يجب الاخذ بعين الاعتبار انه غالبا هذا التطبيق سيتم تطويره باستمرار وتحديثه واضافة مميزات مستقبلية للتطبيق وربما التعديل على احد المميزات او تغيير سلوكها الى غير ذلك من الامور التى تستدعى التعامل مع الكود باستمرار وحتى يمكن أن تكون عملية التطوير المستمر لأحد التطبيق سلسة وسهله يجب أن يكون الكود نظيفا مكتوب بطريقة احترافية وقابل للتعديل والتطوير بدون مشاكل ولتحقيق ذلك يجب عليك كمبرمج مراعاة العديد من القواعد والشروط وكتابة أكوادك بأفضل طريقة فى كل حالة من الحالات البرمجية ولذلك وفى عام 1994 ظهر كتاب Design Patterns: Elements of Reusable Object-Oriented Software والذى ألفه اربعة اشخاص ويطلق عليهم عصابة الاربعة او Gang of four وطبعا لم يطلق عليهم عصابة الاربعة لانهم كانوا عصابة فعلية وتخصصوا فى سرقة الاكواد ونهب المبرمجين مثلا لكن هذا مجرد اسم اطلق علهيم كنوع من الدعابة لانهم اربع اشخاص حيث أن هناك قصة مشهورة عن اربع اشخاص قامو بثورة فى الصين ويقوم هذا الكتاب بشرح بعض المبادىء يطلق عليها “أنماط التصميم ” Design Patterns وهى ببساطه عباره عن مجموعة من الارشادات او الحلول لمشاكل برمجية معينة ثبت أنها الطريقة الافضل لحل هذا النوع من المشاكل حيث هناك مشاكل برمجية معينة تحتاج لحلول معينة لكى تعمل بالطريقة الافضل وبالتالى بدلا من أن تجد نفسك تريد تنفيذ شىء ما فتجلس وحدك تتأمل مثل بوذا لتصل لحل افضل وبدلا من اعادة اختراع العجلة ستقوم باستخدام حلول مجربة من قبل بواسطة الاف المبرمجين وثبت أنها الطريقة الامثل لفعل الشىء الذى تريد فعله وبالتالى توفر على نفسك الوقت والمجهود وتكتب الكلاس بأفضل طريقة فنحن هنا عندما نقول Design Patterns نعنى التصميم الخاص بهيكل الكلاس نفسه وعلاقة الكلاس بالكلاسات الاخرى وكتابة الكلاس بطريقة تجعله يتصرف بطريقة معينة ويسلك سلوك معين وينفذ تعليمات معينة فى حالات معينة وقد تقول بأنك تستطيع فعل كل هذا بدون استخدام الـ Design Patterns سأقول لك طبعا تستطيع الاستغناء عنها وعدم دراستها والتفكير فى فعلها بنفسك لكن نحن هنا لا نتحدث عن مجرد حل المشكلة البرمجية أو تنفيذ ما نريده إننا نتحدث عن تنفيذ ما نريده بالطريقة الافضل التى ستضمن لنا بقاء الكود نظيفا وقابل للتطوير والصيانة بدون مشاكل وقد تصادف انك تقوم بتنفيذ شىء معين وهو فى الحقيقة عباره عن pattern معروف دون أن تدرى .
والـ Design Patterns غير مرتبطة بلغة معينة فيمكن تنفيذها مع أغلب اللغات البرمجية وليس فقط مع لغات الـ OOP كما يعتقد البعض فهى ببساطة حلول قابلة لاعادة الاستخدام والتطوير والتعديل وفقا لحاجتك ومشكلتك البرمجية التى تواجهها وعندما نقول مشكلة برمجية بالطبع لا نقصد مشاكل مثل توقف التطبيق او بناء التطبيق بل مشاكل برمجية عادية اى شىء تحتاج تنفيذه برمجيا يعتبر مشكلة برمجية والكود الذى تكتبه هو عباره عن حل المشكلة .
ببساطة وباختصار الـ Design Patterns هى مجموعة من الحلول لمجموعة من المشاكل البرمجية التى واجهت المبرمجين باستمرار وهذه الحلول مجربة وفعالة مع هذه المشاكل لذلك لا نقوم باستخدام الـ Design Patterns بشكل اعتباطى او بدون داعى بل فى حالات ومشاكل معينة كما سنلقى نظرة لاحقا لانه فى حالة استخدام Desing Pattern فى غير موضعه أو فى حالة لا تستدعى استخدامه قد يسبب مشاكل لك فى الكود بدلا من حل المشكلة .
ومع المميزات التى ذكرناها بكون الـ Design Patterns عباره عن حلول مجربة للعديد من المشاكل البرمجية الشائعة الا انها تعرضت لانتقادات عديدة من قبل العديد من المبرمجين الكبار وعلماء الكمبيوتر حتى فى مؤتمر OOPSLA عام 1999 تم عمل محاكمة صورية لعصابة الاربعة هؤلاء مؤلفى الكتاب وتم ادانتهم بالعديد من الجرائم ضد علوم الكمبيوتر والتى من ضمنها الـ patterns وانهم ضللو معنى الكلمة حيث كانت تستخدم سابقا فى مجال المعمار فقط بالاضافة لأن هذه الـ pattern تجعل المبرمج متوسط الخبرة يشعر أنه محترف ويكتفى بتطبيق العديد من الـ patterns دون التنقيب عن ما خلفها والاعتماد على نفسه بشكل أكبر اضافة الى ذلك قام عالم الكمبيوتر Peter Norvig بنقد الـ Design patterns موضحا انه حوالى 16 باترن من الـ 23 باترن (المذكورين فى كتاب الـ Design Patterns الاساسى بواسطة عصابة الاربعة ) يعتبروا منتهيين او deprecated لان اللغات صارت تدعم هذه الاشياء بشكل رسمى وأن هذه الـ patterns تعوض نقص موجود فى اللغة وقرأت مرة كومنت لأحد الاشخاص يتحدث عن دورة حياة الـ Pattern كالتالى :
-> يظهر كتاب جديد لأحد المؤلفين يتحدث فيه عن Pattern جديد
-> يصبح هذا الكتاب مشهورا والأكثر قراءة عند العديد من المبرمجين
-> الـ Design Pattern الجديد يتم بدأ استخدامه ضمن العديد من البرامج .
-> الـ Design Pattern يعمل بشكل جيد ويكتسب شهرة أكبر وأكبر.
-> يصبح الـ Design Pattern الجديد شىء اساسى لدى البعض
-> يقوم أحد المؤلفين الاخرين بتأليف كتاب عن أن هذا الباترن ضار ومشاكله كذا وكذا .
-> يتم تصنيف هذا الباترن كـ Anti Pattern (اى باترن غير فعال او يحل المشكلة ويسبب مشكلة اخرى )
-> يقوم المؤلف بتأليف كتاب عن باترن جديد
وهكذاا …
لذلك لن تجد list كاملة لكل الـ Patterns وهناك Patterns كثيرة يتم ابتكارها واخرى يتم التعديل عليها واخرى يتم اعتبارها Anti Pattern الثابت فقط هو بعض الـ Patterns الشائعة والتى سنلقى نظرة سريعة على كل Pattern منها فى هذه السلسلة .
فئات الـ Design Pattern
يمكن تقسيم او تصنيف الـ Design Patterns ل 3 فئات
الفئة الأولى Creational patterns
وهى عباره عن الـ Patterns التى يمكن أن نستخدمها لتحقيق امر ما متعلق بإنشاء الكلاس نفسها إو انشاء الأوبجكت من هذه الكلاس مثل الـ Singletone Pattern الذى قمنا بعمله أكثر من مرة لإنشاء اوبجكت واحد فقط من الكلاس وكذلك الـ Builder الذى تجده كثيرا كما فى الـ AlertDialog او مكتبة الـ Retrofit .
الفئة الثانية Structural patterns
وهى عباره عن الـ Patterns التى يمكن أن نستخدمها عند تحديد العلاقات بين الكلاس والاوبجكت والعلاقات بين القيم وبعضها داخل الكلاس وكيف تتألف الكلاس والاوبجكت وكيف ستتم الوراثة مثل الـ Adapter الذى نستخدمه غالبا مع الريسكلر فيو أو الـ list .
الفئة الثالثة Behavioral patterns
وهى مجموعة من الـ Patterns التى يمكن أن نستخدمها عند تحديد العلاقات بين الأوبجكتس المختلفة وتحديد سلوك الأوبجكت وسلوك الكلاس فى الحالات المختلفة مثل الـ Iterator الذى نستخدمه لعمل شىء مشابه للـ loop احيانا .
كانت هذه نظرة عامة وفى المقالات القادمة سنلقى نظرة أقرب على أشهر الـ Patterns الشائعة وحالات الاستخدام الخاصة بها وكيفية تطبيقها ***************************************
منقـــــــــــــــول من مـــوقع هـــنديويـــر ............
ليست هناك تعليقات:
إرسال تعليق