هذه المقالة واحدة من مقالات السلسلة “كيف شرحت التصميم غرضي التوجه لزوجتي“.
عمر: هاهي الصورة التي تعبّر عن مبدأ مفتوح- مغلق:
لسنا بحاجة لإجراء عملية الصدر المفتوح إذا أردنا ارتداء المعطف
إذا أردت شرح هذا المبدأ وفقاً لمصطلحات هندسة البرمجيات, فسيكون الشرح كما يلي:
” الكيانات البرمجية[1] (الأصناف, و القوالب[2], و التوابع, إلخ..) يجب أن تكون مفتوحةً أمام الإضافات, و مغلقة في وجه التعديلات”.
في المستوى الأبسط, هذا يعني أنه ينبغي أن تكوني قادرة على توسعة سلوك صنف ما دون إجراء تعديلات على هذا الصنف, هذا يشابه تماماً أنّه ينبغي لي أن أتمكن من لبس رداء ما دون أن أضطرّ إلى إجراء تعديلات في جسدي! ههه…
ريم: هذا مثير للاهتمام , أنت تستطيع أن تغيّر مظهرك من خلال ارتداء ايّ رداء تريده , و أنت لست بحاجة إلى إجراء تعديلات في جسدك من أجل القيام بذلك, إذن أنت مفتوح أمام الإضافات, أليس كذلك؟
عمر: نعم, في سياق التصميم الغرضيّ التوجّه, مفتوح أمام الإضافات معناه : أن طريقة تصرّف[3] الصنف/القالب يمكن أن يتم توسعتها, و يمكننا جعل هذا القالب يتصرف بطرق جديدة مختلفة بحسب تغيّر متطلّبات البرمجية.
ريم: و جسدك هو مغلق أمام التغييرات. لقد أحببت هذا المثال.
إذن , إنّ الشيفرة المصدرية[4] لصنف أو قالب جوهريّ[5] ما, يجب ألّا يتم التعديل فيها حين نريد إضافة شيء إلى تصرّفاته, هل تستطيع التوضيح بوساطة مثال ما ؟
عمر: بالطبع, ألقي نظرةً إلى المثال التالي: إنّه لبنية لا تدعم مبدأ “مفتوح-مغلق” :
كما ترين, إنّ هذه البنية مكوّنة من صنفين حقيقيين[6] (غير مجرّدين), فإذا أردنا لسبب ما إجراء تغيير في الصنف Server فإننا سنكون مضطرين إلى إجراء تغييرات موافقة في الصنف Client.
ريم: هذا الكلام منطقي, إذا كان أسلوب بناء مستعرض[7] ما مرتبطاً بإحكام[8] بمخدّم من نوع محدّد (مثل IIS) , فإنّ تغيير المخدّم لسبب ما و استبداله بمخدم آخر (لنقل أنه Apache مثلاً) سيجعل من الضروري إجراء تغييرات في المستعرض أيضاً, أو حتّى استبداله بالكامل, هذا سيكون مريعاً!
عمر: صحيح… التصميم التالي هو تصميم صحيح:
في هذا التصميم قد تمت إضافة الصنف المجرد[9] AbstractServer, و الصنف Client لديه مرجع[10] إلى هذا الصنف, كما أنّ الصنف الحقيقي Server يحقق[11] الصنف المجرّد AbstractServer.
ريم: إذن الحل هو بالتجريد, و لكن هل بإمكانك التوضيح أكثر؟
عمر: بالطبع, لنعد إلى المثال الذي ذكرتيه, إذا كان الصنف Client يعبّر عن مستعرض ما, و الصنف الحقيقي Server يعبّر عن المخدّمات من النوع IIS و لسبب ما أردنا التحوّل إلى استخدام مخدّمات من النوع Apache فكلّ ما نحتاج لفعله هو إضافة صنف جديد يعبّر عن مخدمات Apache و يحقق الصنف المجرّد AbstractServer و لن نكون بحاجة إلى إجراء تعديلات في المستعرض (الصنف Client), هذا لأن الصنف Client يتعامل مباشرة مع الصنف المجرد, و هو يعتمد على التوابع العامة التي يحويها هذا الصنف المجرد, و التي لم يطرأ عليها أيّ تغيير, إذن إذا أردنا توسعة صفات الصنف Client فقد تمكّنا من ذلك دون الحاجة إلى إجراء تعديلات عليه , فالصنف Client مغلق في وجه التعديل, و مفتوح أمام التوسيع.
صفحات السلسلة
المؤلف: Al-Farooque Shubho
المصدر: http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife
المترجم: غريب بهجت فلازي
[1] Software Entities
[2] Modules
[3] Behavior
[4] Source Code
[5] Core
[6] Concrete
[7] Browser
[8] Tightly Coupled
[9] Abstract
[10] Reference
[11] Implements
نقاش
Powered by Facebook Comments