زوجتي (ريم[1]) تريد أن تعود إلى عملها كمطورة برمجيّات[2] (كانت زوجتي قد بدأت عملها كمطورة برمجيات, و لكن لم تستطع المتابعة نظراً إلى ولادة طفلنا الأوّل) , و في هذه الأيّام أحاول أن أساعدها في تعلم التصميم غرضي التوجّه[3] كوني أمتلك بعض الخبرة في تصميم البرمجيات و تطويرها.
منذ أيامي الأولى في تطوير البرمجيات , رأيت دائماً أنّ شرح الأفكار التقنية باستخدام الأمثلة المستمدة من الحياة الواقعية, و باستخدام أسلوب حواري, يجعل هذه الأفكار أسهل للفهم مهما كانت صعوبة هذه الأفكار؛ و بما أنني أجريت بعض الحوارات الغنيّة مع زوجتي حول التصميم غرضي التوجّه, فقد رأيت أن أشارك هذه الحوارات مع المهتمين بالموضوع .
و كان حوارنا حول هذا الموضوع قد جرى كما يلي:
حول التصميم غرضي التوجّه
عمر: عزيزتي, دعينا نبدأ تعلّم التصميم غرضي التوجّه. أنت تعرفين المبادئ غرضية التوجّه[4], أليس كذلك؟
ريم: أنت تعني: التغليف[5], و الوراثة[6], و تعدد الأشكال[7] أليس كذلك؟ أجل أنا أعرف المبادئ.
عمر: حسناً, أتمنى أن تكوني عارفةً بكيفية استخدام الأصناف[8] و الأغراض[9].
دعينا نتعلّم التصميم الغرضي التوجّه اليوم.
ريم: انتظر للحظة , أليست المبادئ الغرضية التوجّه كافية من أجل البرمجة غرضية التوجّه[10] ؟ أنا أقصد أنني أستطيع تعريف الأصناف و أن أغلّف الخصائص[11] و الطرائق[12]. كما أستطيع تعريف بنية هرمية للأصناف[13] مبنية على علاقة هذه الأصناف ببعضها البعض, فماذا يتبقّى إذاً؟
عمر: سؤال جيد؛ إنّ المبادئ غرضيّة التوجّه و التصميم الغرضيّ التوجّه هما أمران منفصلان عن بعضهما . دعيني أعطيك مثالاً من الحياة الواقعيّة :
عندما كنتِ طفلةً تعلّمت الأبجديّة , أليس كذلك؟
ريم: نعم.
عمر: حسناً. تعلّمتِ أيضاً الكلمات ذات المعاني, و كيف تجمّعين الأحرف كي تحصلي على هذه الكلمات, بالإضافة إلى ذلك تعلّمتِ بعض القواعد الأساسية حول كيفيّة تجميع الكلمات في جمل مفيدة, مثلاً كنت مضطرة لفهم أزمنة الفعل, و أحرف الجر, و أحرف العطف, و أشياء أخرى كي تتمكني من تشكيل جمل صحيحة من النّاحية القواعديّة, فلنقل على سبيل المثال الجملة التالية :
I (pronoun) want (Verb) to (Preposition) learn (Verb) OOD (Noun)
ريم: حسناً, ماذا يعني هذا؟
عمر: هذا يشابه المبادئ غرضيّة التوجّه, فهذه المبادئ تتحدّث عن الأسس و الأفكار الجوهرية للقيام بالبرمجة غرضية التوجّه؛ في هذا السياق يمكننا مقارنة المبادئ غرضية التوجّه بالقواعد الأساسيّة للّغة الإنكليزية, فالقواعد اللغوية تعلّمكِ كيفيّة بناء جمل صحيحة و مفيدة باستخدام الكلمات, و المبادئ غرضية التوجّه تعلّمكِ كيف تبنين الأصناف, و كيف تكبسلين الخصائص و الطرائق داخلها, و كيف تنشئين بنية هرمية تربطها ببعضها, و كيف تستخدمينها في الشيفرة البرمجية[14] الذي تكتبينه.
ريم: مممم… فهمت هذه النقطة. إذاً ما موقع التصميم غرضي التوجّه في هذا السياق؟
عمر: ستحصلين على الجواب سريعاً. دعينا نفترض الآن أنك تريدين كتابة مجموعة من المقالات حول مواضيع ما, أو أنك تريدين كتابة كتبٍ حول بعض المواضيع التي تملكين خبرة فيها؛ إنّ معرفة كيفيّة بناء الجُمَل ليس كافياً لكتابة مقالاتٍ و كتباً جيّدة, أليس كذلك؟ أنت تحتاجين إلى خبرة جيدة في الكتابة و الشرح حتى يتمكن القُرّاء من فهم الأفكار التي تحاولين إيصالها إليهم.
ريم: يبدو كلامك مثيراً للاهتمام… تابع من فضلك.
عمر: الآن, إن أردت كتابة كتاب حول موضوع محدد (لنقل إنه التصميم غرضي التوجه مثلاً) , يتوجّب عليكِ معرفة كيفية تقسيم هذا الموضوع العريض إلى مواضيع أضيق, و يجب أن تصنفيها ضمن فصول, و تضعي في هذه الفصول مقدّمات و شروحات و أمثلة, و أشياء أخرى كثيرة. تحتاجين إلى إلى تصميم الكتاب بمجمله, و تعلّم الممارسات الأمثليّة[15] في تقنيّة الكتابة بحيث يتمكّن القارئ من فهم ما تحاولين إيصاله إليه بسهولة. تلاحظين أنني أتحدّث عن الصورة الكبيرة[16].
في عالم تطوير البرمجيات, إن التصميم غرضيّ التوجّه يتعامل مع الصورة الكبيرة؛ أنت بحاجة إلى تصميم برنامجك بحيث تكون الأصناف التي تعرفينها و الكود البرمجي الذي تكتبينه مقولباً[17], و قابلاً لإعادة استخدامه[18] ,و مرناً[19], وفي الواقع هناك الكثير من القواعد التي تمكّنك من فعل هذا بحيث لا تحتاجين إلى إعادة اختراع العجلة.
هناك بعض المبادئ التصميمية التي تستطيعين تطبيقها في تصميم أصنافك و أغراضك .هل كلامي منطقي.
ريم :مممم… لقد فهمتُ الفكرة الأساسيّة, و لكنني بحاجة إلى فهم المزيد.
عمر: لا تقلقي, ستتعلمين قريباً..
لماذا يوجد التصميم غرضي التوجّه؟
عمر: هذا سؤال مهم جداً , لِمَ الاهتمام بالتصميم الغرضي التوجّه في حين أننا نستطيع إنشاء بعض الأصناف بسرعة و ننهي عملية التطوير و نسلم البرمجية ؟أليس هذا كافياً؟
ريم: بالفعل, فأنا لم أسمع من قبل بالتصميم غرضي التوجّه, و مع ذلك فقد كنت قادرة على تطوير و تسليم المشاريع, فماهي هذه القضية العظيمة ؟
عمر: حسناً, دعيني أعطيك اقتباساً شهيراً:
” السير على الماء , و تطوير برمجية بناءً على مواصفات ما كلاهما سهل, لو كانا متجمدين (الماء و المواصفات) “
-Edward V. Berard-
ريم: أنت تعني أن المواصفات التي تُبنى عليها عملية تطوير البرمجية تظل تتغيّر دائماً؟
عمر: تماماً! الحقيقة المطلقة حول البرمجيات هي : “برنامجك محكوم بالتغيير” , لماذا؟ لأن برنامجك يحل مشاكل الأعمال [20]الواقعية, و مثل هذه الأعمال تتطور و تتغيّر باستمرار.
برنامجك يقوم بالذي يفترض به أن يقومه اليوم, و لكن هل برنامجك ذكيّ كفايةً كي يدعم التغييرات؟ إذا كان جوابك بالنّفي, فبرنامجك إذاً ليس مصمماً بذكاء ..
ريم: حسناً, اشرح لي ما هو “البرنامج المصمم بذكاء” أيّها السيّد!
عمر: “البرنامج المصمم بذكاء” يمكن أن يتم تعديله بسهولة بحيث أنه قابل للتوسيع, و قابل لإعادة الاستخدام .
و تطبيق التصميم الغرضي التوجّه بصورة جيّدة هو السبيل للحصول على تصميم ذكي كالذي تحدّثت عنه. الآن, متى تستطيعين الادّعاء بأنّ لديك تصميماً غرضيَّ التوجه جيّداً مطبّقاً في شيفرتك؟
ريم: هذا هو سؤالي أيضأً.
عمر: أنتِ تقومين بتصميمٍ غرضيّ التوجّه جيد, إذا كانت شيفرتك البرمجية تحقق مايلي:
- غرضيّة التوجه.
- قابلة لإعادة الاستخدام.
- يمكن تعديلها بصرف الحدّ الأدنى من الجّهد.
- يمكن توسيعها دون الحاجة لتعديل شيفرة موجودة.
ريم: ثم ماذا؟
عمر: نحن لسنا وحيدَين, عدد كبير من الأشخاص قد أعطوا الكثير من الأفكار و صرفوا الكثير من الجّهد في هذا المجال, و قد حاولوا الحصولَ على تصميمٍ غرضي التوجه جيدٍ و تعريفَ بعض الأسس[21] من أجل ممارسة التصميم الغرضيّ التوجّه (هذه الأسس هي أشبه بإيحاءات[22] تستطيعين استخدامها في التخطيط لتصميمك غرضيّ التوجّه). كما قام هؤلاء أيضاً بتعريف بعض الأنماط التصميميّة[23] القابلة للتطبيق في بعض السيناريوهات الشائعة .
ريم: هل تستطيع أن تسمّي لي بعض هذه الأسس التصميمية؟
عمر: بالتأكيد. هناك الكثير من الأسس التصميمية , و لكن في المستوى الأولي[24] , هناك خمسة أسس, يشار إليها باختصار بـ SOLID principles ( الشكر لـ Uncle Bob, المعلّم العظيم للتصميم الغرضيّ التوجّه)
S = Single Responsibility Principle
O = Opened Closed Principle
L = Liscov’s Substitution Principle
I = Interface Segregation Principle
D = Dependency Inversion Principle
في الحوار التالي سنحاول فهم كلّ من هذه الأسس بالتفصيل .
صفحات السلسلة
المؤلف: Al-Farooque Shubho
المصدر: http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife
المترجم: غريب بهجت فلازي
[1] ملاحظة من المترجم: تم تعديل اسمي الشخصين المتحاورين كي يصبحا متوافقين مع الثقافة العربية
[2] Software Developer
[3] Object Oriented Design
[4] Object Oriented Principles
[5] Encapsulation
[6] Inheritance
[7] Polymorphism
[8] Classes
[9] Objects
[10] Object Oriented Programming
[11]Properties
[12] Methods
[13] Class Hierarchy
[14] Code
[15] Best Practices
[16] Bigger Picture
[17] Modularized
[18] Re-Usable
[19] Flexible
[20] Business
[21] Principles
[22] Inspirations
[23] Design Patterns
[24] The Basic Level
نقاش
Powered by Facebook Comments
Pingback: كيف شرحت التصميم الغرضيّ التوجّه لزوجتي – مبدأ (مفتوح – مغلق) | مترجم - Moutarjam
Pingback: كيف شرحت التصميم الغرضيّ التوجّه لزوجتي – مبدأ (ليسكوف) في الاستبدال | مترجم - Moutarjam
Pingback: كيف شرحت التصميم الغرضيّ التوجّه لزوجتي – مبدأ انعكاس الاعتماديّة | مترجم - Moutarjam
Pingback: كيف شرحت التصميم الغرضيّ التوجّه لزوجتي – مبدأ فصل الواجهات | مترجم - Moutarjam