دعونا نتناول التناقض الظاهر بين البندين 22 و 41 من الكتاب:
البند 22: “إذا كنت لا ترغب في تحديد نوع، فلا تستخدم واجهة.”
يقترح هذا العنصر أنه لا ينبغي عليك استخدام واجهات للأشياء التي لا تمثل نوعًا حقيقيًا أو وظيفة محددة. على سبيل المثال، استخدام واجهة لتخزين الثوابت فقط ليس ممارسة جيدة. يجب استخدام الواجهات لتحديد العقود أو السلوكيات التي يجب على الفئات تنفيذها.
البند 41: “إذا كنت تريد حقًا تحديد نوع، فاستخدم واجهة.”
يتحدث هذا العنصر عن استخدام الواجهات، وتحديدًا واجهات العلامات، لتحديد نوع يصنف الفئات أو يضع علامة عليها بطريقة يمكن التحقق منها في وقت الترجمة. لا تحدد واجهة العلامة الأساليب، ولكنها لا تزال تحدد نوعًا منطقيًا يمكن استخدامه للتحقق من سلوك الفئات في وقت الترجمة.
التوفيق بين البنود
مفتاح فهم كلا العنصرين هو الفرق بين تحديد نوع مفيد واستخدام الواجهة بشكل مناسب.
ينص البند 22 على تجنب استخدام الواجهات للأشياء التي ليس لها وظائف أو سلوك محدد مرتبط بها. الفكرة هي أنه يجب استخدام الواجهات لتحديد عقود واضحة يجب أن تتبعها الفئات.
يوصي البند 41 باستخدام الواجهات (بما في ذلك العلامات) عندما تريد تحديد نوع يصنف الفئات أو يضع علامة عليها لغرض محدد والتي يمكن استخدامها للتحقق من وقت الترجمة.
التطبيق العملي
البند 22: تجنب هذا:
public interface Constants { String SOME_CONSTANT = "value"; int ANOTHER_CONSTANT = 42; }
هذا لا يحدد النوع أو السلوك؛ إنها مجرد حاوية للثوابت، وهو استخدام سيء للواجهة.
البند 41: استخدام الواجهات لوضع علامة على نوع:
public interface PhysicalProduct { // Interface marcadora sem métodos } public class Book implements PhysicalProduct { // Implementação da classe que indica que é um produto físico }
هنا، تحدد واجهة المنتج المادي نوعًا منطقيًا يمكن فحصه واستخدامه لأغراض محددة، مثل حساب الشحن، مما يضمن أخذ المنتجات المادية فقط في الاعتبار.
خاتمة
يكمل كلا العنصرين بعضهما البعض من خلال توفير إرشادات حول كيفية ووقت استخدام الواجهات بشكل مناسب. الفرضية هي أنه يجب استخدام الواجهات لتحديد أنواع ذات معنى وعقود واضحة، سواء من خلال الأساليب التي تحدد السلوك أو كعلامات تصنف الفئات بطريقة منطقية ومفيدة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3