Foros del Web » Programación para mayores de 30 ;) » .NET »

Interfaces en C#

Estas en el tema de Interfaces en C# en el foro de .NET en Foros del Web. Hola amigos, tengo algunas dudas con las interfaces. Sé como se declaran y sé la finalidad de declararlas (al menos la idea teorica, no tanto ...
  #1 (permalink)  
Antiguo 25/05/2011, 15:57
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Interfaces en C#

Hola amigos, tengo algunas dudas con las interfaces.
Sé como se declaran y sé la finalidad de declararlas (al menos la idea teorica, no tanto a nivel práctico).
Ahí van las dudas:

-Si yo tengo 5 clases, en caso de que no tengan relación entre si (Ej: ClaseGato, ClaseMoto, ClaseEdificio ...) , ¿creo 5 interfaces para dichas clases?

-Para "usarlas" ¿ siempre se debe hacer IClaseGato gato= new ClaseGato(); ?

-Si yo quiero devolver una colección de ClaseGato , ¿ tengo que devolver en realidad una coleccion IClaseGato ? Es decir:

List<IClaseGato> listaGatos = new List<IClaseGato>();
IClaseGato gato=new ClaseGato();

Cualquier comentario o sugerencia es bien recibido
  #2 (permalink)  
Antiguo 25/05/2011, 16:06
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Respuesta: Interfaces en C#

creo que tienes un mucho de confusion con el termino

pongamoslo en ejemplo practico

imaginemos que tienes un conjunto de clases que deben tener algo con en comun (comportamiento)

digamos que si tu sabes que maulla , y ronronea es un felino ahora supongamos que felinos pueden ser muchos no simplemente gatos, si no tambien leones, tigres que se yo

entonces la interfaz sirve como un discriminante de accion es decir que tu sabes que todos los felinos maullan y ronronean

entonces tendrias una clase

gato que implementa la interfaz IFelino
leon que implementa la interfa IFelino
tigre que implementa la interfa IFelino
puma que implementa la interfa IFelino

y supongamos que quisieras procesar una lista de animales q peuden ser de la misma familia pero con caracteristicas qe los hacen unicos

entonces podrias decir

List<IFelino> felinos=new List<IFelino>();

felnos.Add(gato);
felnos.Add(tigre);
felnos.Add(leon);
felnos.Add(puma);

cada uno es de una clase diferente pero tienen un comportamiento similar, por lo que la interfaz IFelino determina que no importa como es que ejecute cada uno su forma de ronronear o maullar todos lo hacen.

entonces si tu iteraras sobre esa lista de felinos y le pidieras a cada uno ronronear lo harian.

es una analogia tal vez muy boao pero funciona a fines practicos

las interfaces no son contratos yo lo veo mas como membresias d eun club para poder ser de este club debes seguir estas acciones no me importa como las hagas pero debes cumplirlas.

Comportamiento
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 25/05/2011, 16:19
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Interfaces en C#

Gracias por la explicación.

Entiendo lo que dices que para los casos en que tenemos diferentes implementaciones de lo mismo resultan útiles (en tu ejemplo ronronear).

Pero precisamente yo comencé preguntando que pasa en el caso de que tengamos clases sin relación entre si, ¿resultan útiles las interfaces en ese caso? ¿creo una interfaz para cada una?

Por lo que yo entiendo, la utilidad de las interfaces es minimizar el acoplamiento (o dependencia) entre las diferentes capas de forma que mientras que no cambie la firma IClaseGato, puedo cambiar el código de ClaseGato sin tocar el resto de la aplicación.

Por otro lado aunque esto lo he leído mil veces, aún no acabo de comprender a nivel práctico los beneficios que conlleva pero bueno...
  #4 (permalink)  
Antiguo 25/05/2011, 16:22
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Respuesta: Interfaces en C#

pues no es necesario si no hay relación entre ellas que se generen interfaces únicas
para cada una, a menos que precisamente consideres un crecimiento de tu aplicativo a futuro.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 25/05/2011, 17:34
Avatar de giovani_loera  
Fecha de Ingreso: mayo-2011
Ubicación: Tijuana
Mensajes: 225
Antigüedad: 12 años, 11 meses
Puntos: 21
Respuesta: Interfaces en C#

