Vous êtes sur la page 1sur 18

Universidad Tecnolgica Nacional

Facultad Regional Buenos Aires


Ingeniera en Sistemas de Informacin

Sintaxis y Semntica de los Lenguajes

Bibliotecas en ANSI C
por Prof. Ing. Jos Mara Sola

1.0.0.20030808 2.1.20120328

Objetivos

Presentar el concepto de biblioteca.

Presentar los pasos necesarios para la creacin de una biblioteca con ANSI C.

Presentar los pasos para la construccin de biblioteca con BCC32.

Presentar los pasos para compilar (y linkeditar) con BCC32 programas fuente que
utilizan bibliotecas a parte de la Standarad.

Los objetivos se cumplen mediante la presentacin de dos casos de estudio.

Objetivo secundario

Presentar el Lenguaje Unificado de Modelado (UML - Unified Modeling Language)


aplicndolo en los modelos de este artculo.

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

Ing. Jos Mara Sola

Pgina 1 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

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

2.2. DISEO ................................................................................................................................................................................ 6


2.2.1. Diagrama de Clases..................................................................................................................................................... 6
2.2.2. Diagrama de Secuencia ............................................................................................................................................... 6
2.2.3. Diagrama de Componentes.......................................................................................................................................... 7
2.3. PROCESOS DE TRADUCCIN ................................................................................................................................................. 7
2.3.1. Generacin de la Biblioteca ........................................................................................................................................ 7
2.3.2. Generacin de la Aplicacin ....................................................................................................................................... 8
2.4. CONSTRUCCIN ................................................................................................................................................................... 8
2.4.1. Archivos Fuentes.......................................................................................................................................................... 8
2.4.2. Entorno de Desarrollo ................................................................................................................................................. 9
2.4.3. Procesos....................................................................................................................................................................... 9
Crear objeto para la biblioteca ................................................................................................................................................................ 9
Crear biblioteca ...................................................................................................................................................................................... 9
Generar programa ................................................................................................................................................................................. 10
Ejecucin .............................................................................................................................................................................................. 10

2.4.4. Generacin de Componentes y Prueba ...................................................................................................................... 10


3. CASO DE ESTUDIO 2 SALUDOS ....................................................................................................................................11
3.1. DIAGRAMA DE CASOS DE USO ........................................................................................................................................... 11
3.2. DISEO .............................................................................................................................................................................. 12
3.2.1. Diagrama de Clases................................................................................................................................................... 12
3.2.2. Diagrama de Secuencia ............................................................................................................................................. 13
3.2.3. Diagrama de Componentes........................................................................................................................................ 14
3.3. PROCESOS DE TRADUCCIN ............................................................................................................................................... 15
3.4. CONSTRUCCIN ................................................................................................................................................................. 16
3.4.1. Archivos Fuentes........................................................................................................................................................ 16
Biblioteca Saludar ................................................................................................................................................................................ 16
Saludar.h .......................................................................................................................................................................................... 16
Saludar.c .......................................................................................................................................................................................... 16
Biblioteca SaludarMuchasVeces .......................................................................................................................................................... 17
SaludarMuchasVeces.h .................................................................................................................................................................... 17
SaludarMuchasVeces.c .................................................................................................................................................................... 17
Aplicacin ............................................................................................................................................................................................ 17
Aplicacin.c ..................................................................................................................................................................................... 17

3.4.2. Generacin de Componentes y Prueba ...................................................................................................................... 18


4. CONCLUSIN .......................................................................................................................................................................18
5. BIBLIOGRAFA ....................................................................................................................................................................18

Ing. Jos Mara Sola

Pgina 2 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

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

1.2. Archivos Header


Los archivos header (encabezados) son archivos con cdigo fuente ANSI C que deben ser
compartidas por varios programas. En su gran mayora, son declaraciones y macros; no contienen
definiciones de funciones, sino declaraciones de funciones (i.e. prototipos).
Los archivos header, por convencin, tienen como extensin ".h".
No se debe confundir el concepto de archivo header con biblioteca. Por ejemplo, la biblioteca
Standard posee varios archivos header, en los cuales header hay declaraciones para utilizar las
funciones que estn precompiladas (i.e. cdigo objeto) en la biblioteca Standard.

1.3. Funciones Pblicas


Una funcin pblica de una biblioteca es una funcin que puede ser invocada por diferentes
programas u otras bibliotecas.
En ANSI C, por defecto, las funciones son pblicas; pueden ser invocadas desde otros
programas o bibliotecas (i.e. unidades de traduccin).
Leer la seccin 4.6 Static Variables del captulo 4. Functions and Program Structure de
[K&R1988].

