oop - books - object oriented design principles
¿Por qué usamos Interface? ¿Es solo para estandarización? (13)
¿Por qué usamos Interface?
¿Es solo para estandarización?
¿Por qué usamos interfaces?
Algunos lenguajes implementan llamadas a métodos polimórficos utilizando tablas virtuales y descartan la mayor parte de la información del tipo, lo que dificulta la definición de interfaces.
Entonces, en algún momento simplemente usamos interfaces porque el diseño del lenguaje lo requiere.
Propósitos de las interfaces
- crear software libremente acoplado
- diseño de soporte por contrato (un implementador debe proporcionar toda la interfaz)
- permitir un software conectable
- permitir que diferentes objetos interactúen fácilmente
- ocultar los detalles de implementación de las clases entre sí
- facilitar la reutilización del software
Analogía 1 : al igual que el transbordador espacial de EE. UU., La nave espacial rusa Soyuz y el Shenzhou 5 chino pueden atracar en la Estación Espacial Internacional porque implementan la misma interfaz de acoplamiento. (Esto es solo un ejemplo - No sé si es verdad en la vida real, pero suspendamos nuestra incredulidad por el solo ejemplo)
Analogy 2 : como si pudiera conectar varios monitores de computadora a la computadora de su casa. Puede enchufar un televisor de pared, un CRT antiguo (del tipo grueso), una pantalla plana de 20 "o una máquina braille para que los ciegos" vean "por el tacto. Hay compatibilidad entre estos diversos / diferentes dispositivos y su computadora porque todos están de acuerdo en estándares de interfaz.
Detalles de las interfaces C #: con las interfaces C # / OOP estás haciendo lo mismo, pero en el mundo invisible / virtual.
Tiene razón acerca de la estandarización , pero también de la flexibilidad , la escalabilidad , la extensibilidad , el mantenimiento , la reutilización , la capacidad de prueba y la potencia .
(Cuanto más uses las interfaces de software, más se entenderán estas "palabras de moda". Y siempre considerarás las interfaces en el mundo real porque nos han hecho igual de bien).
Al comenzar con una interfaz, puede implementar un proxy , lo que permite la carga diferida o realizar algunas verificaciones al llamar a los métodos de una implementación concreta.
Aquí está la vista de alto nivel ...
Las interfaces juegan un papel importante en el concepto de ocultación de información .
Básicamente lo ayudan a ocultar los detalles de implementación de su clase para que una clase llamante 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 lo hace más fácil de mantener a largo plazo.
Cuando comencé a entender las interfaces, me las explicaron como un "contrato que proporciona una descripción de su clase". No estoy seguro si eso lo ayudará, pero si piensa en una interfaz para un automóvil, podría decir que conduce , se rompe y gira . Así que mientras me lleve del punto A al punto B, realmente no tengo que saber cómo se implementan esas funciones.
Es para interactuar :), para que puedas interactuar entre cosas, es útil cuando tienes
- múltiples implementaciones de las mismas cosas
- cuando aplica una interfaz a múltiples clases diferentes porque necesita algún tipo de convención de que estas clases sean capaces de hacer algunas cosas o tener alguna funcionalidad
La interfaz proporciona un prototipo 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 clase, entonces la clase tiene esta funcionalidad de comportamiento o puede tener un comportamiento múltiple.
porque la clase puede implementar una interfaz múltiple.
La interfaz separa el tipo de datos de la lógica de implementación.
La razón principal por la que se utilizan las interfaces en lenguajes como C # / Java es porque esos lenguajes no admiten herencia múltiple (clase) (consulte ¿Cuál es el problema exacto con la herencia múltiple? ).
Pero la implementación múltiple (interfaz) está permitida permitiendo que las clases se utilicen de diferentes maneras.
Las interfaces son algo incómodas. Admiten el diseño por contrato simplemente por creer, ese mismo nombre y la interfaz implementada significa el mismo comportamiento. Esto funciona solo gracias a la documentación de la API, tiene que ser revisado por humanos. Eso hace que las interfaces sean demasiado débiles. Una forma de evitarlo podría ser las especificaciones formales. Por otro lado, las interfaces son demasiado fuertes, demasiado estrictas. No puede 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 admitido por el receptor, se llama a la devolución de llamada estándar. Tener protocolos concretos con restricciones sería mucho mejor.
Las siguientes son las principales razones para el uso de interfaces
- Extensibilidad
- Implementación oculta
- Acceso al objeto a través de interfaces
- Bajo acoplamiento.
por favor visite este enlace para conocer las interfaces con ejemplos de códigos descargables
Piensa en remoting ...
Hay un cliente y un servidor involucrados aquí. Digamos que están físicamente separados por internet. El cliente llama 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 a qué método llamar. Porque al crear el programa cliente, solo estamos expuestos a una interfaz (o contrato). No estamos expuestos a todo el objeto que en realidad está viviendo en el servidor. Intente hacer algunas aplicaciones de demostración en .Net remoto, y se encargará del resto. Feliz programacion
Si alguien más es como yo y aprende con el ejemplo y el hacer, en lugar de solo la 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:
Una interfaz se utiliza para describir lo que una cosa implementada puede hacer. De modo que 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 maneras. Pero puedes 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 deje un poco claro por qué las interfaces son útiles.