لماذا نستخدم واجهة؟ هل هو فقط للتوحيد؟ [مغلق

StackOverflow https://stackoverflow.com/questions/2026054

  •  19-09-2019
  •  | 
  •  

سؤال

لماذا نستخدم واجهة؟

هل هو فقط للتوحيد؟

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

المحلول

أغراض الواجهات

  • إنشاء برنامج مقرن فضفاض
  • الدعم التصميم حسب العقد (يجب أن يوفر المنفذ الواجهة بأكملها)
  • السماح للبرامج القابلة للتوصيل
  • السماح بالكائنات المختلفة للتفاعل بسهولة
  • إخفاء تفاصيل التنفيذ للفصول من بعضها البعض
  • تسهيل إعادة استخدام البرامج

القياس 1.: يشبه إلى حد كبير مكوك الفضاء الأمريكي، والمركبة الفضائية Soyuz الروسية وشنتشو الصيني 5 يمكن أن تكون قفص الاتهام إلى المحطة الفضائية الدولية، لأنها تنفذ نفس واجهة الإرساء. (هذا مجرد مثال - لا أعرف ما إذا كان الأمر صحيحا في الحياة الحقيقية، ومع ذلك، دعونا ستعلقون على فروعنا من أجل مثال)

القياس 2.: كما يمكنك توصيل شاشات الكمبيوتر المختلفة في الكمبيوتر المنزلي الخاص بك. يمكنك توصيل جهاز تلفزيون بحجم الحائط، وهو CRT القديم (النوع الكثيف) أو شاشة مسطحة أو 20 بوصة أو آلة برايل للمكفوفين "انظر" من خلال اللمس. هناك توافق بين هذه الأجهزة المختلفة / المختلفة الكمبيوتر لأنهم جميعا يتفقون على معايير الواجهة.

تفاصيل واجهات C # - مع واجهات C # / OOP التي تفعل نفس النوع من الأشياء ولكن في العالم غير المرئي / الظاهري.

أنت صحيح حول التوحيد, ، ولكن أيضا المرونة, قابلية التوسع, القابلية للضغط, قابلية الصيانة, إعادة استخدام, القدرة على التحصيل و قوة.

(كلما استخدمت واجهات البرامج كلما زاد فهم هذه الكلمات "الطنانة". ونظرت دائما في واجهات في العالم الحقيقي لأنها قد فعلتنا على قدم المساواة.)

نصائح أخرى

يتم استخدام واجهة لوصف ما يمكن أن يفعله شيء ينفذ. لذلك لديك إمكانية علاج العديد من الكائنات التي تنفذ نفس الواجهة كنوع من هذه الواجهة.

علي سبيل المثال:

public interface IMyInterface{
    public void DoFirst();
    public int DoSecond();
}


public class A : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blubb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blubb2");
     return 2;  
   }
}

public class B : IMyInterface{
   //class has to implement DoFirst and DoSecond
   public void DoFirst(){
     Console.WriteLine("Blibb1");  
   }

   public int DoSecond(){
     Console.WriteLine("Blibb2");  
     return 4;
   }
}

الفصول تنفذ الواجهة بعدة طرق. ولكن يمكنك استخدامها ك imyinterface. علي سبيل المثال:

public static void DoMethodsInInterface(IMyInterface inter){
    inter.DoFirst();
    inter.DoSecond();
}


public static void main(){

   DoMethodsInInterface(new A());
   DoMethodsInInterface(new B());
   //Or use it in a List
   List<IMyInterface> interlist = new List<IMyInterface>();
   interlist.Add(new A());
   interlist.Add(new B());
   foreach(IMyInterface inter in interlist){
      inter.DoFirst();
   }

}

آمل أن يكون هذا واضحا بعض الشيء لماذا واجهات مفيدة.

إنه للتفاعل :)، بحيث يمكنك واجهة بين الأشياء، من المفيد عند وجودك

  • تطبيقات متعددة من نفس الأشياء
  • عند تطبيق واجهة إلى فئات مختلفة متعددة لأنك تحتاج إلى نوع من الاتفاقية أن هذه الفئات هي جووننا تكون قادرة على القيام ببعض الأشياء أو لديك بعض الوظائف

إليك عرض المستوى العالي ...

واجهات تلعب دورا كبيرا في مفهوم إخفاء المعلومات.

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

عندما بدأت لأول مرة في فهم الواجهات التي تم شرحها لي ك "عقد يوفر وصف فصلك". لست متأكدا مما إذا كان ذلك سيساعدك ولكن إذا كنت تفكر في واجهة سيارة، فيمكنك قول ذلك محركات, فرامل, ، و المنعذر. وبعد طالما أنها تجعلني من النقطة أ إلى نقطة ب، فلا يجب علي أن أعرف كيف يتم تنفيذ هذه الوظائف.

السبب الرئيسي تستخدم الواجهات في اللغات مثل C # / Java لأن هذه اللغات لا تدعم الميراث المتعدد (انظر ما هي المشكلة الدقيقة مع ميراث متعددة؟).

لكن تنفيذ متعدد (واجهة) يسمح بإعداد الفصول المستخدمة في طرق مختلفة.

واجهات محرجة إلى حد ما. إنهم يدعمون التصميم حسب العقد فقط عن طريق الإيمان، وهو نفس الاسم والواجهة المنفذة يعني نفس السلوك. هذا يعمل فقط بفضل وثائق API، يجب فحص الإنسان. هذا يجعل واجهات ضعيفة للغاية. طريقة واحدة للتحصل حولها يمكن أن تكون مواصفات رسمية. من ناحية أخرى، فإن واجهات قوية جدا، صارمة جدا. لا يمكنك تطوير واجهات غالبا ما يحصل على طريقة إعادة استخدامه. تم حل هذا عن طريق البروتوكولات - آلية بلغات ديناميكية، والتي ترسل الرسائل (طرق الاتصال) وعندما لا يتم دعم تلك الرسالة بواسطة جهاز الاستقبال، يتم استدعاء رد الاتصال القياسي. وجود بروتوكولات ملموسة مع قيود سيكون IMHO أفضل.

فكر في أبعد...

هناك عميل وخادم مشترك هنا. دعونا نقول أنهم منفصلون جسديا بالإنترنت. يقوم العميل بالاتصال بالطريقة التي يحدث تنفيذها الفعلي على الخادم. من وجهة نظر العميل، لا يعرف العميل أي شيء عن الكائن في الخادم الذي يؤدي التنفيذ. ومع ذلك، يعرف طريقة الاتصال. لأنه أثناء بناء برنامج العميل، فإننا نتعرض فقط لواجهة (أو عقد). نحن لسنا نتعرض للكائن بأكمله وهو يعيش بالفعل على الخادم. حاول القيام ببعض التطبيقات العرضية في الإطلاق، وسوف تكتشف الباقي. برمجة سعيدة.

لماذا نستخدم واجهات؟

بعض اللغات تنفذ مكالمات الأسلوب متعدد الأشكال باستخدام VTables وتجاهل معظم معلومات النوع مما يجعلها من الصعب ليس لتحديد الواجهات.

في وقت ما، يمكننا ببساطة استخدام واجهات لأن تصميم اللغة يتطلب ذلك.

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

واجهة تفصل عن نوع البيانات من منطق التنفيذ.

توفر الواجهة مشروط النموذج الأولي الذي يحتوي فقط على إعلان وظيفة سلوك محدد.

وإذا كنت ترغب في تنفيذ هذا السلوك في الفصل، فيجب عليك تنفيذ هذه الواجهة في الفصل، فكل الفئة لديها وظيفة السلوك هذه أو يمكن أن يكون لها سلوك متعدد.

لأن الطبقة يمكن أن تنفذ واجهة متعددة.

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

لقد وجدت هذا التنفيذ لشبكة عصبية في C #، بما في ذلك تنزيل المشروع، والذي يستخدم واجهات بطريقة أنيقة ومفيدة:

http://www.c-sharpcorner.com/uploadfile/rmcochran/ai_oop_neuralnet0619200609112am/ai_oop_neuralnet.aspx.

فيما يلي الأسباب الرئيسية لاستخدام الواجهات

  1. القابلية للضغط
  2. التنفيذ يختبئ
  3. الوصول إلى الكائن من خلال واجهات
  4. اقتران فضفاض.

يرجى زيارة هذا رابط لمعرفة عن واجهات مع مثال رمز القابل للتنزيل

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