6.¿Por qué es tan importante descomponer un fichero
en módulos?
La
separación de la definición y la implementación
es un paso importante hacia la ingeniería de software.
El fichero que contiene la definición es todo lo que el
usuario necesita para utilizar la clase en un programa. No necesita
conocer la implementación real de las funciones.
A continuación te mostramos un ejemplo en el que se ha
aplicado la descomposición de ficheros: Caja.h, que contiene
la definición de la clase, Caja.cxx, que contiene la implementación
de los métodos declarados en la clase Caja, y main.cxx,
la función principal.
Caja.h
class Caja {
double longitud, anchura, altura;
public:
Caja (double dim1, double dim2, double dim3);
Caja (void);
void set (double nuevaLongitud, double nuevaAnchura, double nuevaAltura);
void print (void);
double getLongitud (void);
double volumen (void) {return longitud * anchura * altura};
~Caja (void);
};
En Caja.h hemos incluido sólo la definición de la
clase. No se dan detalles sobre las diversas funciones, excepto
para volumen. Es decir, tenemos la definición completa
de cómo utilizar una clase sin detalles de implementación.
Este fichero no puede ser compilado ni ejecutado.
Caja.cxx
# include "Caja.h" Caja :: Caja (double dim1, double
dim2, double dim3)
{
longitud = dim1;
anchura = dim2;
altura = dim3;
};
Caja :: Caja (void)
{
longitud = 8;
anchura = 8;
altura = 8;
};
void Caja :: set (double nuevaLongitud,nuevaLongitud, double nuevaAnchura,
double nuevaAltura)
{
longitud = nuevaLongitud;
anchura = nuevaAnchura;
altura = nuevaAltura;
}
void Caja :: print (void)
{
cout << "longitud = " << longitud <<'\n';
cout << "anchura = " << anchura <<'\n';
cout << "altura = " << altura <<'\n';
};
double Caja:: getLongitud (void) {
return longitud;
};
Caja::~Caja (void) { longitud = 0; anchura = 0; altura = 0; }
Vemos que:
Se
incluye el fichero cabecera Caja.h, que contiene los prototipos
de las funciones.
Caja.cxx contiene la implementación de las funciones declaradas
en la clase Caja.
Este fichero puede ser compilado, pero no ejecutado, porque no
tiene función main. Cuando sea compilado, el código
objeto será almacenado, y estará disponible para
usarlo por otros programas.
main.cxx
#include <iostream.h>
#include "Caja.h"
main ()
{
Caja pequeña(5, 4, 10), mediana (10, 6, 20), grande(20,
10, 30);
cout << "El volumen de la caja grande es " <<
grande.volumen() << '\n';
}
.