¿Por qué usamos Interface?
¿Es solo para estandarización?
¿Por qué usamos Interface?
¿Es solo para estandarización?
Respuestas:
Analogía 1 : al igual que el transbordador espacial estadounidense, la nave espacial rusa Soyuz y la china Shenzhou 5 pueden acoplarse a la Estación Espacial Internacional porque implementan la misma interfaz de acoplamiento. (Este es solo un ejemplo, no sé si es cierto en la vida real, sin embargo, suspendamos nuestra incredulidad por un ejemplo)
Analogía 2 : como si pudiera conectar varios monitores de computadora a la computadora de su hogar. Puede conectarle un televisor del tamaño de una pared, un viejo CRT (del tipo grueso), una pantalla plana de 20 "o una máquina braille para que las personas ciegas" vean "al tacto. Hay compatibilidad entre estos distintos dispositivos y su computadora porque todos están de acuerdo con los estándares de interfaz.
Detalles de las interfaces C #: con las interfaces C # / OOP, está haciendo el mismo tipo de cosas pero en el mundo invisible / virtual.
Tiene razón sobre la estandarización , pero también sobre flexibilidad , escalabilidad , extensibilidad , capacidad de mantenimiento , reutilización , capacidad de prueba y potencia .
(Cuanto más use interfaces de software, más se entenderán estas "palabras de moda". Y siempre considere las interfaces en el mundo real porque nos han funcionado igualmente bien).
standardization, but also flexibility, scalability, extensibility, maintainability, reusability, testability and power.
Se usa una interfaz para describir lo que puede hacer una cosa implementada. Por lo tanto, tiene la posibilidad de tratar varios objetos que implementan la misma interfaz como un tipo de esta interfaz.
Por ejemplo:
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;
}
}
Las clases implementan la Interfaz de varias formas. Pero puede usarlos como IMyInterface. Por ejemplo:
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();
}
}
Espero que esto aclare un poco por qué las interfaces son útiles.
Woozle
, cualquier código que quisiera aceptar una referencia a cualquiera de las clases y Woozle
tendría que saber con qué clase estaba tratando, y solo podría conocer las Woozle
clases que conocía. Por el contrario, si ambas clases se implementan IWoozler
, entonces el código que se proporciona IWoozler
puede Woozle
hacerlo sin tener que saber su tipo exacto.
Es para interactuar :), para que pueda interactuar entre cosas, es útil cuando tiene
Aquí está la vista de alto nivel ...
Las interfaces juegan un papel importante en el concepto de ocultación de información .
Básicamente, te ayudan a ocultar los detalles de implementación de tu clase para que una clase de llamada no dependa de esa implementación. Por lo tanto, al usar interfaces, puede modificar la implementación sin cambiar la clase de llamada. Todo esto a su vez limita la complejidad de su código y facilita su mantenimiento a largo plazo.
Cuando comencé a comprender las interfaces, me las explicaron como un "contrato que proporciona una descripción de su clase". No estoy seguro de si eso le ayudará, pero si piensa en una interfaz para un automóvil, podría decir que conduce , se rompe y gira . Entonces, siempre que me lleve del punto A al punto B, realmente no tengo que saber cómo se implementan esas funciones.
La razón principal por la que las interfaces se utilizan en lenguajes como C # / Java es porque esos lenguajes no admiten la herencia múltiple (de clases) (consulte ¿Cuál es el problema exacto con la herencia múltiple? ).
Pero se permite la implementación múltiple (interfaz), lo que permite que las clases se utilicen de diferentes maneras.
Las interfaces son algo incómodas. Apoyan el diseño por contrato con solo creer que el mismo nombre y la interfaz implementada significan el mismo comportamiento. Esto solo funciona gracias a la documentación de la API, debe ser verificado por humanos. Eso hace que las interfaces sean demasiado débiles. Una forma de evitar eso podría ser especificaciones formales. Por otro lado, las interfaces son demasiado fuertes, demasiado estrictas. No se pueden desarrollar interfaces que a menudo se interponen en el camino de la reutilización. Esto se resuelve mediante protocolos: mecanismo en lenguajes dinámicos, que envían mensajes (métodos de llamada) y cuando ese mensaje no es compatible con el receptor, se llama a la devolución de llamada estándar. Tener protocolos concretos con limitaciones sería mejor en mi humilde opinión.
Piense en el control remoto ...
Hay un cliente y un servidor involucrados aquí. Digamos que están físicamente separados por Internet. El cliente está llamando a un método cuya ejecución real ocurre en el servidor. Desde la perspectiva del cliente, el cliente no sabe nada sobre el objeto en el servidor que realiza la ejecución. Sin embargo, sabe qué método llamar. Porque mientras construimos el programa del cliente, solo estamos expuestos a una interfaz (o contrato). No estamos expuestos a todo el objeto que vive en el servidor. Intente hacer algunas aplicaciones de demostración en .net remoting y averiguará el resto. Feliz programación.
¿Por qué usamos interfaces?
Algunos lenguajes implementan llamadas a métodos polimórficos usando vtables y descartan la mayor parte de la información de tipo, lo que dificulta no definir interfaces.
Entonces, a veces simplemente usamos interfaces porque el diseño del lenguaje lo requiere.
La interfaz proporciona un prototipo de modal que solo contiene la declaración de funcionalidad de un comportamiento específico.
y si desea implementar este comportamiento en la clase, entonces debe implementar esta interfaz en la clase, entonces la clase tiene esta funcionalidad de comportamiento o puede tener un comportamiento múltiple.
porque la clase puede implementar múltiples interfaces.
Si alguien más es como yo y aprende con el ejemplo y la práctica, en lugar de solo una explicación, aquí hay un código ...
Encontré esta implementación de una red neuronal en C #, incluida la descarga del proyecto, que hace uso de las interfaces de una manera elegante y útil: