Interfaces

22/07/2005 - 16:00 por Javier | Informe spam
Hola,
a ver si alguien me puede explicar.
Supongo que debe ser por desconocimiento, pero todavía no encuentro el
sentido a crear una interface.
No entiendo porque se declaran si despues los objetos que la implementan
redefinen el funcionamiento de acuerdo a su propia implementación.
Cual sería el beneficio concreto ? alguien me puede dar un ejemplo simple ?
Que diferencia tiene con la herencia ?
Alguien podria por favor sacarme estas dudas ? muchas gracias de ante mano.
Saludos a toda la comunidad

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo, [MVP VB.NET]
22/07/2005 - 16:12 | Informe spam
Te pongo dos ejemplos de su utilidad:

1. Resolucion de casos de herencia multiple por interfaces:

Como bien has de saber, .NET Framework no permite la herencia multiple, por
los diferentes problemas a los cuales se deben enfrentar los compiladores de
lenguajes que si lo permiten. Asi si por ejemplo tienes tres objetos:
Persona, Automovil, Caballo; y se quiere implementar un metodo que permita
desplazar estos elementos de un punto a otro punto, como resolverlo?

Por herencia? Muy probablemente cada uno ya proviene de su propia jerarquia
independiente de herencia.
Una version del metodo para cada uno? Demasiado complicado de extender
cuando nuevos elementos participan de esto

La solucion viene por interfaces, asi:
a. Creamos una interfaz, por ejemplo: IElementoMovil
b. Hacemos que todos estos lo implementen
c. Creamos el metodo:
void MoverElemento(IElementoMovil elemento) {
// desplazarlo en termino de los miembros de la interfaz
}

Ejemplos de la vida real?. El metodo Array.Sort() ordena los elementos del
arreglo utilizando el metodo QuickSort. Pero si es un arreglo de objetos
Persona? Como los ordena?. Pues hacemos que el objeto persona implemente
IComparable y en el mismo se implementa si quieres que se ordene por
nombres, numero de identificacion, edad, etc...



2. Exposicion de clases privadas a otros proyectos.

Este caso lo uso muy frecuentemente.

a. En un proyecto CommonLib.dll se implementa la interfaz IOperador, que
implementa ciertas operaciones del entorno de la aplicacion.

b. Las clases de logica reciben en su constructor un objeto del tiempo
IOperador, con el cual se podran comunicar con el entorno.

c. Un proyecto Principal.exe (ojo, de tipo EXE) implementa un objeto
internal, el cual sera ofuscado con todos los tramites del caso, ya que
expone miembros de uso interno del proyecto. Pero a su vez esta clase
implementa IOperador, por lo que este objeto interno, podra ser pasado como
parametro a los constructores de las clases de logica.



Estos son los casos en que mas a menudo me encuentro. Seguro que muchos mas
te pueden comentar otros escenarios.

Saludos,
Pedro Luna, [MVP VB.NET]
Gye, Ecu



"Javier" escribió en el mensaje
news:
Hola,
a ver si alguien me puede explicar.
Supongo que debe ser por desconocimiento, pero todavía no encuentro el
sentido a crear una interface.
No entiendo porque se declaran si despues los objetos que la implementan
redefinen el funcionamiento de acuerdo a su propia implementación.
Cual sería el beneficio concreto ? alguien me puede dar un ejemplo simple
?
Que diferencia tiene con la herencia ?
Alguien podria por favor sacarme estas dudas ? muchas gracias de ante
mano.
Saludos a toda la comunidad

Respuesta Responder a este mensaje
#2 Stoney el frío
22/07/2005 - 16:19 | Informe spam
Una interfaz es un contrato que deben cumplir las clases que lo implementen.

Normalmente las clases abstractas se utilizan para sustituir interfaces por
el hecho de que permiten implementaciones parciales de la clase, etc. Una
interfaz es más ligera y deja toda clase de implementación a la clase que
quiera usarla.

Que porqué se declaran si luego hay que redefinirlas? pues del mismo modo
que se hace con las clases abstractas...

Cuando se implementa una interfaz no se hereda nada de ella. Lo único que se
hace es cumplir con las reglas del contrato que ésta define.

