تعريف:
يجب ألا تعتمد الوحدات النمطية عالية المستوى على الوحدات النمطية ذات المستوى المنخفض ، وينبغي أن يعتمد كلاهما على تجريدهما ؛ لا ينبغي أن تعتمد التجريدات على التفاصيل ؛ يجب أن تعتمد التفاصيل على التجريد.
أصل المشكلة: يعتمد الفئة A بشكل مباشر على الفئة B. إذا كنت ترغب في تغيير الفئة A للاعتماد على الفئة C ، فيجب عليك تحقيقها عن طريق تعديل رمز الفئة A. في هذا السيناريو ، فئة A هي عمومًا وحدة عالية المستوى مسؤولة عن منطق العمل المعقد ؛ الفئة B والفئة C عبارة عن وحدات منخفضة المستوى مسؤولة عن العمليات الذرية الأساسية ؛ إذا تم تعديل الفئة A ، فسوف يجلب مخاطر غير ضرورية للبرنامج.
الحل: تعديل الفئة A للاعتماد على الواجهة I ، والفئة B و Class C تنفذ كل واجهة I. Class A Class بشكل غير مباشر من الفئة B أو الفئة C من خلال الواجهة I ، والتي ستقلل بشكل كبير من فرصة تعديل الفئة A.
يعتمد مبدأ انعكاس الاعتماد على حقيقة أن الأشياء المجردة أكثر استقرارًا من التباين في التفاصيل. الهندسة المعمارية المبنية على الملخص أكثر استقرارًا من البنية المبنية على التفاصيل. في Java ، يشير الملخص إلى واجهة أو فئة مجردة ، والتفاصيل هي فئات تنفيذ محددة. الغرض من استخدام الواجهة أو الفئة المجردة هو صياغة المواصفات والعقود دون إشراك أي عمليات محددة ، وتسليم مهمة تقديم التفاصيل إلى فئات التنفيذ الخاصة بهم لإكمالها.
الفكرة الأساسية لمبدأ انعكاس التبعية هي البرمجة الموجهة نحو الواجهة. سنظل نستخدم مثالًا لتوضيح مكان وجود البرمجة الموجهة نحو الواجهة أفضل من البرمجة الموجهة للتنفيذ. المشهد مثل هذا: تحكي الأم قصة لطفلها. طالما أنها تعطيها كتابًا ، يمكنها سرد قصص لطفلها وفقًا للكتاب.
مثال:
انعكاس الاعتماد غير القانوني
طالب الفئة العامة {public void read (كتاب) {system.out.println ("يبدأ الطالب في القراءة:"+book.getName ()) ؛ }} كتاب الفئة العامة {public string getName () {return "book" ؛ }}
عندما يحتاج الطلاب إلى قراءة صفحات الويب ، يحتاجون إلى تعديل فصل الطلاب ، وهو تصميم غير ودي للغاية. دعونا نلقي نظرة على مثال الالتزام بمبدأ انعكاس التبعية.
شخص الواجهة العامة {public void read (reader reader) ؛ } قارئ الواجهة العامة {public string getName () ؛ } طالب الفئة العامة ينفذ الشخص {Override public void read (reader reader) {system.out.println ("student start reading:"+reader.getName ()) ؛ }} يقوم كتاب الفئة العامة بتنفيذ Reader {public string getName () {return "book" ؛ }} ينفذ موقع الفئة العامة القارئ {public string getName () {return "صفحة الويب" ؛ }} اختبار الفئة العامة {public static void main (string [] args) {person student = new student () ؛ student.Read (كتاب جديد ()) ؛ student.Read (موقع جديد ()) ؛ }}
في طريقة القراءة نستخدم الواجهة كمعلمة.
تلخيص:
1. من الأفضل أن يكون لديك واجهات أو فئات مجردة لكل فصل ، أو كل من الواجهات والفئات المجردة.
2. يفضل أن يكون الإعلان المتغير واجهة أو فئة مجردة.
3. الالتزام بمبدأ الاستبدال أثناء الميراث.