No entiendo beneficio de usar interface si de todas forma se debe implementar el codigo del metodo de la interface en cada clase hija?

Pregunta de la clase:
Luis Ponce

Luis Ponce

Pregunta
studenthace 9 años

No entiendo beneficio de usar interface si de todas forma se debe implementar el codigo del metodo de la interface en cada clase hija?

4 respuestas
para escribir tu comentario
    David Cruz Zavaleta

    David Cruz Zavaleta

    studenthace 9 años

    Las interfaces no son para herencia múltiple, ojo con eso. Es una explicación muy repetida pero equivocada. 

    Una interface puedes entenderla como un contrato, y las clases que la implementen, tienen que cumplir con ese contrato, independientemente de los detalles de su implementación. 

    Por ejemplo la siguiente interface define un contrato que cualquiera que desee ser Mesero, debe implementar: 

    public interface IMesero
    {
      void TomaLaOrden();
    }

    Cada clase que implemente la interfaz debe cumplir el contrato y contar con un método para "Tomar la orden". Por ejemplo, de forma muy simplificada: 

    public class David: IMesero
    {
      public void TomaLaOrden()
      {
          Console.Writeline("Yo soy amable al tomar la orden y la paso a cocina"); 
      }
    }
    public class Uriel: IMesero
    {
      public void TomaLaOrden()
      {
          Console.Writeline("Yo me tardo mucho al tomar la orden y la paso a cocina"); 
      }
    }
    public class Juan: IMesero
    {
      public void TomaLaOrden()
      {
          Console.Writeline("Yo soy muy rapido al tomar la orden y la paso a cocina"); 
      }
    }

    Como puedes ver, no tiene nada que ver con herencia, pues tienes que implementar toda la lógica necesaria para cumplir con el contrato que define la interface.

    Sin embargo, teniendo esas clases definidas la lógica de tu aplicación podría trabajar siempre contra la interface "IMesero", sin importar si se llama David, Uriel o Juan. Por que sabes que todos ellos tienen que ser capaces de "Tomar la Orden" y pasarla a cocina, sin importar como lo hagan, ni los detalles intermedios que realicen para cumplir el objetivo. 

    Esto te lleva a código desacoplado al trabajar contra abstracciones en vez de implementaciones específicas y a futuro te permite extender, mantener y realizar pruebas unitarias de forma mucho más sencilla con cuestiones como dependency injection, o el principio open/closed. 

    Gabriel Fernandez

    Gabriel Fernandez

    studenthace 9 años

    En el curso avanzado cuando explica la metodología SOLID es donde ves su uso real a parte de la herencia multiple. Por lo menos a mi me quedó muy claro en ese video te lo recomiendo

    Juan Carlos Ruiz Pacheco

    Juan Carlos Ruiz Pacheco

    teacherhace 9 años

    El punto es desacoplar el código, hacerlo extensible, reutilizable y fácil de mantener. Si muchas clases , incluso de familias diferentes, implementan la misma interfaz, esto te permitirá crear una misma pieza de código que funcionará con multiples objetos diferentes, sin las interaces a la final tendrías que crear muchas versiones similares del mismo código, una por cada clase objeto. El punto en POO es reutilizar tanto código como sea posible, si el algoritmo para hacer algunas cosas es practicamente el mismo probablemente puedes usar interfaces para abstraer la funcionalidad y programar una sola vez contra la interface y no múltiples veces contra las implementaciones específicas.

    Armando

    Armando

    studenthace 9 años

    Al definir una clase interface lo haces para ahorrar código, evitas escribir en cada clase que ocupes la cabecera del método. En cada clase que mandes a llamar los métodos de esa interface defines tú su comportamiento

Curso básico de C# 2017

Curso básico de C# 2017

Aprende a programar desde cero en C#. Crea aplicaciones que se ejecuten en cualquier sistema operativo. Domina las bases del lenguaje y las buenas practicas de C#.

Curso básico de C# 2017
Curso básico de C# 2017

Curso básico de C# 2017

Aprende a programar desde cero en C#. Crea aplicaciones que se ejecuten en cualquier sistema operativo. Domina las bases del lenguaje y las buenas practicas de C#.