Чому ми використовуємо інтерфейс?
Це лише для стандартизації?
Чому ми використовуємо інтерфейс?
Це лише для стандартизації?
Відповіді:
Аналогія 1 : Подібно до американського космічного човника, російський космічний корабель "Союз" і китайський "Шеньчжоу-5" можуть причалити до Міжнародної космічної станції, оскільки вони використовують той самий док-інтерфейс. (Це лише приклад - я не знаю, чи це правда в реальному житті, однак давайте припинимо нашу невіру заради прикладу)
Аналогія 2 : Як ви можете підключити різні монітори комп’ютерів до домашнього комп’ютера. Ви можете підключити до нього настінний телевізор, старий ЕПТ (товстий), 20-дюймовий плоский екран або брайлівський апарат для сліпих, щоб "бачити" на дотик. Ці різні / різні пристрої сумісні з комп’ютер, оскільки всі вони погоджуються на стандарти інтерфейсу.
Деталі інтерфейсів C # - з інтерфейсами C # / OOP ви робите те саме, але у невидимому / віртуальному світі.
Ви правильно говорите про стандартизацію , а також про гнучкість , масштабованість , розширюваність , ремонтопридатність , багаторазове використання , перевірку та потужність .
(Чим більше ви будете використовувати програмні інтерфейси, тим більше будуть зрозумілі ці "слівця". І завжди враховуйте інтерфейси в реальному світі, тому що вони зробили нас однаково добре)
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
Інтерфейс використовується для опису того, що може реалізована річ. Отже, у вас є можливість обробляти декілька об’єктів, які реалізують один і той же інтерфейс, як тип цього інтерфейсу.
Наприклад:
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();
}
}
Сподіваюся, це трохи зрозуміло, чому корисні інтерфейси.
Woozle
, будь-який код, який хоче прийняти посилання на будь-який клас, і Woozle
він повинен знати, з яким класом має справу, і матиме змогу лише Woozle
класи, про які він знав. На відміну від цього, якщо обидва класи реалізують IWoozler
, тоді код, який надається будь-який, IWoozler
може Woozle
це зробити, не знаючи його точного типу.
Це для взаємодії :), щоб ви могли взаємодіяти між речами, це корисно, коли у вас є
Ось вид на високому рівні ...
Інтерфейси відіграють велику роль у концепції приховування інформації .
Вони в основному допомагають вам приховати деталі реалізації вашого класу, так що викликаючий клас не має залежності від цієї реалізації. Отже, за допомогою інтерфейсів ви можете модифікувати реалізацію без зміни класу виклику. Це все в свою чергу обмежує складність вашого коду і полегшує його підтримку в довгостроковій перспективі.
Коли я вперше почав розуміти інтерфейси, вони пояснили мені це як "контракт, що містить опис вашого класу". Не впевнений, чи це допоможе вам, але якщо ви думаєте про інтерфейс для автомобіля, ви можете сказати, що він їде , ламається та повертається . Отже, поки я потрапляю з пункту А в пункт Б, я насправді не повинен знати, як ці функції реалізовані.
Основна причина, по якій інтерфейси використовуються в таких мовах, як C # / Java, полягає в тому, що ці мови не підтримують множинне (клас) успадкування (див. Яка точна проблема багаторазового успадкування? ).
Але багаторазова реалізація (інтерфейс) дозволена, що дозволяє використовувати класи по-різному.
Інтерфейси дещо незграбні. Вони підтримують дизайн за контрактом, просто вірячи, що однакові назви та реалізований інтерфейс означають однакову поведінку. Це працює лише завдяки документації API, вона повинна бути перевірена людиною. Це робить інтерфейси занадто слабкими. Одним із способів обійти це можуть бути офіційні специфікації. З іншого боку, інтерфейси занадто міцні, занадто суворі. Ви не можете розвивати інтерфейси, які часто заважають повторному використанню. Це вирішується протоколами - механізмом на динамічних мовах, які надсилають повідомлення (методи виклику), а коли це повідомлення не підтримується одержувачем, викликається стандартний зворотний виклик. Наявність конкретних протоколів з обмеженнями було б краще.
Подумайте про віддалення ...
Тут задіяний клієнт і сервер. Скажімо, їх фізично розділяє Інтернет. Клієнт викликає метод, фактичне виконання якого відбувається на сервері. З точки зору клієнта, клієнт не знає нічого про об'єкт на сервері, який виконує виконання. Однак він знає, який метод викликати. Оскільки, будуючи клієнтську програму, ми стикаємось лише з інтерфейсом (або контрактом). Ми не потрапляємо під дію всього об’єкта, який насправді живе на сервері. Спробуйте зробити деякі демонстраційні програми в .net віддаленому, і ви зрозумієте все інше. Щасливого програмування.
Чому ми використовуємо інтерфейси?
Деякі мови реалізація поліморфних викликів методів з використанням віртуальних таблиць і відкидати більшу частину інформації про тип ускладнюючи НЕ для визначення інтерфейсів.
Тож колись ми просто використовуємо інтерфейси, оскільки мовний дизайн цього вимагає.
Починаючи з інтерфейсу, ви можете реалізувати проксі-сервер , тим самим дозволяючи ліниве завантаження або виконуючи деякі перевірки при виклику методів конкретної реалізації.
Інтерфейс забезпечує прототип модального, який просто містить декларацію про функціональність конкретної поведінки.
і якщо ви хочете реалізувати цю поведінку в класі, тоді ви повинні реалізувати цей інтерфейс у класі, тоді клас має таку функціональність поведінки, або він може мати кілька поведінок.
оскільки клас може реалізувати кілька інтерфейсів.
Якщо хтось ще схожий на мене і вчиться на прикладах і вчинках, а не лише на поясненнях, ось якийсь код ....
Я знайшов цю реалізацію нейронної мережі в C #, включаючи завантаження проекту, яка використовує інтерфейси елегантно та корисно: