"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إعادة صياغة إعلان تبعية \"الصديق\": دليل خطوة بخطوة لإزالة الاعتماد المتبادل المفرط؟

كيفية إعادة صياغة إعلان تبعية \"الصديق\": دليل خطوة بخطوة لإزالة الاعتماد المتبادل المفرط؟

تم النشر بتاريخ 2024-11-21
تصفح:268

How to Refactor a \

كيفية إعادة صياغة إعلان التبعية "صديق"

الخلفية

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

الخطوة 1: تقديم ملخص الواجهة

استخرج الأساليب التي كشفت عنها فئة "الصديق" وأنشئ واجهة مجردة جديدة. إنشاء علاقة تبعية من فئة "الصديق" إلى الواجهة وتبعية "استدعاء" من الفئة الأخرى إلى الواجهة.

الخطوة 2: نقل العمليات إلى الواجهة

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

الخطوة 3: تنفيذ الغراء معًا

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

ClassA (المزود):

class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};

ClassAAccessor (صديق):

class ClassAAccessor { عام: ClassAAccessor(ClassA& classA) : InternalInterfaceRef(0) { classA.attachAccessor(*this); } خاص: InternalInterface* InternalInterfaceRef; };
class ClassAAccessor {
    public:
        ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
            classA.attachAccessor(*this);
        }
    private:  
        InternalInterface* internalInterfaceRef;
};

يزيل التبعية غير الضرورية بين الفئات
  • يتوافق مع معايير UML الحديثة
  • يفرض التحكم في الوصول عن طريق إخفاء العمليات الداخلية عن الجمهور
  • القيود

قد تزيد التعليمات البرمجية التعقيد

    يتطلب واجهات مجردة، مما يؤثر على الأداء وبصمة الذاكرة
  • قد يكون تمثيل UML لعلاقة التعميم المحمية أمرًا صعبًا
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3