Interfaces en Vb.Net y Vb2005

17/10/2006 - 12:16 por Master.Mind | Informe spam
Hola a todos , no llevo mucho tiempo en esto de la programacion , y me
gustaria resolver una duda que tengo practicamente desde el primer dia
No me aclaro con las interfaces , no se realmente para que sirven ,

por ejemplo, tengo esta interfaz simple con 2 metodos :

Public Interface Ejemplo
Sub Rutina1 (ByVal str As String)
Sub Rutina2 (ByVal num As integer)
End Interface


y la uso por ejemplo en esta clase :

Public Class Form1 Implements Ejemplo

Public Sub Metodo (ByVal str As String) Implements Ejemplo.Rutina1

End Sub

End Class


pues bien , ahi va la pregunta , yo siempre he entendido esto como que
al implementar la interfaz estamos obligandonos a usar sus metodos o
algo asi.

Por eso no entiendo su utilidad , asi que si alguien me lo supiera
explicar mejor se lo agradeceria.Un saludo

Master.Mind

Preguntas similare

Leer las respuestas

#1 floyd303
17/10/2006 - 13:53 | Informe spam
Hola!

La utilidad de los interfaces se entiende mejor cuando se conoce el
concepto del polimorfismo en programacion orientada a objetos.
Cuando uno o mas objetos cunplen un interfaz, no importa de que tipo
sean, sabes que se comportan de la manera definida por el contrato que
supone el interfaz.
A ver si con un ejemplo lo entiendes mejor:

Definimos un interfaz del comportamiento de un tipo monetario:

Public Interface IMoneda
Property ReadOnly Nombre as String
Property ReadOnly TipoCambio as Double ' Con respecto al euro, por
ejemplo
End Interface

Luego definimos una serie de clases (una para cada moneda que queramos
contemplar) que cumplen el Interface:

Public Class Peseta Implements IMoneda
Public ReadOnly Property Nombre as String
Get
Return "Peseta"
End Get
End Public

Public ReadOnly Property TipoCambio as Double
Get
Return 166,387
End Get
End Public
End Class

Public Class Euro Implements IMoneda
Public ReadOnly Property Nombre as String
Get
Return "Euro"
End Get
End Public

Public ReadOnly Property TipoCambio as Double
Get
Return 1
End Get
End Public
End Class

Public Class Dolar Implements IMoneda
Public ReadOnly Property Nombre as String
Get
Return "Dolar"
End Get
End Public

Public ReadOnly Property TipoCambio as Double
Get
Return 0,88 ' Por poner algo... ahora mismo no lo se
End Get
End Public
End Class

Gracias al interface y al polimorfismo... podemos crear una funcion de
cambio que nos sirva para estos tres tipos de moneda y cualquiera que
se nos ocurra en un futuro:

Public Function Cambio (IMoneda monedaOrigen, IMoneda monedaDestino,
Cantidad as Double) as Double
Return (Cantidad *
monedaOrigen.TipoCambio)/monedaDestino.TipoCambio
End Function

Por ejemplo:

Dim objMonedaPeseta as IMoneda = new Peseta();
Dim objMonedaEuro as IMoneda = new Euro();
Dim objMonedaDolar as IMoneda = new Euro();

Dim r1 as Double = Cambio (objMonedaPeseta, objMonedaEuro, 10) '
Convertimos 10 pesetas a euros
Dim r2 as Double = Cambio (objMonedaDolar, objMonedaEuro, 10) '
Convertimos 10 dolares a euros
Dim r3 as Double = Cambio (objMonedaPeseta, objMonedaDolar, 10) '
Convertimos 10 dolares a euros

Cuanto nos costaria añadir nuevos tipos monetarios a nuestro programa?
Pos muy poco: bastaria con añadir una nueva clase que implemente el
interfaz IMoneda y, lo mejor de todo: La funcion Cambio sequiria seindo
valida.

Vale, el ejemplo puede ser un poco chorra... y me he podido equivocar
en la sintaxis (normalmente no programo en VB.NET) o en los calculos
realizados... pero espero haber transmitido bien la idea.
Y este es solo un ejemplo de utilizacion del Interface ya que su
utilizacion, es la piedra angular del desarrollo orientado a objetos.

Un saludo
Roberto M. Oliva


Master.Mind ha escrito:

Hola a todos , no llevo mucho tiempo en esto de la programacion , y me
gustaria resolver una duda que tengo practicamente desde el primer dia
No me aclaro con las interfaces , no se realmente para que sirven ,

por ejemplo, tengo esta interfaz simple con 2 metodos :

Public Interface Ejemplo
Sub Rutina1 (ByVal str As String)
Sub Rutina2 (ByVal num As integer)
End Interface


y la uso por ejemplo en esta clase :

Public Class Form1 Implements Ejemplo

Public Sub Metodo (ByVal str As String) Implements Ejemplo.Rutina1

End Sub

End Class


pues bien , ahi va la pregunta , yo siempre he entendido esto como que
al implementar la interfaz estamos obligandonos a usar sus metodos o
algo asi.

Por eso no entiendo su utilidad , asi que si alguien me lo supiera
explicar mejor se lo agradeceria.Un saludo

Master.Mind
Respuesta Responder a este mensaje
#2 RAlvare
17/10/2006 - 23:20 | Informe spam
escribió en el mensaje
news:


La utilidad de los interfaces se entiende mejor cuando se conoce el
concepto del polimorfismo en programacion orientada a objetos.
Cuando uno o mas objetos cunplen un interfaz, no importa de que tipo
sean, sabes que se comportan de la manera definida por el contrato que
supone el interfaz.
A ver si con un ejemplo lo entiendes mejor:

Fenomenal el ejemplo y su explicación.
Enhorabuena floyd303 y GRACIAS en mayusculas.
Porque es de agradecer que los que sabeis tanto lo querais compartir con el
resto del
mundo.
-

Un eterno aprendiz.
Respuesta Responder a este mensaje
#3 Carlos Gómez
17/10/2006 - 23:29 | Informe spam
Solo añadir al buen ejemplo de master.mind, algo que leí una vez en
un libro y que es muy descriptivo:

Una interfaz es algo así como un contrato que tiene que cumplir una
clase que implemente dicha interfaz.

Por tanto, cuando usamos la herencia de clases (no de interfaz) nos
ahorramos escribir código, pero cuando usamos herencia de interfaz,
sabemos que la clase debe cumplir el 'contrato' al que está subscrita,
y esa ventaja nos permite un código más legible.

Otro uso posible de la interfaz es el siguiente:

Interface ITonteria
Function Contiene(byval texto as string) as boolean
End Interface

Public Class CajaTexto
Inherits TextBox
Implements ITonteria

Public Sub Contiene(byval texto as string) as boolean _
Implements ITonteria.MostrarPropiedadText
Return (Me.Text.Contains("texto)
End Sub
End Class

Public Class CajaDesplegable
Inherits ComboBox
Implements ITonteria

Public Sub Contiene(byval texto as string) as boolean _
Implements ITonteria.MostrarPropiedadText
Dim i as Integer=0
contiene=false
While i<=Me.Items.Count And Not Contiene
Contiene=Me.Items(i).ToString.Contains(texto)
i += 1
End While
End Sub
End Class

Ahora, si en un formulario colocas ademas de los controles que deseas
unos cuantos 'cajatextos' y otros cuantos 'CajaDesplegables', puedes
hacer esto al recorrer un formulario:

dim ctrl as Control
For Each Control In Me.Controls '(Me es el formulario)
If TypeOf(ctrl) Is ITonteria Then
Dim p As ITonteria=DirectCast(ctrl,ITonteria)
msgbox (ctrl.name & ": " & p.Contiene("TextoQueBusca")
End If
End For

Es decir, podemos recorrer el formulario buscando los objetos que
tienen una cierta interfaz para así poder usar dicha interfaz. Cada
objeto hace las operaciones necesarias para devolver el resultado
esperado, y en general esas operaciones serán diferentes de un objeto
a otro, pero ¡fijate la simpleza del codigo al usar la interfaz!
Respuesta Responder a este mensaje
#4 Roberto M. Oliva
18/10/2006 - 11:38 | Informe spam
Hola!

De nada! De verdad que es un placer ayudaros en lo que pueda y yo
tambien me defino un eterno aprendiz.
Solo apuntar 2 cosas:
- En C++ no existe el concepto de interface como tal a pesar de ser un
lenguaje orientado a objetos. En este caso el interface es en realidad
una clase abstracta pura, que es aquella en la que todos sus metodos y
propiedades deben ser implementados en la herencia.
- Cuando programeis y veais que estais utilizando un "select case" con
muchas posibilidades, plantearos utilizar un interface. Con mi ejemplo
anterior, una funcion que devuelva el tipo de cambio segun el tipo de
moneda:

Con la programacion "tradicional" esto es muy comun:

Select strNombreMoneda
Case "Peseta"
Return 166,387
Case "Euro"
Return 1
Case "Dolar"
Return 0,88
End Select

Implementando un interface, se hace una coleccion con los tipos de
monedas:

Dim objLista as new Lista<IMoneda> ()
objLista.Add(new Peseta())
objLista.Add(new Euro())
objLista.Add(new Dolar())

Y para devolver el tipo, bsataria lo siguiente (seria el equivalente al
Select Case anterior)

For Each objMoneda in objLista
if objMoneda.Nombre = strNombre Then
Return objMoneda.TipoCambio
End if
Next

La coleccion la guardais estatica de tal manera que se puede consultar
desde diferentes puntos del programa, si añadis una nueva moneda, solo
teneis que añadirla a la coleccion tambien. Y la funcion de obtencion
del tipo de cambio os sigue valiendo.

Imaginad que utilizais un Select Case, no solo para esto, sino para
muchas otras cosas... Cuando añadais una nueva moneda... os vais a
acordar de añadir el Case correspondiente en todos los lugares donde
sea necesario?
Si implementais un interfaz... basta con añadir el elemento a la
coleccion para que todas las funciones necesarias tengan en cuenta la
nueva moneda...

Bueno, espero haberme explicado. Creo que estas cosas son las que hacen
a la programacion orientada a objetos apasionante (no se si se me nota
;) )

Un saludo
Roberto M. Oliva





RAlvare ha escrito:

escribió en el mensaje
news:


La utilidad de los interfaces se entiende mejor cuando se conoce el
concepto del polimorfismo en programacion orientada a objetos.
Cuando uno o mas objetos cunplen un interfaz, no importa de que tipo
sean, sabes que se comportan de la manera definida por el contrato que
supone el interfaz.
A ver si con un ejemplo lo entiendes mejor:

Fenomenal el ejemplo y su explicación.
Enhorabuena floyd303 y GRACIAS en mayusculas.
Porque es de agradecer que los que sabeis tanto lo querais compartir con el
resto del
mundo.
-

Un eterno aprendiz.
Respuesta Responder a este mensaje
#5 Master.Mind
18/10/2006 - 18:08 | Informe spam
On 17 Oct 2006 04:53:25 -0700, ""
wrote:


Hola!

La utilidad de los interfaces se entiende mejor cuando se conoce el
concepto del polimorfismo en programacion orientada a objetos.
Cuando uno o mas objetos cunplen un interfaz, no importa de que tipo
sean, sabes que se comportan de la manera definida por el contrato que
supone el interfaz.
A ver si con un ejemplo lo entiendes mejor:

Definimos un interfaz del comportamiento de un tipo monetario:

Public Interface IMoneda
Property ReadOnly Nombre as String
Property ReadOnly TipoCambio as Double ' Con respecto al euro, por
ejemplo
End Interface

Luego definimos una serie de clases (una para cada moneda que queramos
contemplar) que cumplen el Interface:

Public Class Peseta Implements IMoneda
Public ReadOnly Property Nombre as String
Get
Return "Peseta"
End Get
End Public

Public ReadOnly Property TipoCambio as Double
Get
Return 166,387
End Get
End Public
End Class

Public Class Euro Implements IMoneda
Public ReadOnly Property Nombre as String
Get
Return "Euro"
End Get
End Public

Public ReadOnly Property TipoCambio as Double
Get
Return 1
End Get
End Public
End Class

Public Class Dolar Implements IMoneda
Public ReadOnly Property Nombre as String
Get
Return "Dolar"
End Get
End Public

Public ReadOnly Property TipoCambio as Double
Get
Return 0,88 ' Por poner algo... ahora mismo no lo se
End Get
End Public
End Class

Gracias al interface y al polimorfismo... podemos crear una funcion de
cambio que nos sirva para estos tres tipos de moneda y cualquiera que
se nos ocurra en un futuro:

Public Function Cambio (IMoneda monedaOrigen, IMoneda monedaDestino,
Cantidad as Double) as Double
Return (Cantidad *
monedaOrigen.TipoCambio)/monedaDestino.TipoCambio
End Function

Por ejemplo:

Dim objMonedaPeseta as IMoneda = new Peseta();
Dim objMonedaEuro as IMoneda = new Euro();
Dim objMonedaDolar as IMoneda = new Euro();

Dim r1 as Double = Cambio (objMonedaPeseta, objMonedaEuro, 10) '
Convertimos 10 pesetas a euros
Dim r2 as Double = Cambio (objMonedaDolar, objMonedaEuro, 10) '
Convertimos 10 dolares a euros
Dim r3 as Double = Cambio (objMonedaPeseta, objMonedaDolar, 10) '
Convertimos 10 dolares a euros

Cuanto nos costaria añadir nuevos tipos monetarios a nuestro programa?
Pos muy poco: bastaria con añadir una nueva clase que implemente el
interfaz IMoneda y, lo mejor de todo: La funcion Cambio sequiria seindo
valida.

Vale, el ejemplo puede ser un poco chorra... y me he podido equivocar
en la sintaxis (normalmente no programo en VB.NET) o en los calculos
realizados... pero espero haber transmitido bien la idea.
Y este es solo un ejemplo de utilizacion del Interface ya que su
utilizacion, es la piedra angular del desarrollo orientado a objetos.

Un saludo
Roberto M. Oliva




Muchas gracias Roberto , por ahi he podido tirar y me ha servido mucho
el ejemplo que has puesto , en principio pensaba que las interfaces no
tenian mucha utilidad , pero la tienen y mucho.

La pega claro es que si implementas una interfaz tienes que usar
metodos , propiedades , todo lo que contenga esa interfaz por lo que
hay que pensar muy bien lo que vamos a necesitar y no a la hora de
diseñar las interfaces.

Por cierto yo creo que las interfaces son verdaderamente utiles cuando
hay que implementar varias , ya que por lo que veo no hay herencia
multiple en .net , no?

Saludos.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida