Está en la página 1de 4

Laboratorio de Programacin 1A E.T.S.I.

Informtica Gestin

Prctica 15: Mdulos en C++


Teora. Cualquier programa real est compuesto por varias partes separadas. Hasta ahora hemos utilizado los procedimientos y funciones para escribir estas partes en las que dividimos la solucin a un problema. El uso de mdulos pretende ser un paso ms en la metodologa del diseo descendente, permitiendo definir por separado las distintas partes de un programa y las interfaces entre ellas. Adems, un mdulo permite agrupar elementos que compartan alguna afinidad Escribir un programa como una coleccin de mdulos ofrece muchas ventajas: Los mdulos son una herramienta potente para crear grandes programas. Un programador puede disear un programa grande como un conjunto de mdulos, relacionados entre s mediante interfaces definidas apropiadamente. Escribir y depurar el programa es ms fcil porque el programador puede trabajar con un mdulo cada vez, usando los servicios facilitados por otros mdulos pero ignorando los detalles de cmo estos mdulos trabajan (principio de abstraccin). Este tipo de diseo modular es particularmente necesario cuando el programa se est desarrollando entre un conjunto de programadores. Ayudar a que el programa sea ms fcil de modificar. Puesto que los detalles de implementacin de un mdulo se ocultan al resto de mdulos se pueden cambiar detalles de un mdulo sin afectar al resto. Hacer los programas ms portables. El programador puede ocultar los detalles dependientes de la mquina en un mdulo, de forma que cuando se transporte a otro ordenador, slo debe preocuparse de dichos aspectos. Hacer posible la compilacin separada. El programa se divide en trozos, que el compilador puede procesar separadamente. De esta forma, un cambio en un mdulo solo requiere volver a compilar dicho mdulo, no el programa completo. Permiten desarrollar bibliotecas con cdigo reutilizable. Ello conlleva no solo un ahorro de trabajo, sino adems un aumento de la fiabilidad del programa, pues dichas bibliotecas estarn ms probadas que si la parte de la biblioteca que se usa se codificara de nuevo. Para poder trabajar con varios ficheros fuente en Dev-C++ es necesario crear previamente un proyecto. Para ello se utiliza la opcin Nuevo -> Proyecto del men Archivo. Al seleccionarla nos sale una ventana como la de la Figura 1. Para nuestros ejemplos utilizaremos la opcin Empty Project y pulsaremos Aceptar, tras haber rellenado el nombre del proyecto. Una vez elegido un nombre se nos pregunta el directorio donde se desea guardar el fichero de proyecto. Este fichero, que tiene extensin dev, es el que usa el compilador para guardar toda la informacin sobre el proyecto (ficheros fuente que lo componen, opciones de compilacin del proyecto, etc.).

Figura 1
Podemos crear nuevos ficheros fuente dentro del proyecto con la opcin Nuevo Cdigo Fuente del men Proyecto. La figura 1 muestra un proyecto que consta de tres ficheros fuentes: principal.cpp, complejo.h y complejo.cpp. Con las opciones respectivas del men Proyecto tambin se pueden agregar ficheros fuente ya existentes o eliminar del proyecto un fichero fuente.

Jos Luis Pastrana Brincones @ 2005 1

Laboratorio de Programacin 1A E.T.S.I. Informtica Gestin Una vez creado el proyecto se puede compilar con la opcin Compile del men Execute tal como lo habamos hecho hasta ahora cuando slo usbamos un fichero fuente. Una vez compilados todos los ficheros, se procede al enlazado automtico de los distintos ficheros objeto que se han generado para crear el ejecutable. Un programa consistir en un mdulo de programa (el programa principal) y cualquier nmero de mdulos de biblioteca desde los cuales el mdulo de programa importa entidades (constantes, tipos, variables y procedimientos). Estos mdulos de biblioteca a su vez pueden importar de otros mdulos de biblioteca. El compilador proporciona una coleccin bsica de mdulos de biblioteca (cstdlib, iostream, etc.) adems de los cuales, el programador tambin puede escribir sus propios mdulos de biblioteca adicionales, para usarlos en uno o en varios programas. Esto es precisamente lo que vamos a estudiar en este tema. Tendremos por tanto: Mdulos de programa: son unidades de programa completas que pueden importar recursos (constantes, variables, procedimientos..) desde mdulos de biblioteca. Son mdulos de programa aquellos con los que hemos estado practicando hasta el momento ya que contienen la funcin main(). Mdulos de Biblioteca: estn constituidos por dos partes, el mdulo de definicin y el mdulo de implementacin. Los mdulos de biblioteca se usan para exportar recursos a otros mdulos. Un mdulo de biblioteca consta de dos partes, la parte de definicin y la parte de implementacin. La parte de definicin contiene slo las definiciones de entidades o servicios que el mdulo exporta, es decir, define la interfaz del mdulo de biblioteca con el resto del programa. La parte de implementacin describe cmo implementar los servicios o entidades indicados en la parte de definicin. La primera es tambin llamada fichero de cabecera y, aunque no es obligatorio, lo normal es darle a este fichero la extensin .h (header en ingls). La segunda, la parte de implementacin, tiene extensin .cpp y tambin es llamada cuerpo del mdulo. Un espacio de nombres se utiliza para expresar una agrupacin lgica. Es decir, si algunas declaraciones pertenecen, de forma lgica, al mismo grupo, de acuerdo con algn criterio, se pueden poner en el mismo espacio de nombres. Un espacio de nombres es un mbito, por lo cual, si un nombre se declara dentro de un espacio de nombres podr ser visible dentro de ese espacio de nombres con las reglas habituales de mbitos. Sin embargo, para usar ese nombre fuera del espacio de nombres hay que utilizar el nombre del espacio de nombres seguido de la expresin :: a la cual seguir el nombre que queremos utilizar. Esto es muy til para programas grandes donde puede ser que tengamos varios subprogramas con el mismo nombre. Poner delante el nombre del espacio de nombres (lo que se denomina, cualificar el nombre) nos evitara entrar en conflictos. Para definir un espacio de nombres se utilizar la palabra namespace seguida del identificador que queramos asignarle. A continuacin encerramos entre llaves todo el espacio de nombres. Los espacios de nombres proporcionan una herramienta excelente para la programacin modular. // declara funciones para la conversin entre ngulos #ifndef _MConversionangulos_h_ // para evitar inclusin duplicada #define _MConversionangulos_h_ /* Si no esta definida la macro _conversionangulos_h_ defnela. Si ya lo estaba no hagas nada (puesto que no hay nada despus de la directiva #endif). */ namespace MConversionangulos { const double PI =3.14159; double gradosAradianes (double grad); // convierte un ngulo de grados a radianes double radianesAgrados (double rad); // convierte un ngulo de radianes a grados } #endif Cdigo Fuente 1 . MConversionAngulo.h

El fichero de cabecera especifica qu servicios proporciona el mdulo, en nuestro caso, las funciones gradosAradianes y radianesAgrados. La lneas: #ifndef _MConversionangulos_h_ #define _MConversionangulos_h_ Son directivas de compilacin, es decir, no son sentencias ejecutables sino informacin adicional que se le proporciona al compilador. En este caso, lo que se est diciendo es: Jos Luis Pastrana Brincones @ 2005 2

Laboratorio de Programacin 1A E.T.S.I. Informtica Gestin Si no esta definida la macro _MConversionangulos_h_ defnela. Si ya lo estaba no hagas nada (puesto que no hay nada despus de la directiva #endif). Esta macro suele consistir en el nombre del fichero pero empezando y acabando por _ y sustituyendo el . del nombre del fichero por otro _ . Este tipo de sentencias se suele incluir en todos los ficheros de cabecera para impedir que se produzcan errores de compilacin cuando un fichero de cabecera es importado dos veces por el mismo mdulo (esto suele ocurrir cuando un mdulo importa un fichero de cabecera que a su vez importa otro fichero de cabecera). De esta forma, la segunda vez que se incluye el fichero de cabecera el compilador se salta todas las definiciones puesto que ya est declarada la macro correspondiente. #include "MConversionangulos.h" namespace MConversionangulos { double gradosAradianes (double grad) // convierte un ngulo de grados a radianes { return (PI * grad) / 180.0; } double radianesAgrados (double rad) // convierte un ngulo de radianes a grados { return 180 * rad / PI; } } // fin del mdulo Cdigo Fuente 2 . MConversionAngulo.cpp y el programa principal quedara: /*---------------------------------------------------------------| Autor: | | Fecha: Versin: 1.0 | |-----------------------------------------------------------------| | Descripcin del Programa: | | | | ----------------------------------------------------------------*/ #include <iostream> #include <cstdlib> // E/S estndard // Librera estndard

// Zona de Importacin de Mdulos #include "MConversionangulos.h" using namespace Mconversionangulos; // Zona de Declaracin de Constantes // Zona de Declaracin de Tipos // Zona de Cabeceras de Procedimientos y Funciones // Programa Principal int main() { // Cdigo deseado en el Programa Principal return 0; }

Jos Luis Pastrana Brincones @ 2005 3

Laboratorio de Programacin 1A E.T.S.I. Informtica Gestin

Prctica. La empresa de productos crnicos Chuletas a Examen desea que le hagamos un programa para la gestin de sus productos (no sabemos el nmero mximo de productos que puede haber) y que nos presente el siguiente Men: CHULETAS A EXAMEN ================== Elaborado Por : Nombre Apellidos E.T.S.I Informatica de Gestin Curso: 1-A Fecha: 26 de Mayo de 2.005 A. B. C. D. E. F. G. H. X. Insertar Producto. Buscar Producto. Borrar Producto. Listar Productos. Leer Productos desde un Fichero de Texto. Leer Productos desde un Fichero de Binario. Guardar Productos a un Fichero de Texto. Guardar Productos a un Fichero de Binario. Salir del Programa

Seleccione una Opcin: De cada Producto se deber almacenar la siguiente informacin: nmero de referencia (natural), nombre (cadenas de caracteres), y precio (real). Descripcin de Opciones: A. Insertar Producto. Se leen desde teclado todos los datos del producto y se inserta. Si ya existiera un producto con ese cdigo, se supone que se van a actualizar los datos. B. Buscar Producto. Se busca un producto dada su referencia (leda desde teclado) y se muestra toda su informacin si existe o se informa de su no existencia. C. Borrar Producto. Se busca un producto dada su referencia (leda desde teclado) y si existe, se borra. Si no existe, no se hace nada. D. Listar Productos. Se muestran todos los productos. E. Leer Productos desde un Fichero de Texto. Se leen todos los productos haya un fichero de texto cuyo nombre se pide al usuario y se aaden a los que ya hubiera. Si el fichero no existiera, no se aade ninguno. F. Leer Productos desde un Fichero de Binario. Se leen todos los productos que haya un fichero binario cuyo nombre se pide al usuario y se aaden a los que ya hubiera. Si el fichero no existiera, no se aade ninguno. G. Guardar Productos a un Fichero de Texto. Guarda todos los productos en un fichero de texto cuyo nombre se pide al usuario. Si el fichero existiera, se borrar su contenido. H. Guardar Productos a un Fichero de Binario. Guarda todos los productos en un fichero binario cuyo nombre se pide al usuario. Si el fichero existiera, se borrar su contenido. X.- Salir del Programa. Se solicita confirmacin y en caso de se afirmativa se sale del programa, liberando TODA la memoria que haya sido previamente reservada. Consejos: Se recomienda el diseo de un proyecto conteniendo: 1 Mdulo de Cadenas MCadenas.h y MCadenas.cpp 1 Mdulo de productos MProducto.h y MProducto.cpp 1 Mdulo de Listas MListaProducto.h y MListaProducto.cpp Programa principal chuletas.cpp
Jos Luis Pastrana Brincones @ 2005 4

También podría gustarte