Saludos,

"Javier" escribió en el mensaje
news:
Hola,
a ver si alguien me puede explicar.
Supongo que debe ser por desconocimiento, pero todavía no encuentro el
sentido a crear una interface.
No entiendo porque se declaran si despues los objetos que la implementan
redefinen el funcionamiento de acuerdo a su propia implementación.
Cual sería el beneficio concreto ? alguien me puede dar un ejemplo simple


?
Que diferencia tiene con la herencia ?
Alguien podria por favor sacarme estas dudas ? muchas gracias de ante


mano.
Saludos a toda la comunidad

Respuesta Responder a este mensaje
#3 Javier
22/07/2005 - 16:50 | Informe spam
Porque el metodo
MoverElemento(IElementoMovil elemento)
tiene un parametro del tipo IElementoMovil?
para que se utiliza esto ??

me parece un poco complejo el tema !
Gracias por la paciencia


"Pedro Luna Montalvo, [MVP VB.NET]" escribió:

Te pongo dos ejemplos de su utilidad:

1. Resolucion de casos de herencia multiple por interfaces:

Como bien has de saber, .NET Framework no permite la herencia multiple, por
los diferentes problemas a los cuales se deben enfrentar los compiladores de
lenguajes que si lo permiten. Asi si por ejemplo tienes tres objetos:
Persona, Automovil, Caballo; y se quiere implementar un metodo que permita
desplazar estos elementos de un punto a otro punto, como resolverlo?

Por herencia? Muy probablemente cada uno ya proviene de su propia jerarquia
independiente de herencia.
Una version del metodo para cada uno? Demasiado complicado de extender
cuando nuevos elementos participan de esto

La solucion viene por interfaces, asi:
a. Creamos una interfaz, por ejemplo: IElementoMovil
b. Hacemos que todos estos lo implementen
c. Creamos el metodo:
void MoverElemento(IElementoMovil elemento) {
// desplazarlo en termino de los miembros de la interfaz
}

Ejemplos de la vida real?. El metodo Array.Sort() ordena los elementos del
arreglo utilizando el metodo QuickSort. Pero si es un arreglo de objetos
Persona? Como los ordena?. Pues hacemos que el objeto persona implemente
IComparable y en el mismo se implementa si quieres que se ordene por
nombres, numero de identificacion, edad, etc...



2. Exposicion de clases privadas a otros proyectos.

Este caso lo uso muy frecuentemente.

a. En un proyecto CommonLib.dll se implementa la interfaz IOperador, que
implementa ciertas operaciones del entorno de la aplicacion.

b. Las clases de logica reciben en su constructor un objeto del tiempo
IOperador, con el cual se podran comunicar con el entorno.

c. Un proyecto Principal.exe (ojo, de tipo EXE) implementa un objeto
internal, el cual sera ofuscado con todos los tramites del caso, ya que
expone miembros de uso interno del proyecto. Pero a su vez esta clase
implementa IOperador, por lo que este objeto interno, podra ser pasado como
parametro a los constructores de las clases de logica.



Estos son los casos en que mas a menudo me encuentro. Seguro que muchos mas
te pueden comentar otros escenarios.

Saludos,
Pedro Luna, [MVP VB.NET]
Gye, Ecu



"Javier" escribió en el mensaje
news:
> Hola,
> a ver si alguien me puede explicar.
> Supongo que debe ser por desconocimiento, pero todavía no encuentro el
> sentido a crear una interface.
> No entiendo porque se declaran si despues los objetos que la implementan
> redefinen el funcionamiento de acuerdo a su propia implementación.
> Cual sería el beneficio concreto ? alguien me puede dar un ejemplo simple
> ?
> Que diferencia tiene con la herencia ?
> Alguien podria por favor sacarme estas dudas ? muchas gracias de ante
> mano.
> Saludos a toda la comunidad
>



Respuesta Responder a este mensaje
#4 Javier
22/07/2005 - 16:57 | Informe spam
Stoney, algun ejemplo bien bien basico ?
Lo de Pedro no es para mi. sobre todo la segunda parte.
Me gustaria una explicacion mas sencilla para que pueda empezar a aplicar
algo de esto.
Gracias !