1.4. Funciones Privadas (static)


Una funcin privada de una biblioteca es una funcin que el programa o biblioteca llamante no
necesita conocer para poder hacer uso de la biblioteca.
En general son funciones helper ("auxiliares") que ayudan al diseo de la implementacin de la
biblioteca. Por ejemplo, la funcin pblica Alumno *ImprimirAlumno(int legajo) puede,
internamente, invocar (i.e. hacer uso) de la funcin privada BuscarAlumno para abstraer la tarea de
la bsqueda del alumno a imprimir.
Ing. Jos Mara Sola

Pgina 3 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

En ANSI C, las funciones privadas se implementan precediendo el prototipo y la definicin de


la funcin con la palabra clave static. Las funciones static slo pueden ser invocadas desde la
unidad de traduccin (i.e. archivo fuente) dnde estn definidas, no pueden ser invocadas por otras
programas o bibliotecas. El prototipo de una funcione static se encuentran al comienzo del archivo
fuente donde est definida, junto a otras declaraciones externas; sus prototipos no se escriben en los
archivos header.
Leer la seccin 4.6 Static Variables del captulo 4. Functions and Program Structure de
[K&R1988].

1.5. Directivas al Preprocesador


Permiten dirigir las acciones del preprocesador. Otorgan funcionalidades de compilacin
condicional y de substitucin.
La directiva #include incorpora el contenido completo del archivo indicado. Existen dos
sintaxis, la primera es particular para los headers Standard (e.g. #include <time.h>), y la
segunda es para otros archivos fuente no Standard (e.g. #include "stack.h").
La directiva #define introduce un identificador, opcionalmente asocindolo con una porcin
de cdigo fuente.
La expresin defined <identificador> se reemplaza por cero o por uno en funcin de
si el identificador ya fue definido o no.
Las directivas de preprocesador #ifndef <expresin constante> y #endif le
indican al preprocesador que procese el bloque que encierran si y solo si la expresin constante es cero
(falsa), permiten la compilacin condicional.
Las siguientes lneas son equivalentes
#if ! defined <identificador>
#ifndef <identificador>

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

Leer de [K&R1988] las siguientes secciones del captulo A.12 Preprocessing


A.12.3 Macro Definition and Expansion
A.12.4 File Inclusion
A.12.5 Conditional Compilation

1.6. Modelos UML


El Lenguaje Unificado de Modelado es un lenguaje para especificar, visualizar, construir y
documentar los artefactos de sistemas de software, tambin como para modelado de negocio y otros
sistemas no-software. El UML representa una coleccin de las mejores prcticas ingenieriles que han
sido exitosamente probadas en el modelado de largos y complejos sistemas.2
En este artculo, se utilizan los diagramas de caso de uso para representar funcionalidad, los de
clase para representar la estructura lgica de las entidades, los de secuencia para representar el
comportamiento en funcin del tiempo y los de componente para representar la estructura fsica.

OMG-Unified Modeling Language, v1.5, http://www.omg.org.

Ing. Jos Mara Sola

Pgina 4 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

2. Caso de Estudio 1 Tiempo


Este caso trata de un programa llamado reloj el cual invoca a una funcin de la biblioteca
tiempo. La funcin en cuestin es GetTimeAsString que, como su nombre lo indica, retorna el
tiempo (i.e. hora y fecha actual como una cadena).

2.1. Diagrama de Casos de Uso


Aplicacin
El usuario utiliza el programa reloj para conocer la hora y fecha actual.

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

Ing. Jos Mara Sola

Pgina 5 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

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.

2.2.1. Diagrama de Clases


uses

Reloj

utility
Tiempo

+main() : int

+GetTimeAsString(out s : char*) : char*


uses

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*

2.2.2. Diagrama de Secuencia


: Reloj

utility
: Tiempo

utility
: Standard

main()
GetTimeAsString()
time()

ctime()

strcpy()

printf()

Ing. Jos Mara Sola

Pgina 6 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

2.2.3. Diagrama de Componentes


includes
source code
rejol.c

header
tiempo.h

includes

includes

header
stdio.h

source code
tiempo.c
includes

includes
header
time.h
trace
trace
header
string.h

Diferencia de tiempo (antes y despus del proceso de traduccin)

library
tiempo

executable
reloj

library
standard

2.3. Procesos de Traduccin


2.3.1. Generacin de la Biblioteca
Compilador y "Librarian"
source code
tiempo.c

library
tiempo

includes includes
includes

header
tiempo.h

Ing. Jos Mara Sola

header
time.h

header
string.h

Pgina 7 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

2.3.2. Generacin de la Aplicacin


Compilador y Enlazador

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

Ing. Jos Mara Sola

Pgina 8 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

2.4.2. Entorno de Desarrollo

2.4.3. Procesos
Crear objeto para la biblioteca

> bcc32 -c tiempo.c

Crear biblioteca

> tlib tiempo.lib +tiempo.obj

Ing. Jos Mara Sola

Pgina 9 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

Generar programa

> bcc32 reloj.c tiempo.lib

Ejecucin

> reloj.exe

2.4.4. Generacin de Componentes y Prueba

Ing. Jos Mara Sola

Pgina 10 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

3. Caso de Estudio 2 Saludos


Este caso presenta dependencias ms complejas entre bibliotecas y un programa. La
dependencias estn dadas por la relacin de invocacin y de inclusin. Una de las bibliotecas utiliza
una funcin privada.
El programa hace uso de dos bibliotecas y tambin de la Biblioteca Standard. Una biblioteca
llama a la otra, y la ltima invoca a una funcin de la Standard.
La nica y simple accin del programa es la emitir por stdin un saludo una determinada cantidad
de veces.

3.1. Diagrama de Casos de Uso


Aplicacion
Realizar
diferentes saludos

Usuario

<<library>>
Saludar
Saludar a alguien

TransaltionUnit

<<library>>
SaludarMuchasVeces
Saludar a alguien
varias veces

TransaltionUnit

Ing. Jos Mara Sola

Pgina 11 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

3.2. Diseo
3.2.1. Diagrama de Clases
utility
SaludarMuchasVeces

uses

+SaludarMuchasVeces(in unNombre : const char*, in cuantasVeces : int)

uses

utility
Saludar

uses

Aplicacion

-SaludarEnCastellano()
+Saludar(in unNombre : const char*)

+main() : int

uses

utility
Standard
+EXIT_SUCCESS : int

uses

+printf(in format : const char*, in ...) : int


+puts(in string : const char*) : int

Ing. Jos Mara Sola

Pgina 12 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

3.2.2. Diagrama de Secuencia


: SistemaOperativo

utility
: SaludarMuchasVeces

: Aplicacion

utility
: Saludar

utility
: Standard

main()
Saludar("Mundo")

SaludarEnCastellano

puts("Hola")

printf(", %s\n", unNombre)

puts("")

SaludarMuchasVeces("Mundo", 4)

Itera lo indicado
por el parmetero
cuantasVeces

Saludar(unNombre)

puts("")

Ing. Jos Mara Sola

Pgina 13 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

3.2.3. Diagrama de Componentes


Relaciones de invocacin
invokes

source code
SaludarMuchasVeces.c

invokes

invokes

source code
Aplicacion.c

source code
Saludar.c

invokes

invokes

library
Standard Library

Relaciones de inclusin y dependencia antes y despus del proceso de traduccin


includes

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

Diferencia de tiempo (antes y despus del proceso de traduccin)

library
SaludarMuchasVeces

executable
Aplicacion
library
Saludar
library
Standard Library

Ing. Jos Mara Sola

Pgina 14 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

3.3. Procesos de Traduccin


Generacin de la Biblioteca Saludar
library
Saludar
header
Saludar.h

includes

source code
Saludar.c

includes

Compilador

Adminstrador
de Bibliotecas

header
stdio.h
object file
Saludar.obj

Generacin de la Biblioteca Saludar Muchas Veces


library
SaludarMuchasVeces

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

Ing. Jos Mara Sola

library
SaludarMuchasVeces

Pgina 15 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

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);
}

Ing. Jos Mara Sola

return;

Pgina 16 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

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 */

int main ( void ){


/* de biblioteca Saludar */
Saludar("Mundo");
puts("");
/*
/*
/*
/*

de biblioteca Saludar */
pero no se puede invocar porque es static */
SaludarEnCastellano("Mundo"); */
puts(""); */

/* de biblioteca SaludarMuchasVeces */
SaludarMuchasVeces("Mundo", 4);
puts("");
return EXIT_SUCCESS;
}

Ing. Jos Mara Sola

Pgina 17 de 18

UTN FRBA Sintaxis y Semntica de Lenguajes

Bibliotecas en ANSI C

3.4.2. Generacin de Componentes y Prueba

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

Ing. Jos Mara Sola

[K&R1988] "The C Programming Language, 2nd Edition", B. W. Kernighan & D. M.


Ritchie, 1988, Prentice-Hall, ISBN 0-13-110362-8

Documentacin Borland C++ Compiler 5.5 with Command Line Tools

OMG-Unified Modeling Language, v1.5, http://www.omg.org .

Pgina 18 de 18

Vous aimerez peut-être aussi