[C con Clase] Interfaces comunes para grupos de clases. Vale la pena?

Steven Davidson srd4121 en njit.edu
Sab Abr 9 05:20:51 CEST 2011


Hola Ferrán,

On 4/5/2011 9:54 AM, Ferran Ferri wrote:
> Hola a todos.
>
> Tengo un grupo de clases que forman parte de un sistema de Log
> (escribir entradas de texto en uno o varios archivos). El caso es que
> como entenderéis, uso estas clases en casi todas partes del código.
> Hasta ahora he incluido los archivos de cabecera individualmente
> cada vez que necesitaba incluir esta funcionalidad, pero ahora me
> pregunto si vale la pena juntar interfaces en una sola cabecera para
> una sola inclusión. Esto me genera dudas, que os listo para facilitar
> respuestas:
> Vale la pena una sola cabecera?

Opino que sí merece la pena, al menos para el usuario - el programador. 
El hecho de tener varios ficheros de cabecera lo entendería al diseñar 
tales clases y bibliotecas y posiblemente sea una ventaja a la hora de 
mantener el código fuente.

Para usar tales clases, sugiero una forma fácil de incluirlas. Eso sí, 
no significa que sólo vaya a existir un único fichero de cabecera. 
Puedes seguir manteniendo los demás ficheros, pero que sean incluidos en 
otro fichero de cabecera "abstracto"; o sea, sólo sirve para reunir a 
los demás bajo un solo fichero.

Si por lo contrario, prefieres juntar el contenido de todos los ficheros 
de cabecera, para que quede en un solo fichero, también lo puedes hacer.

> Como debería incluir las clases? Incluyendolas o haciendo un forward
> declaration?

Una declaración adelantada no incluye las clases, simplemente indica al 
compilador que esas entidades existen; o sea, decimos que el nombre de 
la clase se refiere a una clase.

Aconsejo separar la definición de las clases de las implementaciones de 
sus funciones miembro. Las definiciones de las clases van en sus 
ficheros de cabecera y las implementaciones de las funciones en los 
ficheros fuente - como se suele hacer. Ahora sólo necesitas incluir esos 
ficheros de cabecera en los otros ficheros del proyecto, donde se necesiten.

> Si hago cambios en el funcionamiento del Log, se recompilara todo el
> proyecto? (me refiero a trabajo del compilador, ya se que tengo que
> linkar otra vez todo)
> De que manera deberia incluirlo para que si hago cambios en una
> clase, no me tenga que recompilar todo el codigo del log?
>

Depende de los cambios. Si cambias la definición de la clase - los 
miembros - entonces sí tendrás que recompilar esos ficheros fuente que 
usen esa clase. Si sólo vas a cambiar las implementaciones de las 
funciones miembro, entonces sólo tienes que recompilar esos ficheros 
fuente de las funciones miembro. El resto del proyecto no tiene nada que 
ver con las implementaciones de las funciones, sino con la forma de 
usarlas; es decir, con las invocaciones. Si las invocaciones cambiasen, 
entonces los ficheros fuente en las que se encuentren deben ser 
recompiladas.


Espero que te haya orientado.

Steven





Más información sobre la lista de distribución Cconclase