سؤال

لديّ وظيفة تستخدمها فئتين مشتقتين ، لكن الثالث لا ، هل من المنطقي تركها في الفصل الأساسي ، على الرغم من أن إحدى الفئات الثلاثة المشتقة لا تستخدمه؟

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

هل من الممكن منع الفئة الثالثة من استخدام الوظيفة ، مع ترك الاثنين اللذين من المفترض أن يستخدمها ، استخدامها؟

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

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

المحلول

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

في هذه الحالة ، تحاول أن تقول "الفئة الفرعية هي نسخة أكثر تحديدًا من الفئة الأساسية ، except for the fact that it shouldn't be able to touch XXX"هذا ، في جوهره ، ينتهك مبدأ استبدال Liskov.

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

في الأساس ، اجعل التسلسل الهرمي الخاص بك:

base
 | \----   subclass without feature available
 |
 \--base+feature
       \--subclass one with specific feature
       \--subclass two with specific feature

نصائح أخرى

يمكنك جعل هذه الوظيفة افتراضية. ثم تجاوز الوظيفة في الفئة الثالثة ورمي استثناء. سيمنع المطورين من استخدام الوظيفة في الفئة الثالثة.

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