Pregunta ¿Por qué usamos Interface? ¿Es solo para estandarización?


¿Por qué usamos Interface?

¿Es solo para estandarización?


74
2018-01-08 07:28


origen


Respuestas:


Propósitos de las interfaces

  • crear software libremente acoplado
  • apoyo diseño 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 los 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)

Analogía 2: Como si pudiera conectar varios monitores de computadora en 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 el mismo tipo de cosas, pero en el mundo invisible / virtual.

Estás en lo correcto acerca de normalización, pero también flexibilidad, escalabilidad, extensibilidad, mantenibilidad, reutilizabilidad, capacidad de prueba y poder.

(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).


166
2018-01-08 09:03



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.


28
2018-01-08 21:49



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

5
2018-01-25 08:40



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) (ver ¿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.


2
2018-01-25 18:01



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 esconder el detalles de implementacion 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. Esto todo por turno limita la complejidad de tu código y hazlo más fácil de mantener a la larga.

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 unidades, descansosy vueltas. Así que mientras me lleve del punto A al punto B, realmente no tengo que saber cómo se implementan esas funciones.


2
2018-01-08 21:17



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.


2



Pensar 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


1



¿Por qué usamos interfaces?

Algunos lenguajes implementan llamadas a métodos polimórficos utilizando vtables y descartan la mayor parte de la información de tipo, lo que dificulta su uso. no para definir interfaces.

Entonces, en algún momento simplemente usamos interfaces porque el diseño del lenguaje lo requiere.


0



Al comenzar con una interfaz, puede implementar un apoderado, lo que permite la carga diferida o la realización de algunas verificaciones al llamar a los métodos de una implementación concreta.


0



La interfaz separa el tipo de datos de la lógica de implementación.


0