[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