سؤال

يقال في إيفل أنه يجب علينا "تخفيف الشروط المسبقة وتشديد الشروط بعد" ، لكنني لست متأكدًا من معنى هذا. كيف تستفيد هذه الفائدة/الاستفادة من التصفيات الفرعية؟

شكرًا لك

هل كانت مفيدة؟

المحلول

في التصميم حسب العقد ، يمكنك تحديد مجموعة من الشروط المسبقة ومجموعة من الشروط بعد الوظيفة. على سبيل المثال ، دعنا نقول أنك تكتب وظيفة تخصيص الذاكرة. أنت تطلب أن تقبل عدد صحيح إيجابي كمدخلات ، وينتج مؤشر محاذاة بالتساوي كنتيجة له.

يعني تخفيف الشرط المسبق أنه عند إنشاء فئة مشتقة ، يجب أن تقبل أي مدخلات يمكن أن تقبلها الفئة الأساسية ، ولكن قد قبول المدخلات الأخرى كذلك. باستخدام المثال أعلاه ، يمكن كتابة فئة مشتقة لقبول عدد صحيح غير سالب بدلاً من عدد صحيح إيجابي.

على جانب النتيجة ، يجب عليك التأكد من أن النتيجة من وظيفة مشتقة تلبي جميع المتطلبات الموضوعة على الوظيفة الأساسية - ولكن يمكنها أيضًا إضافة المزيد من القيود. على سبيل المثال ، يمكن أن تقرر نسخة مشتقة من الوظيفة أعلاه فقط إنتاج نتائج كانت مضاعفات 8. كل مضاعف 8 من الواضح أنه لا يزال يفي بمتطلبات الوظيفة الأساسية ، لكنه فرض قيودًا إضافية أيضًا.

العكس لن يعمل: إذا كانت وظيفة الفئة الأساسية تسمح للأعداد الصحيحة غير السالبة كمدخلات ، فإن الفئة المشتقة يجب استمر في قبول جميع الأعداد الصحيحة غير السالبة كمدخلات. لن يتم السماح بمحاولة تغييره لقبول الأعداد الصحيحة الإيجابية فقط (أي رفض 0 ، وهو ما يسمح به الفئة الأساسية) - لم يعد من الممكن استبدال فئتك المستمدة بالإصدار الأساسي في جميع الظروف.

وبالمثل مع النتائج: إذا فرضت الفئة الأساسية متطلبات "مضاعفة من 8" على النتيجة ، فيجب أن تضمن الإصدار المشتق أيضًا أن جميع النتائج مضاعفات 8. إرجاع 2 أو 4 من شأنه أن ينتهك هذا الشرط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top