PDF de programación - FP08 - Programación modular

Imágen de pdf FP08 - Programación modular

FP08 - Programación modulargráfica de visualizaciones

Actualizado el 15 de Junio del 2021 (Publicado el 17 de Noviembre del 2018)
1.221 visualizaciones desde el 17 de Noviembre del 2018
2,6 MB
39 paginas
Creado hace 10a (04/09/2013)
Fundamentos de la programación

8

Grado en Ingeniería Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
Facultad de Informática
Luis Hernández Yáñez
Universidad Complutense

Programas multiarchivo y compilación separada 
Interfaz frente a implementación
Uso de módulos de biblioteca
Ejemplo: Gestión de una lista ordenada I
Compilación de programas multiarchivo
El preprocesador
Cada cosa en su módulo
Ejemplo: Gestión de una lista ordenada II
El problema de las inclusiones múltiples

Compilación condicional
Protección frente a inclusiones múltiples

Ejemplo: Gestión de una lista ordenada III
Implementaciones alternativas
Espacios de nombres

Implementaciones alternativas
Calidad y reutilización del software

757
762
768
770
778
780
782
784
789
794
795
796
804
808
817
827

Fundamentos de la programación: Programación modular

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: Programación modular

Página 757

Programas multiarchivo

Código fuente repartido entre varios archivos (módulos)
Cada módulo con sus declaraciones y sus subprogramas
Módulo: Unidad funcional (estructura de datos, utilidades, ...)
ListaLista
Archivos
Archivos

Principal
Principal

Cálculos
Cálculos

const int N = 10;
typedef double tArray[N];
typedef struct {

tArray elem;
int cont;

} tArray;

void init(tArray &lista);

void insert(tArray &lista, 
double elem, bool &ok);

void remove(tArray &lista, 
int pos, bool &ok);
...

int main() {

tArray lista;
bool ok;
init(lista);
cargar(lista, "bd.txt");
sort(lista);
double dato;
cout << "Dato: ";
cin >> dato;
insert(lista, dato, ok);
cout << min(lista) << endl; 
cout << max(lista) << endl;
cout << sum(lista) << endl;
guardar(lista, "bd.txt");

double mean(tArray lista);

double min(tArray lists);

double max(tArray lista);

double desv(tArray lista);

int minIndex(tArray lista);

int maxIndex(tArray lista);

double sum(tArray lista);

bool cargar(tArray &lista, 
string nombre);

bool guardar(tArray lista, 
string nombre);

bool mezclar(string arch1, 
string arch2);

int size(string nombre);

bool exportar(string nombre);

return 0;

}

Ejecutable
Ejecutable

Fundamentos de la programación: Programación modular

Página 758

Compilación separada

Cada módulo se compila a código objeto de forma independiente
ListaLista

lista.obj
lista.obj

Archivos
Archivos

bool cargar(tArray &lista, 
string nombre);

bool guardar(tArray lista, 
string nombre);

bool mezclar(string arch1, 
string arch2);

int size(string nombre);

bool exportar(string nombre);

archivos.obj
archivos.obj

11101010110010100100101010010
10100101010111110101010001010
01010101010100101010101010110
01010101010101010101010010101
01010101000001010101011010100
10101010101010000101010111100
10101010101111001100101010110
10101010100100101010011110010
10101010010101001010100101010
01010101001010000100111101001
01010110010101010010101001010
10101010100101010010101010100
00101010111001010100101000111
01010111010011010101001010101
11111101010110011010101110000
10010101001010101010101101111

const int N = 10;
typedef double tArray[N];
typedef struct {

tArray elem;
int cont;

} tArray;

void init(tArray &lista);

void insert(tArray &lista, 
double elem, bool &ok);

void remove(tArray &lista, 
int pos, bool &ok);
...

Cálculos
Cálculos

double mean(tArray lista);

double min(tArray lists);

double max(tArray lista);

double desv(tArray lista);

int minIndex(tArray lista);

int maxIndex(tArray lista);

double sum(tArray lista);

00101110101011001010010010101
00101010010101011111010101000
10100101010101010010101010101
01100101010101010101010101001
01010101010100000101010101101
01001010101010101000010101011
11001010101010111100110010101
01101010101010010010101001111
00101010101001010100101010010
10100101010100101000010011110
10010101011001010101001010100
10101010101010010101001010101
01000010101011100101010010100
01110101011101001101010100101
01011111110101011001101010111
00001001010100101010101010110

calculos.obj
calculos.obj

01011001010010010101001010100
10101011111010101000101001010
10101010010101010101011001010
10101010101010101001010101010
10100000101010101101010010101
01010101000010101011110010101
01010111100110010101011010101
01010010010101001111001010101
01001010100101010010101001010
10100101000010011110100101010
11001010101001010100101010101
01010010101001010101010000101
01011100101010010100011101010
11101001101010100101010111111
10101011001101010111000010010
10100101010101010110001111010

Fundamentos de la programación: Programación modular

Página 759

Compilación separada

Al compilar el programa principal, se adjuntan los módulos compilados
Bibliotecas del sistema
Módulos del programa
Módulos del programa
Bibliotecas del sistema

Principal
Principal

