Interfases ?? para que??

06/02/2008 - 04:49 por AAAAA | Informe spam
Hola amigos, tengo algunas dudas con respecto a las interfases

Quisera saber para que me sirven y en que escenario serian utiles
verdaderamente

disculpen la ignorancia pero:

1. Para implementar destruccion explicita de recursos se usa el metodo
Dispose, las clases que quieren tener esta caracteristica tienen que
implementar la interfase IDisposable, por que?, se supone que que en la
interfase no hay codigo, solo declaraciones; el metodo Dispose de la
Interfase IDisposable no tiene codigo, yo lo tengo que implementar, yo tengo
que ponerle codigo a ese metodo, ya que esta sin codigo de que me sirve?,
por que no puedo mejor poner ese codigo en un metodo propio de mi clase y
llamarlo al final, cuando se destruya la clase?, por faovr disculpen si no
veo mas alla de lo evidente.

otro, por ejemplo algo parecido, la interfase IComparable, que permite
implementar el metodo CompareTo un metodo que esta declarado en la Interfase
ICoparable y que tampoco tienen codigo, es un metodo que debe devolver un
entero, bien, si yo tengo que ponerle el codigo, por que mejor no hago un
metodo que tenga ese codigo y lo llamo para hacer la comparacion, es decir
para que uso interfaces?

Por favor denme una buena explicacion ya que no logro captar la utilidad de
las interfases


Gracias

Saludos

Cesar
 

Leer las respuestas

#1 Jose A. Fernandez
24/02/2008 - 00:25 | Informe spam
Hola AAAA
Esta pregunta la hiciste "cross-posting" en varios grupos de noticias
Esta es la respuesta desde
"microsoft.public.es.dotnet.aspnet" (vista desde la interface de
google grupos)
http://groups.google.com.ar/group/m...029ac3a09/

La copio aqui por si alguien busca en este grupo ;)

POST ANTERIOR
Hola
Muy buena pregunta!
La idea la tienes que sacar previamente conociendo el concepto de
herencia de clases, es decir una clase base (como template) de las
cuales tengo subclases que heredan su comportamiento/atributos.
O sea con la herencia "arrastramoas" hacia toda la jerarquia, en
cambio con la interface "coleccion lógicas de métodos que solamente
contienen la definición de los mismos (metodos/propiedades)" no puede
conectar nada de codigo (mira el primer enlace)


Pero cuando utilizar una u otra? y los conceptos de POO (Prog.
Orientada a Objetos) como la abstracion te pueden ayudar. Cada objeto
que armas en tu arquitectura debe tener un objetivo bien definido y en
base a eso podemos con la generalización/ (encontrar clases base de
donde heredar comportamiento comun) y la especialización (crear
sublases que heredan de la principal) tener el concepto de herencia
para representarlo, en cambio con la interfaz estamos agregando una
funcionalidad o mejor dicho la "definicion" (parece una semi-herencia,
pero no lo es) ya que no podemos implementarla a esta funcionalidad
solo "marcamos" la firma (nombre, parametros, devolucion)
Estos conecptos de Herencia/INterfaz sirve para la reutilizacion de
codigo, pero como ubicar este codigo reutilizado es el "tip & trick"
Llega un momentos que si nos "engolosinamos" (sobreutilizamos) la
herencia tenemos una "explosion de clases" es decir una jerarquia
asombrasamente inmanejable, pero por sobre todo que nada tiene que ver
con la realidad (con nuestro universo) por ejemplo heredamos de un
tipo de datos porque neceistmos dicha funcionlidad, aqui entra en
juego las interfaces

Te copio textualmente (de los enlaces mas abajo) que te pueden aclarar
(...)
La herencia es una buena opción cuando:
- La jerarquía de herencia representa una relación de identidad
("Un-tipo-de") y no una relación de pertenencia.
- Se puede volver a utilizar código de las clases base.
- Es necesario aplicar la misma clase y los mismos métodos a tipos
de datos diferentes.
- La jerarquía de clases es poco profunda y es poco probable que
otros programadores agreguen muchos más niveles.
- Desea realizar cambios globales en clases derivadas modificando
una clase base.

Existen otras razones por las que se podría desear utilizar interfaces
en lugar de la herencia de clases:
- Las interfaces admiten mejor las situaciones en las cuales las
aplicaciones necesitan el mayor número de tipos de objetos no
relacionados posible para proporcionar determinadas funciones.
- Las interfaces son más flexibles que las clases de base, porque
puede definir una única implementación que puede implementar
interfaces múltiples.
- Las interfaces son mejores en situaciones en las que no es
necesario heredar una implementación de una clase de base.
- Las interfaces son útiles cuando no se puede usar la herencia de
clases. Por ejemplo, las estructuras no pueden heredarse de las
clases, pero pueden implementar interfaces.
(...)


Enlaces:
- Clase Base vs Interfaz
http://geeks.ms/blogs/lruiz/archive...erfaz.aspx
- Cuándo se deben utilizar interfaces
http://msdn2.microsoft.com/es-es/li...b8ezk.aspx
- Cuándo utilizar la herencia
http://msdn2.microsoft.com/es-es/li...b6csx.aspx

- POO: Programación Orientada a Objetos
http://es.wikipedia.org/wiki/Progra..._a_objetos


Espero que te sirva de ayuda o guia
______________________
Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja






On 6 feb, 01:49, "AAAAA" wrote:
Hola amigos, tengo algunas dudas con respecto a las interfases

Quisera saber para que me sirven y en que escenario serian utiles
verdaderamente

disculpen la ignorancia pero:

1. Para implementar destruccion explicita de recursos se usa el metodo
Dispose, las clases que quieren tener esta caracteristica tienen que
implementar la interfase IDisposable, por que?, se supone que que en la
interfase no hay codigo, solo declaraciones; el metodo Dispose de la
Interfase IDisposable no tiene codigo, yo lo tengo que implementar, yo tengo
que ponerle codigo a ese metodo, ya que esta sin codigo de que me sirve?,
por que no puedo mejor poner ese codigo en un metodo propio de mi clase y
llamarlo al final, cuando se destruya la clase?, por faovr disculpen si no
veo mas alla de lo evidente.

otro, por ejemplo algo parecido, la interfase IComparable, que permite
implementar el metodo CompareTo un metodo que esta declarado en la Interfase
ICoparable y que tampoco tienen codigo, es un metodo que debe devolver un
entero, bien, si yo tengo que ponerle el codigo, por que mejor no hago un
metodo que tenga ese codigo y lo llamo para hacer la comparacion, es decir
para que uso interfaces?

Por favor denme una buena explicacion ya que no logro captar la utilidad de
las interfases

Gracias

Saludos

Cesar

Preguntas similares