Saltar al contenido

¿Qué hace una interfaz en la programación orientada a objetos?

No diría que Binance es la plataforma más fácil para principiantes, pero puede sentir que está seguro dentro de ella. Puede ...
Leer Más
Hoy, veremos una de las criptomonedas más exclusivas: Dogecoin y descubriremos dónde y cómo comprar Dogecoin. En esta guía, aprenderá ...
Leer Más
Este corredor en línea tiene tarifas de negociación bajas y una amplia cartera de instrumentos financieros. Cubriendo más de 135 ...
Leer Más

Uno de los componentes secreto de los lenguajes orientados a objetos como Java y C # es la capacidad de escribir clases utilizando interfaces, que estandarizan las definiciones de métodos y permiten un polimorfismo mejorado. Discutiremos qué son y cómo usarlos.

Polimorfismo formalizado

Las interfaces son básicamente clases sin código. Puede fijar propiedades y métodos (aunque no campos directamente) sin juntar datos o escribir una implementación para funciones.

Por ejemplo, la interfaz IEnumerable de .NET es muy global. Todo lo que requiere es una función que devuelva un IEnumerator, que se puede usar para iterar sobre una colección.

  1. public interface IEnumerable
  2. {
  3.     IEnumerator GetEnumerator();
  4. }

Cada colección en .NET implementos esta interfaz. De hecho, la mayoría de las colecciones implementarán muchas interfaces, todas estandarizando los métodos utilizados para trabajar con ellas.

El beneficio de hacerlo de esta forma es que todos los métodos están estandarizados en la interfaz, de modo que cada vez que desee que poco acepte muchos tipos de clases, puede hacerlo accediendo a los métodos de la interfaz.

Por ejemplo, foreach bucles debajo del capó positivamente solo use .GetEnumerator(), por lo que admitirán cualquier tipo de colección que implemente IEnumerable, como Listas, Diccionarios y HashSets.

  1. void Main()
  2. {
  3.     foreach(var item in  IEnumerable) 
  4.     {
  5.        // do something
  6.     }
  7. }

Puede pensar en las interfaces como un reemplazo de las clases colchoneta. Las clases colchoneta siguen siendo muy bártulos, pero requerir que todas las clases hereden y anulen métodos puede resultar complicado. Adicionalmente, solo puede tener una clase colchoneta, pero puede implementar cualquier cantidad de interfaces.

Igualmente se pueden utilizar interfaces en puesto de parámetros de tipo. Por ejemplo, puede tener una colección personalizada, CustomList. Esto funciona para cualquier tipo, pero si desea atraer a un método específico en cada punto, no puede hacerlo, ya que el compilador no tiene idea de si el tipo que se utiliza es compatible con ese método. Las únicas opciones que obtendrá serán los métodos para objects.

Sin bloqueo, si en puesto de eso abandonara el parámetro de tipo genérico y usara una interfaz, puede atraer a un método en los fundamentos. La colección seguirá admitiendo cualquier tipo de tipo, aunque ahora cada punto que pretenda incluir deberá implementar la interfaz.

En militar, debe usar interfaces cuando reutiliza los mismos métodos para muchas clases que no se heredan entre sí, y le gustaría poder escribir código polimórfico que no se preocupe por la clase subyacente específica.

Usando interfaces

Las interfaces son sobrado sencillas de usar. Usan la misma sintaxis de herencia que las clases colchoneta, dos puntos a posteriori de la definición de la clase. Tenga en cuenta que si desea utilizar una interfaz con una clase colchoneta, la clase colchoneta debe ir primero, seguida de una coma y luego cualquier interfaz que implemente.

Una vez que agregue la definición de interfaz, probablemente obtendrá un error. Visual Studio le dirá que en efectividad no está implementando las propiedades y métodos de la interfaz. En efectividad, esto puede ser muy útil, ya que si realiza algún cambio en la interfaz, deberá desempolvar todas las clases que lo implementan.

Visual Studio es sobrado sofisticado, y si hace clic en “mostrar posibles correcciones”, obtendrá una opción para que VS agregue automáticamente la plantilla de interfaz a su clase. Obviamente, deberá reemplazar las excepciones NotImplementedExceptions.

Igualmente puede implementar interfaces explícitamente. Esto tiene el mismo intención, pero con una sintaxis diferente que deja claro de qué interfaz proviene el método o la propiedad. Esto parece sobrado extraño a primera paisaje, pero puede ser útil si está implementando muchas interfaces.

Escribir sus propias interfaces

Las definiciones de interfaz son prácticamente las mismas que las definiciones de clase, aunque cada método no tendrá un cuerpo y, obviamente, necesitará usar “interfaz” en puesto de “clase”. Al igual que las clases, las interfaces asimismo pueden usar parámetros de tipo genérico, que pueden ser bártulos para colecciones personalizadas.

Puedes usar el { get; set; } sintaxis para especificar propiedades implícitamente, que asimismo funciona cuando se implementan en la clase auténtico:

Igualmente puede hacer que las interfaces se hereden entre sí. Por ejemplo, este ICustomList La interfaz podría ser mucho más útil si simplemente incluyera todas las demás definiciones que List utiliza, pero agrega algunos personalizados. Ahora, cuando vaya a usar la interfaz, deberá implementar todos los miembros de la interfaz de cada interfaz de la que hereda.