Primeramente un Saludo.

Te voy a explicar con el ejemplo anterior.

Tienes una Interfaz que se llamara IFelino,IAve.
Tienes una clase que se llaman Animal,Puma,Gato,Oso,Aguila

Como debes saber una clase, no puede heredar mas de 2 clases y aqui entran las interfaces; se puede decir q las interfaces son como clases(pero sin logica, solo tiene la mascara o q metodos tiene q tener), una clase puede heredar 1 o mas interfaces.

Mejor veamos con el ejemplo.

Código C:
Ver original
  1. //'Declaramos la Clase y las Interfacez'
  2.  
  3.  //En las clases si viene logica, y la logica q pongas aqui sera para todas
  4.     //las clases que  hereden de ella.
  5.     //Para cambiar la logica de un metodo de una clase padre, se usa el override
  6.     //(pero esto es otro tema).
  7.  
  8.     class Animal //Clase Padre
  9.     {
  10.        
  11.         void Comer()
  12.         {
  13.             //codigo
  14.         }
  15.         void Dormir()
  16.         {
  17.             //codigo
  18.         }
  19.     }
  20.     //Al crear una Interfaz, no existe nada de logica, solo se pone la Mascara
  21.  
  22.     //(es decir, que es lo que quiren que Tengan las clases que hereden o
  23. //mejor dicho Implementar)
  24.     interface IFelino
  25.     {
  26.         void Maullar();
  27.         void Ronronear();
  28.         void Correr();
  29.     }
  30.     interface IAve
  31.     {
  32.         void Volar();
  33.     }

Código C:
Ver original
  1. //Declaramos las Clases, la heredamos de la clase animal, he implementamos
  2. //la interfaz depende de cada una.
  3.  
  4.  class Puma : Animal, IFelino
  5. //La clase Puma es hija de la clase Padre Animal, he implementa
  6. // la Interfaz IFelino
  7.     {
  8.         public void Maullar()
  9.         {
  10.             //codigo para la clase puma
  11.             throw new NotImplementedException();
  12.         }
  13.  
  14.         public void Ronronear()
  15.         {
  16.             //codigo para la clase puma
  17.             throw new NotImplementedException();
  18.         }
  19.  
  20.         public void Correr()
  21.         {
  22.             //codigo para la clase puma
  23.             throw new NotImplementedException();
  24.         }
  25.     }
  26.     class Gato : Animal, IFelino
  27. //La clase Gato es hija de la clase Padre Animal, he implementa
  28. //la Interfaz IFelino
  29.     {
  30.         public void Maullar()
  31.         {
  32.             //codigo para la clase gato
  33.             throw new NotImplementedException();
  34.         }
  35.  
  36.         public void Ronronear()
  37.         {
  38.             //codigo para la clase gato
  39.             throw new NotImplementedException();
  40.         }
  41.  
  42.         public void Correr()
  43.         {
  44.             //codigo para la clase gato
  45.             throw new NotImplementedException();
  46.         }
  47.     }
  48.     class Aguila : Animal, IAve
  49. //La clase Aguila es hija de la clase Padre Animal, he implementa
  50. // la Interfaz IAve
  51.     {
  52.         public void Volar()
  53.         {
  54.             //codigo para la clase aguila
  55.             throw new NotImplementedException();
  56.         }
  57.     }
  58.     class Oso : Animal//La clase Oso es hija de la clase Padre Animal
  59.     {
  60.     }


Espero q te aya servido de algo,
  #6 (permalink)  
Antiguo 26/05/2011, 08:08
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Interfaces en C#

Gracias a los dos por aportar vuestro punto de vista.

Razonandolo un poco creo que Peterpay está en lo cierto y realmente no tiene mucho sentido hacer interfaces siempre (aunque he visto diseños que abusan y las usan para todo).

Para bien o para mal cada desarrollador tiene sus "manías" y puede justificar el uso de interfaces a su manera.

Incluso he visto que mientras alguna gente recomienda usar algún patrón en concreto, ese mismo patrón lo desaconsejan otros autores. En fin, variedad de opiniones = confusión para los principiantes

Un saludo!

Etiquetas: c#, interfaces, sharp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:54.