"Stoney el frío" escribió:

Una interfaz es un contrato que deben cumplir las clases que lo implementen.

Normalmente las clases abstractas se utilizan para sustituir interfaces por
el hecho de que permiten implementaciones parciales de la clase, etc. Una
interfaz es más ligera y deja toda clase de implementación a la clase que
quiera usarla.

Que porqué se declaran si luego hay que redefinirlas? pues del mismo modo
que se hace con las clases abstractas...

Cuando se implementa una interfaz no se hereda nada de ella. Lo único que se
hace es cumplir con las reglas del contrato que ésta define.

Saludos,

"Javier" escribió en el mensaje
news:
> Hola,
> a ver si alguien me puede explicar.
> Supongo que debe ser por desconocimiento, pero todavía no encuentro el
> sentido a crear una interface.
> No entiendo porque se declaran si despues los objetos que la implementan
> redefinen el funcionamiento de acuerdo a su propia implementación.
> Cual sería el beneficio concreto ? alguien me puede dar un ejemplo simple
?
> Que diferencia tiene con la herencia ?
> Alguien podria por favor sacarme estas dudas ? muchas gracias de ante
mano.
> Saludos a toda la comunidad
>



Respuesta Responder a este mensaje
#5 Octavio Hernandez
22/07/2005 - 23:52 | Informe spam
Javier,

Mira a ver si este ejemplo te vale. Supón que tienes la interfaz:

interface IVolador
{
void Despegar();
void Aterrizar();
void Subir(int metros);
void Bajar(int metros);
void Avanzar(int metros);
}

Esta interfaz define las operaciones comunes a toda cosa que vuela. Y
podrían implementarla clases de diferente naturaleza, no relacionadas entre
sí mediante herencia, como Pajaro (que hereda de Ave, que a su vez hereda de
Animal), Avion (que hereda de VehiculoTransporte) o PlatilloVolador (que
hereda de CosaCuyaExistenciaNoEstaProbada).

Si definimos un método:

void RecorrerKilometros(IVolador objeto, int distanciaKms)
{
objeto.Despegar();
objeto.Subir(1000);
objeto.Avanzar(distanciaKms);
objeto.Bajar(1000);
objeto.Aterrizar();
}

ese método podrá aplicarse tanto a pájaros como a aviones u OVNIs, auún
cuando esos objetos no heredan de una clase común distinta de Object. En
este sentido, las interfaces ofrecen más flexibilidad que la herencia simple
de C#, VB o Java, y permiten emular (y en ciertos casos superan) a la
herencia múltiple de C++.

Slds - Octavio

"Javier" escribió en el mensaje
news:
Stoney, algun ejemplo bien bien basico ?
Lo de Pedro no es para mi. sobre todo la segunda parte.
Me gustaria una explicacion mas sencilla para que pueda empezar a aplicar
algo de esto.
Gracias !

"Stoney el frío" escribió:

Una interfaz es un contrato que deben cumplir las clases que lo
implementen.

Normalmente las clases abstractas se utilizan para sustituir interfaces
por
el hecho de que permiten implementaciones parciales de la clase, etc. Una
interfaz es más ligera y deja toda clase de implementación a la clase que
quiera usarla.

Que porqué se declaran si luego hay que redefinirlas? pues del mismo modo
que se hace con las clases abstractas...

Cuando se implementa una interfaz no se hereda nada de ella. Lo único que
se
hace es cumplir con las reglas del contrato que ésta define.

Saludos,

"Javier" escribió en el mensaje
news:
> Hola,
> a ver si alguien me puede explicar.
> Supongo que debe ser por desconocimiento, pero todavía no encuentro el
> sentido a crear una interface.
> No entiendo porque se declaran si despues los objetos que la
> implementan
> redefinen el funcionamiento de acuerdo a su propia implementación.
> Cual sería el beneficio concreto ? alguien me puede dar un ejemplo
> simple
?
> Que diferencia tiene con la herencia ?
> Alguien podria por favor sacarme estas dudas ? muchas gracias de ante
mano.
> Saludos a toda la comunidad
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida