قانون ديميتر
قانون ديميتر ( LoD ) أو مبدأ أقل معرفة هو دليل تصميمي لتطوير البرمجيات ، وخاصة البرامج الموجهة للكائنات . في شكله العام، يُعدّ قانون ديميتر حالة خاصة من الترابط المنخفض . اقترح هذا الدليل إيان هولاند في جامعة نورث إيسترن في أواخر عام 1987، [ 1 ] وتُقدّم التوصيات الثلاث التالية ملخصًا موجزًا له: [ 2 ]
- ينبغي أن تمتلك كل وحدة معرفة محدودة فقط عن الوحدات الأخرى: فقط الوحدات "الوثيقة الصلة" بالوحدة الحالية.
- ينبغي على كل وحدة التحدث فقط مع أصدقائها؛ لا تتحدثوا مع الغرباء.
- تحدث فقط مع أصدقائك المقربين.
الفكرة الأساسية هي أن أي كائن يجب أن يفترض أقل قدر ممكن من المعلومات حول بنية أو خصائص أي شيء آخر (بما في ذلك مكوناته الفرعية)، وذلك وفقًا لمبدأ " إخفاء المعلومات ". ويمكن اعتبار ذلك نتيجة طبيعية لمبدأ أقل الامتيازات ، الذي ينص على أن الوحدة لا تمتلك إلا المعلومات والموارد اللازمة لغرضها المشروع.
سُمّي بهذا الاسم نسبةً إلى أصله في مشروع ديميتر ، وهو جهدٌ في مجال البرمجة التكيفية والبرمجة الموجهة نحو الجوانب . سُمّي المشروع تكريمًا لديميتر ، "أم التوزيع" وإلهة الزراعة اليونانية ، للدلالة على فلسفة البرمجة التصاعدية التي تتجسد أيضًا في القانون نفسه. [ 3 ]
تاريخ
يعود قانون ديميتر إلى عام 1987 عندما اقترحه إيان هولاند لأول مرة، والذي كان يعمل على مشروع ديميتر. وكان هذا المشروع بمثابة مهد للعديد من مبادئ البرمجة الموجهة نحو الجوانب (AOP).
يبدو أن اقتباسًا في أحد أجزاء المشروع المتبقية يوضح أصول الاسم: [ 4 ]
ديميتر
إلهة الزراعة عند الإغريق.
سُمّي مشروع ديميتر تيمناً بكلمة ديميتر، لأننا كنا نعمل على لغة وصف الأجهزة زيوس، وكنا نبحث عن أداة لتبسيط تطبيق زيوس. كنا نبحث عن اسم أداة مرتبط بزيوس، فاخترنا اسماً مشابهاً: ديميتر.
ثم روجنا لفكرة أن تطوير البرمجيات على طريقة ديميتر يتمحور حول تنمية البرمجيات بدلاً من بنائها. وقد قدمنا مفهوم خطة النمو، وهي عبارة عن سلسلة من مخططات فئات UML المتزايدة التعقيد.
تُعد خطط النمو مفيدة لبناء الأنظمة بشكل تدريجي.
في البرمجة الكائنية التوجه
يمكن للكائن aطلب خدمة (استدعاء دالة) من نسخة كائن آخر b، ولكن aلا ينبغي للكائن "الوصول" bإلى كائن آخر عبر كائن آخر cلطلب خدماته. فذلك يعني aضمنيًا أن الكائن الآخر يحتاج إلى معرفة أكبر bببنيته الداخلية.
بدلاً من ذلك، bينبغي تعديل واجهة 's إذا لزم الأمر بحيث يمكنها تلبية aطلب الكائن 's' مباشرةً، وتمريره إلى أي مكونات فرعية ذات صلة. أو بدلاً من ذلك، aيمكن أن يكون لـ 's' مرجع مباشر إلى الكائن 's' cوإرسال الطلب إليه مباشرةً. إذا تم اتباع القاعدة، فإن الكائن 's' فقط bهو من يعرف بنيته الداخلية.
بصورة أكثر رسمية، ينص قانون ديميتر للوظائف على أنه لا يجوز لطريقة mالكائن aاستدعاء طرق الأنواع التالية من الكائنات إلا: [ 5 ]
aنفسها؛mمعلمات 's؛- أي كائنات تم إنشاؤها داخل
m؛ aسمات 's؛- المتغيرات العامة التي يمكن الوصول إليها من خلال
aنطاقm.
على وجه الخصوص، ينبغي للكائن تجنب استدعاء توابع كائن آخر تم إرجاعه بواسطة تابع آخر. في العديد من لغات البرمجة الكائنية الحديثة التي تستخدم النقطة كمعرّف للحقل، يمكن صياغة القاعدة ببساطة على النحو التالي: "استخدم نقطة واحدة فقط". [ 6 ] أي أن الكود a.m().n()يخالف القاعدة حيث a.m()لا يخالفها. على سبيل المثال ، عندما نريد أن يمشي كلب، لا نأمر أرجل الكلب بالمشي مباشرةً؛ بل نأمر الكلب الذي بدوره يأمر أرجله.
المزايا
تكمن ميزة اتباع قانون ديميتر في أن البرمجيات الناتجة تميل إلى أن تكون أكثر قابلية للصيانة والتكيف . وبما أن الكائنات أقل اعتمادًا على البنية الداخلية للكائنات الأخرى، يمكن تغيير تنفيذ الكائن دون إعادة تصميم الدوال التي تستدعيه.
نشر باسيلي وآخرون [ 7 ] نتائج تجريبية عام 1996 تشير إلى أن انخفاض معدل الاستجابة للفئة (RFC، أي عدد الطرق التي يُحتمل استدعاؤها عند استدعاء طريقة من تلك الفئة) يُمكن أن يُقلل من احتمالية حدوث أخطاء برمجية . ويمكن أن يؤدي اتباع قانون ديميتر إلى انخفاض معدل الاستجابة للفئة. مع ذلك، تُشير النتائج أيضًا إلى أن زيادة عدد الطرق المرجحة لكل فئة [ 8 ] (WMC، أي عدد الطرق المُعرّفة في كل فئة) يُمكن أن تزيد من احتمالية حدوث أخطاء برمجية. كما أن اتباع قانون ديميتر يُمكن أن يؤدي إلى زيادة عدد الطرق المرجحة لكل فئة.
يمكن اعتبار البنية متعددة الطبقات آلية منهجية لتطبيق قانون ديميتر في نظام برمجي. في هذه البنية، لا يمكن للبرنامج داخل كل طبقة استدعاء سوى البرامج داخل الطبقة نفسها والبرامج داخل الطبقة التي تليها. ويُعدّ "تجاوز الطبقات" انتهاكًا لهذه البنية.
العيوب
على الرغم من أن مستوى التفاصيل يزيد من قدرة النظام البرمجي على التكيف، إلا أنه قد يؤدي إلى كتابة العديد من الدوال الوسيطة لنقل الاستدعاءات إلى المكونات؛ وفي بعض الحالات، قد يُضيف ذلك عبئًا ملحوظًا من حيث الوقت والمساحة. [ 7 ] [ 9 ] [ 10 ]
على مستوى الدوال، يؤدي مستوى التفاصيل (LoD) إلى واجهات محدودة، تتيح الوصول فقط إلى المعلومات اللازمة لأداء وظيفتها، حيث تحتاج كل دالة إلى معرفة مجموعة صغيرة من دوال الكائنات ذات الصلة الوثيقة. [ 11 ] من ناحية أخرى، على مستوى الأصناف، إذا لم يُستخدم مستوى التفاصيل بشكل صحيح، فقد يتم تطوير واجهات واسعة (أي موسعة) تتطلب إضافة العديد من الدوال المساعدة. [ 9 ] [ 10 ] ويعود ذلك إلى سوء التصميم وليس نتيجة لمستوى التفاصيل بحد ذاته. إذا تم استخدام دالة تغليف، فهذا يعني أن الكائن الذي يتم استدعاؤه من خلال دالة التغليف كان ينبغي أن يكون تابعًا في الصنف المُستدعي.
أحد الحلول المقترحة لمشكلة واجهات الفئات الموسعة هو النهج الموجه نحو الجوانب [ 12 ] ، حيث يُحدد سلوك الأسلوب كجانب على مستوى عالٍ من التجريد. تُدار الواجهات الواسعة من خلال لغة تحدد التطبيقات. تستخدم كل من استراتيجية الاجتياز والزائر التكيفي مجموعةً صغيرةً فقط من الفئات المشاركة في العملية، ويتم تجريد المعلومات المتعلقة بالروابط بين هذه الفئات.
انظر أيضاً
مراجع
- ↑ ليبرهير، ك. ج .؛ هولاند، إ. م. (سبتمبر 1989). "ضمان أسلوب جيد للبرامج الموجهة للكائنات" . مجلة IEEE للبرمجيات . 6 (5): 38-48 . doi : 10.1109/52.35588 . ISSN 0740-7459 . S2CID 12651917 .
- ↑ ماسيدو، إيمرسون. "README.markdown: ديميتر" . جيت هاب . تم الاسترجاع في 2012-07-05 .
- ↑ "قانون ديميتر: مبدأ أقل المعرفة" . www.khoury.northeastern.edu . تاريخ الاسترجاع: 7 نوفمبر 2024 .
- ↑ "مشروع ديميتر - ما هي ديميتر؟" .
- ↑ بوك، ديفيد. "بائع الصحف، والمحفظة، وقانون ديميتر" (ملف PDF) . كلية علوم الحاسوب والمعلومات، جامعة نورث إيسترن. ص 5. تاريخ الاسترجاع: 5 يوليو 2012 .
- ↑ ميتز، ساندي (2019). التصميم العملي الموجه للكائنات: مدخل إلى منهجية أجايل باستخدام روبي ( الطبعة الثانية). أديسون-ويسلي. ص 81. ISBN 978-0134456478. إل سي سي إن 2018939833 .
- 1 2 باسيلي، فيكتور؛ برياند، ل.؛ ميلو، دبليو إل (أكتوبر 1996). "التحقق من صحة مقاييس التصميم الموجه للكائنات كمؤشرات للجودة" (ملف PDF) . معاملات IEEE في هندسة البرمجيات . 22 (10): 751-761 . doi : 10.1109/32.544352 . hdl : 1903/715 .
وكما هو متوقع، كلما زاد حجم WMC، زاد احتمال اكتشاف الأخطاء.
- ↑ "الأساليب الموزونة لكل فئة - ويكي مايسكوال" . maisqual.squoring.com . تم الاطلاع عليه بتاريخ 20 سبتمبر 2018 .
- 1 2 أبلتون، براد. " مقدمة إلى ديميتر وقوانينها" . تم الاسترجاع في 6 يوليو 2013.
من الآثار الجانبية لذلك أنه إذا التزمت بقانون التفاصيل، فبينما قد يزيد ذلك بشكل كبير من قابلية صيانة نظامك البرمجي و"قدرته على التكيف"، فإنك ستضطر أيضًا إلى كتابة الكثير من طرق التغليف الصغيرة لنشر استدعاءات الطرق إلى مكوناته (مما قد يضيف عبئًا ملحوظًا من حيث الوقت والمساحة).
- ١ ٢ "أخبر، لا تسأل" . شركة المبرمجين العمليين. مؤرشف من الأصل في ٢١ يوليو ٢٠١٣. تم الاسترجاع في ٦ يوليو ٢٠١٣.
العيب، بالطبع، هو أنك ستنتهي بكتابة العديد من الدوال الصغيرة التي لا تفعل الكثير سوى تفويض اجتياز الحاويات وما شابه. المفاضلة في التكلفة تكمن بين هذا القصور في الكفاءة وربط الفئات الأعلى.
- ↑ ليبرهير، ك.؛ هولاند، إ.؛ ريل، أ. (1988). "البرمجة كائنية التوجه: حس موضوعي للأسلوب" (ملف PDF) . في: ميرويتز، نورمان (محرر). وقائع مؤتمر أنظمة ولغات وتطبيقات البرمجة كائنية التوجه (OOPSLA '88) . ACM. الصفحات 323-334 . doi : 10.1145/62083.62113 . ISBN 978-0897912846S2CID 562521. تم الاسترجاع في 2012-07-05 .
صيانة برمجيات أسهل، ترابط أقل بين أساليبك، إخفاء أفضل للمعلومات، واجهات أضيق، أساليب أسهل لإعادة الاستخدام، وإثباتات صحة أسهل باستخدام الاستقراء الهيكلي.
- ↑ ليبرهير، كارل؛ أورليانز، دوغ؛ أوفلينغر، يوهان (أكتوبر 2001). "البرمجة الموجهة نحو الجوانب باستخدام الأساليب التكيفية". مجلة الاتصالات ACM . 44 (10): 39-40 . CiteSeerX 10.1.1.192.6403 . doi : 10.1145/383845.383855 . S2CID 2792493.
يُغلف الأسلوب التكيفي سلوك العملية في مكان واحد، متجنبًا بذلك مشكلة التشتت، كما أنه يُجرّد بنية الفئة، متجنبًا بذلك مشكلة التشابك أيضًا.
للمزيد من القراءة
- ليبرهير، كارل ؛ هولاند، آي. (سبتمبر 1989). "ضمان أسلوب جيد للبرامج الموجهة للكائنات". مجلة IEEE للبرمجيات . 6 (5): 38-48 . doi : 10.1109/52.35588 . S2CID 12651917 .
- ليبرهير، كارل ج. (1995). البرمجيات التكيفية الموجهة للكائنات: طريقة ديميتر مع أنماط الانتشار . شركة بي دبليو إس للنشر. رقم ISBN 978-0534946029.
- هانت، أندرو؛ توماس، ديفيد (2002). "5. الانحناء أو الكسر § قانون ديميتر للدوال" . المبرمج العملي: من مبتدئ إلى محترف . أديسون-ويسلي. ص 140-141 . ISBN 978-0-13-211917-7.
- لارمان، كريج (2005). تطبيق لغة النمذجة الموحدة والأنماط ( الطبعة الثالثة). برنتيس هول. الصفحات 430-432 . (من هذا الكتاب، يُعرف "قانون ديميتر" أيضًا باسم "لا تتحدث إلى الغرباء").
- ماكونيل، ستيف (2004). كود كومبليت ( الطبعة الثانية). مطبعة مايكروسوفت. 150 صفحة . ISBN 9780735619678.
- باليرمو، جيفري. شيرمان، بن. بوجارد، جيمي (2009). ASP.NET MVC قيد التنفيذ . منشورات مانينغ. ص. 14.
روابط خارجية
- قانون ديميتر (LoD)
- "البرمجة الموجهة للكائنات: حس موضوعي للأسلوب" (وقائع مؤتمر OOPSLA '88) (ملف PDF)
- ساعي البريد، والمحفظة، وقانون ديميتر (ملف PDF)
- فيل هاك: "قانون ديميتر ليس مجرد تمرين لعدّ النقاط"
- ليبر: "قانون ديميتر: مبدأ أقل قدر من المعرفة"
- "برمجيات كائنية التوجه تكيفية، طريقة ديميتر"
- مشروع ديميتر —- ما هو مشروع ديميتر؟
- البرمجة الكائنية التوجه
- مبادئ البرمجة
