هذه سلسلة فيها بعض الخواطر عن الInterfaces . فوائد الInterface كثيرة , اعني هنا الـkeyword الموجودة في لغات مثل جافا و سي شارب و PHP و دارت ( غير موجودة في سي بلس بلس و جافا سكريبت و بايثون و روبي ) عادة موجودة في اللغات التي لا تدعم الMulti Inheritance .
الInterface قد تعمل كعقد للClasses تخبر الClass بما عليه ان يقوم به لكن من دون ان تخبره كيف يقوم به مثل الAbstract Class. الInterface قد تعمل كاداة مشاركة لسلوك معين Behavior قد لا نتمكن من مشاركته عند استخدام الInheritance العادي.
مثل لو كنت تصمم لعبة فيها مسدس Pistol و فيها تنين Dragon . المسدس يتورث من كلاس Weapon و التنين من كلاس Monster و هما مختلفان تماماً من ناحية الخصائص و السلوك لكن يتشاركان في كونهما يقتلان. هنا تحتاج الى Interface ممكن تسميه IKiller به ميثود اسمها BeKilling مثلا.
لو قلنا لما لا نقوم بعمل Super class اعلى اسمه Killer و نورث منه الكلاسات Weapon و Monster ؟ الجواب انه ممكن ان احد الأسلحة او الوحوش ببساطة لا تقتل!.
غير اننا بالInterface نكون طبقنا المبدأ البرمجي Interface segregation principle من مباديء SOLID
هناك طريقة للبرمجة اسمها Programming to Interface تحقق المبدأ الخامس من مباديء SOLID و هو الـDependency Inversion principle و فيه فلسفة جميلة ان البرامج عادة ان الكلاس المنادي Caller يقع دائماً تحت رحمة الClass المنادى Callee اي تغيير في الكلاس المنادى قد يكسر المنادي