Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Interface c++ (clases abstractas)

Estas en el tema de Interface c++ (clases abstractas) en el foro de C/C++ en Foros del Web. Hola amigos, Estoy aprendiendo un poco este nuevo tema de las interfaces o clases abstractas en c++, la teoría no me es muy clara, y ...
  #1 (permalink)  
Antiguo 01/03/2016, 12:37
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
Interface c++ (clases abstractas)

Hola amigos,

Estoy aprendiendo un poco este nuevo tema de las interfaces o clases abstractas en c++, la teoría no me es muy clara, y por eso me gustaría que las personas que tengan experiencia con ésto me aclaren el uso o las aplicaciones de las interfaces. Para qué sirven, en que se diferencian de un clase normal (los ejemplos que he leído realmente tienen lo mismo que puede tener cualquier clase).

Agradezco mucho su tiempo.

Saludos,
  #2 (permalink)  
Antiguo 02/03/2016, 05:11
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Interface c++ (clases abstractas)

Una interfaz especifica qué puntos de entrada ha de tener un sistema determinado. Una interfaz es independiente del código que haya por debajo, de tal forma que se puede cambiar toda la implementación que hay por debajo y sin embargo los clientes podrán seguir conectados.

Una interfaz es una especie de contrato, de tal forma que tanto el módulo que implementa la interfaz como el módulo que la usa pueden saber de antemano qué funcionalidad está disponible.

En C++ no existe el concepto de interfaz como tal. Lo más parecido es una clase virtual pura:

Código C++:
Ver original
  1. struct Interfaz
  2. {
  3.   // Destructor virtual para evitar problemas en la herencia
  4.   virtual ~Interfaz();
  5.  
  6.   virtual void Func1() = 0;
  7.  
  8.   virtual int Func2(int) = 0;
  9. };

Ya que en C++ no existe el concepto de interfaz hay que intentar ser muy cuidadoso a la hora de diseñar las interfaces. Una interfaz no ha de tener código. Si a una interfaz le añades código deja de ser una interfaz.

Como ves una interfaz no se diferencia demasiado de una clase cualquiera. Lo único que identifica en C++ una interfaz como tal es que todos sus miembros son abstractos.

¿Por qué usar interfaces? La utilidad de las interfaces es que no exponen la implementación... no hay código de por medio. Esta tontería permite desacoplar el código y reducir las dependencias.

Los servicios Web, por ejemplo, suelen exponer su funcionalidad pública mediante interfaces. Esto permite que cualquiera pueda diseñar un cliente que sea capaz de consumir información mediante dicha interfaz... si la implementación del servicio web cambia, al no verse modificada su interfaz, los clientes no notarán diferencia salvo quizás en los tiempos de respuesta o en la estabilidad.

Otro elemento software susceptible de ser diseñado mediante interfaces son los plugins de las aplicaciones. Al obligar a que un plugin implemente una interfaz determinada permites que la aplicación pueda saber desde el principio cómo va a poder manejar los plugin independientemente de su naturaleza.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 02/03/2016, 11:44
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Interface c++ (clases abstractas)

Como siempre, excelente respuesta de eferion.

Sólo quisiera agregar algo importante.

Si estas intentanto entender las interfaces viendo código, no le vas a encontrar mucho sentido al principio. Te recomiendo que ivestigues un poco sobre la teoría de la programación orientada a objetos.
Como que al principio creemos que las clases son un conjunto de variables y métodos. En código así se ven. Pero en la teoría está el concepto de encapsulación. Encapsular objetos que tienen estado y una interfaz pública.

Existen otros tipos de conceptos derivados de la herencia entre clases. Cosas como agregación, composición y herencia. Herencia por generalización, herencia por especialización, etc. En código, todas se ven iguales, pero para sacarles provecho hay que saber cual es el transfondo.

En el caso de las clases abstractas, también llamadas interfaces, igual es mas un concepto que algo visible en el código. Como dice eferion, es una especie de contrato entre el diseñador de la clase y el que la implementa. Esto tiene un sin número de ventajas y aplicaciones. Pero para poder ver esas ventajas, es necesario conocer la teoría.

Muy personalmente, el libro de Timothy Budd sobre programación orientada a objetos, es lo mejor que he leido acerca del tema.

Una vez que tengas mas claros los conceptos, hay otro nivel. Los patrones de diseño. Usan toda la teoria de la POO y exprimen sus beneficios al máximo.

En fin, es todo un tema, no es sencillo, pero es muy interesante.

Saludos
  #4 (permalink)  
Antiguo 19/03/2016, 23:47
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
Respuesta: Interface c++ (clases abstractas)

Hola amigos, lamento la ausencia pero tuve que atender a un viaje. Muchas gracias a eferion y a Instru, veo que el tema es más complejo de lo que parece, y suena muy interesante, intentaré bajar el libro para echarle un ojo. pensé que al encontrar ejemplos sería más fácil de entender este concepto, pero veo que no es así.

Muchas gracias,

Etiquetas: c++, clases
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:45.