int main() {

lista.obj

calculos.obj

tArray lista;
bool ok;
init(lista);
cargar(lista, "bd.txt");
sort(lista);
double dato;
cout << "Dato: ";
cin >> dato;
insert(lista, dato, ok);
cout << min(lista) << endl; 
cout << max(lista) << endl;
cout << sum(lista) << endl;
guardar(lista, "bd.txt");

iostream.obj

fstream.obj

archivos.obj

......

return 0;

}

math.obj

......

Ejecutable
Ejecutable

Fundamentos de la programación: Programación modular

Página 760

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Compilación separada

Principal
Principal

¡Sólo los archivos fuente modificados necesitan ser recompilados!

COMPILACIÓN
COMPILACIÓN

iostream.obj

fstream.obj

math.obj

......

ENLACE
ENLACE

lista.cpp

main.cpp

lista.obj

calculos.obj



archivos.obj ......

main.obj

Ejecutable
Ejecutable

Fundamentos de la programación: Programación modular

Página 761

Fundamentos de la programación: Programación modular

Página 762

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Creación de módulos de biblioteca

Código de un programa de un único archivo:
Definiciones de constantes
Declaraciones de tipos de datos
Prototipos de los subprogramas
Implementación de los subprogramas
Implementación de la función main()
Constantes, tipos y prototipos indican cómo se usa: Interfaz
Estructura de datos con los subprogramas que la gestionan
Conjunto de utilidades (subprogramas) de uso general
Etcétera
+ Implementaciónde los subprogramas (cómo se hace)

Fundamentos de la programación: Programación modular

Página 763

Creación de módulos de biblioteca

Interfaz: Definiciones/declaraciones de datos y prototipos
¡Todo lo que el usuario de la unidad funcional necesita saber!
Implementación: Código de los subprogramas que hacen el trabajo
No hay que conocerlo para usarlo: ¡Seguro que es correcto!
Interfaz e implementación en dos archivos separados:
Cabecera: Definiciones/declaraciones de datos y prototipos
Implementación: Implementación de los subprogramas.
Archivo de cabecera: extensión .h
Archivo de implementación: extensión .cpp
Mismo nombre
Mismo nombre
Repartimos el código entre ambos archivos (lista.h/lista.cpp)

Fundamentos de la programación: Programación modular

Página 764

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Creación de módulos de biblioteca

Interfazfrente a implementación

lista.h
lista.h

const int N = 10;
typedef double tArray[N];
typedef struct {

tArray elem;
int cont;

} tArray;

lista.cpp
lista.cpp

#include "lista.h"

void init(tArray &lista) {

lista.cont = 0;

}

ok false;

void insert(tArray &lista, 
double elem, bool &ok) {
if (lista.cont == N) {

}
else {
...

void init(tArray &lista);

void insert(tArray &lista, 
double elem, bool &ok);

void remove(tArray &lista, 
int pos, bool &ok);
...

Si otro módulo quiere usar algo de esa biblioteca:
Debe incluir el archivo de cabecera

Módulo
Módulo
Unidad
Unidad
Biblioteca
Biblioteca

main.cpp
main.cpp
#include "lista.h"
...

Los nombres de archivos de cabecera
Los nombres de archivos de cabecera
propios (no del sistema) se encierran
propios (no del sistema) se encierran
entre dobles comillas, no entre ángulos
entre dobles comillas, no entre ángulos

Fundamentos de la programación: Programación modular

Página 765

lista.h
lista.h

const int N = 10;
typedef double tArray[N];
typedef struct {

tArray elem;
int cont;

} tArray;

void init(tArray &lista);

void insert(tArray &lista, 
double elem, bool &ok);

void remove(tArray &lista, 
int pos, bool &ok);
...

Interfaz

Creación de módulos de biblioteca

Archivo de cabecera (.h): todo lo que necesita
conocer otro módulo (o programa principal)
que quiera utilizar sus servicios (subprogramas)
La directiva #includeañade las declaraciones del archivo
de cabecera en el código del módulo (preprocesamiento):
Preprocesador
Preprocesador
Todo lo que se necesita saber para
comprobar si el código de main.cpp
hace un uso correcto de la lista
(declaraciones y llamadas)

main.cpp
main.cpp
#include "lista.h"
...

void remove(tArray &lista, int pos, 
bool &ok);
...

void insert(tArray &lista, double elem, 
bool &ok);

const int N = 10;
typedef double tArray[N];
typedef struct {

main.cpp
main.cpp

void init(tArray &lista);

tArray elem;
int cont;

} tArray;

Fundamentos de la programación: Programación modular

Página 766

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

lista.cpp
lista.cpp

#include "lista.h"

void init(tArray &lista) {

lista.cont = 0;

}

void insert(tArray &lista, 
double elem, bool &ok) {
if (lista.cont == N) {

Creación de módulos de biblioteca

Implementación

Compilar el módulo significa compilar
su archivo de implementación (.cpp)
También necesita conocer sus propias declaraciones:
Al compilar el módulo se genera el código objeto
Si no se modifica no hay necesidad de recompilar
Código que usa el módulo:
Necesita sólo el archivo de cabecera para compilar
Se adjunta el código objeto del módulo durante el enlace

lista.cpp
lista.cpp
#include "lista.h"
...

ok false;

}
else {
...

lista.
  • Links de descarga
http://lwp-l.com/pdf14241

Comentarios de: FP08 - Programación modular (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad