Académique Documents
Professionnel Documents
Culture Documents
Bibliotecas en ANSI C
por Prof. Ing. Jos Mara Sola
1.0.0.20030808 2.1.20120328
Objetivos
Presentar los pasos necesarios para la creacin de una biblioteca con ANSI C.
Presentar los pasos para compilar (y linkeditar) con BCC32 programas fuente que
utilizan bibliotecas a parte de la Standarad.
Objetivo secundario
Introduccin
En este artculo se introduce el concepto de biblioteca y dos casos de estudio que presentan
aplicaciones prcticas del concepto. El diseo de la solucin para cada caso de estudio se modela con
UML.
El proceso para la creacin de una biblioteca es genrico y puede ser reproducido en diferentes
entornos de desarrollo ANSI C, teniendo en cuentas las caractersticas de cada uno. En este artculo se
ejemplificar mediante el compilador de lnea de comando C++ Compiler 5.5 with Command Line
Tools1, tambin conocido como BCC32.
http://www.borland.com/ y ftp://ftpd.borland.com/download/bcppbuilder/freecommandLinetools.exe
Pgina 1 de 18
Bibliotecas en ANSI C
Contenidos
OBJETIVOS.................................................................................................................................................................................. 1
Objetivo secundario................................................................................................................................................................................ 1
INTRODUCCIN ........................................................................................................................................................................... 1
CONTENIDOS .............................................................................................................................................................................. 2
1. CONCEPTOS ...........................................................................................................................................................................3
1.1. BIBLIOTECAS ....................................................................................................................................................................... 3
1.2. ARCHIVOS HEADER ............................................................................................................................................................. 3
1.3. FUNCIONES PBLICAS.......................................................................................................................................................... 3
1.4. FUNCIONES PRIVADAS (STATIC) .......................................................................................................................................... 3
1.5. DIRECTIVAS AL PREPROCESADOR ........................................................................................................................................ 4
1.6. MODELOS UML ................................................................................................................................................................... 4
2. CASO DE ESTUDIO 1 TIEMPO .........................................................................................................................................5
2.1. DIAGRAMA DE CASOS DE USO ............................................................................................................................................. 5
Aplicacin .............................................................................................................................................................................................. 5
Biblioteca ............................................................................................................................................................................................... 5
Pgina 2 de 18
Bibliotecas en ANSI C
1. Conceptos
1.1. Bibliotecas
Una biblioteca es una coleccin de herramientas para el programador. En una biblioteca se
encuentran subprogramas (funciones para ANSI C), tipos de datos, constantes, enumeraciones y otros
identificadores. Las bibliotecas permiten la modularizacin, el desacoplamiento y la centralizacin de
funcionalidad comn.
Una biblioteca tiene una parte privada, la implementacin, y otra pblica, la interfaz. La
biblioteca encapsula la implementacin, y la interfaz debe estar diseada para que oculte
informacin sobre el diseo de la implementacin.
ANSI C provee una biblioteca Standard, y varios archivos header que hacen de interfaz. Cada
archivo header representa una agrupacin funcional (e.g. string.h para el manejo de cadenas y stdio.h
para la entrada y salida).
Las bibliotecas se utilizan tambin para el desarrollo de Tipos de Datos Abstractos (TADs).
Una biblioteca puede contener la implementacin de un TAD y venir acompaada por su interfaz; o
bien una misma biblioteca puede contener varios TADs y estar acompaada por diferentes interfaces,
una por cada TAD.
Las bibliotecas son utilizadas por programa u otras bibliotecas.a
Pgina 3 de 18
Bibliotecas en ANSI C
La siguiente estructura sintctica evita que el contenido de un archivo header sea procesado ms
de una vez.
#ifndef <identificador>
#define <identificador>
Lneas de cdigo fuente del archivo header.
#endif
Pgina 4 de 18
Bibliotecas en ANSI C
reloj
Mostrar hora y
fecha actuales
Usuario
Biblioteca
Cualquiera Unidad de Traduccin puede utilizar la biblioteca para obtener el tiempo como una
cadena de caracteres.
<<library>>
tiempo
GetTimeAsString
TransaltionUnit
Pgina 5 de 18
Bibliotecas en ANSI C
2.2. Diseo
El domino del problema abarca tres entidades. Dos bibliotecas, la Standard y tiempo, y un
programa, reloj que usa ambas bibliotecas. La biblioteca Standard es tambin utilizada por la
biblioteca tiempo.
Reloj
utility
Tiempo
+main() : int
uses
utility
Standard
+time(in timer : time_t*) : time_t
+ctime(in time : const time_t*) : char*
+printf(in format : const char*, in ...) : int
+strcpy(out t : char*, in s : constchar*) : char*
utility
: Tiempo
utility
: Standard
main()
GetTimeAsString()
time()
ctime()
strcpy()
printf()
Pgina 6 de 18
Bibliotecas en ANSI C
header
tiempo.h
includes
includes
header
stdio.h
source code
tiempo.c
includes
includes
header
time.h
trace
trace
header
string.h
library
tiempo
executable
reloj
library
standard
library
tiempo
includes includes
includes
header
tiempo.h
header
time.h
header
string.h
Pgina 7 de 18
Bibliotecas en ANSI C
executable
reloj
source code
rejol.c
includes includes
header
tiempo.h
header
stdio.h
library
tiempo
library
standard
2.4. Construccin
2.4.1. Archivos Fuentes
Pgina 8 de 18
Bibliotecas en ANSI C
2.4.3. Procesos
Crear objeto para la biblioteca
Crear biblioteca
Pgina 9 de 18
Bibliotecas en ANSI C
Generar programa
Ejecucin
> reloj.exe
Pgina 10 de 18
Bibliotecas en ANSI C
Usuario
<<library>>
Saludar
Saludar a alguien
TransaltionUnit
<<library>>
SaludarMuchasVeces
Saludar a alguien
varias veces
TransaltionUnit
Pgina 11 de 18
Bibliotecas en ANSI C
3.2. Diseo
3.2.1. Diagrama de Clases
utility
SaludarMuchasVeces
uses
uses
utility
Saludar
uses
Aplicacion
-SaludarEnCastellano()
+Saludar(in unNombre : const char*)
+main() : int
uses
utility
Standard
+EXIT_SUCCESS : int
uses
Pgina 12 de 18
Bibliotecas en ANSI C
utility
: SaludarMuchasVeces
: Aplicacion
utility
: Saludar
utility
: Standard
main()
Saludar("Mundo")
SaludarEnCastellano
puts("Hola")
puts("")
SaludarMuchasVeces("Mundo", 4)
Itera lo indicado
por el parmetero
cuantasVeces
Saludar(unNombre)
puts("")
Pgina 13 de 18
Bibliotecas en ANSI C
source code
SaludarMuchasVeces.c
invokes
invokes
source code
Aplicacion.c
source code
Saludar.c
invokes
invokes
library
Standard Library
header
stdio.h
includes
includes
header
Saludar.h
includes
includes
source code
Aplicacion.c
source code
Saludar.c
includes
includes
source code
SaludarMuchasVeces.c
header
SaludarMuchasVeces.h
includes
header
stdlib.h
trace
trace
trace
library
SaludarMuchasVeces
executable
Aplicacion
library
Saludar
library
Standard Library
Pgina 14 de 18
Bibliotecas en ANSI C
includes
source code
Saludar.c
includes
Compilador
Adminstrador
de Bibliotecas
header
stdio.h
object file
Saludar.obj
includes
header
Saludar.h
source code
SaludarMuchasVeces.c
Compilador
includes
Adminstrador
de Bibliotecas
header
SaludarMuchasVeces.h
object file
SaludarMuchasVeces.obj
Generacin de la Aplicacin
executable
Aplicacion
header
stdio.h
header
stdlib.h
includes
includes
includes
header
Saludar.h
header
SaludarMuchasVeces.h
source code
Aplicacion.c
Compilador
Enlazador
includes
object file
Aplicacion.obj
library
Standard Library
library
Saludar
library
SaludarMuchasVeces
Pgina 15 de 18
Bibliotecas en ANSI C
3.4. Construccin
3.4.1. Archivos Fuentes
Biblioteca Saludar
Saludar.h
#ifndef SaludarHeaderIncluded
#define SaludarHeaderIncluded
/* Saludar.h
*/
void Saludar( const char* unNombre );
#endif
Saludar.c
/* Saludar.c
*/
#include <stdio.h>
/* printf */
#include "Saludar.h" /* Saludar */
/* Prototipo de funcin privada */
static void SaludarEnCastellano( void );
static void SaludarEnCastellano( void ){
printf("Hola");
return;
}
void Saludar( const char* unNombre ){
SaludarEnCastellano();
printf(", %s\n", unNombre);
}
return;
Pgina 16 de 18
Bibliotecas en ANSI C
Biblioteca SaludarMuchasVeces
SaludarMuchasVeces.h
#ifndef SaludarMuchasVecesHeaderIncluded
#define SaludarMuchasVecesHeaderIncluded
/* SaludarMuchasVeces.h
*/
void SaludarMuchasVeces( const char* unNombre, int cuantasVeces );
#endif
SaludarMuchasVeces.c
/* SaludarMuchasVeces.c
*/
#include "SaludarMuchasVeces.h" /* SaludarMuchasVeces */
#include "Saludar.h"
/* Saludar */
void SaludarMuchasVeces( const char* unNombre, int cuantasVeces ){
int i;
for( i = 0; i < cuantasVeces; i++)
Saludar( unNombre );
return;
}
Aplicacin
Aplicacin.c
/* Aplicacion.c
*/
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
"Saludar.h"
"SaludarMuchasVeces.h"
/*
/*
/*
/*
puts */
EXIT_SUCCESS */
Saludar */
SaludarMuchasVeces */
de biblioteca Saludar */
pero no se puede invocar porque es static */
SaludarEnCastellano("Mundo"); */
puts(""); */
/* de biblioteca SaludarMuchasVeces */
SaludarMuchasVeces("Mundo", 4);
puts("");
return EXIT_SUCCESS;
}
Pgina 17 de 18
Bibliotecas en ANSI C
4. Conclusin
Las bibliotecas demuestran ser una excelente forma de implementar la modularizacin y para
la construccin de TADs.
Se debe prestar especial cuidado al diseo de las interfaces que exponen las bibliotecas para
cumplir con determinada funcionalidad, se debe aplicar el ocultamiento de informacin. Mediante la
abstraccin se debe evitar que el cliente de la biblioteca necesite conocer los detalles de
implementacin para hacer uso de la biblioteca. ANSI C permite encapsulamiento de componentes de
las bibliotecas mediante la palabra clave static.
5. Bibliografa
Pgina 18 de 18