PDF de programación - Programación Modular - Fundamentos de la programación

Imágen de pdf Programación Modular -  Fundamentos de la programación

Programación Modular - Fundamentos de la programacióngráfica de visualizaciones

Actualizado el 15 de Diciembre del 2018 (Publicado el 11 de Diciembre del 2018)
1.409 visualizaciones desde el 11 de Diciembre del 2018
2,1 MB
39 paginas
Creado hace 10a (10/04/2014)
10/04/2014

Fundamentos de la programación 

2013‐2014

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 tabla de datos ordenada I
Compilación de programas multiarchivo
El preprocesador
Cada cosa en su módulo
Ejemplo: Gestión de una tabla de datos ordenada II
El problema de las inclusiones múltiples

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

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

Implementaciones alternativas
Calidad y reutilización del software

2
7
13
12
22
24
26
27
33
38
39
40
48
52
61
72

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 1

1

10/04/2014

Fundamentos de la programación: Programación modular

Página 2

Programas multiarchivo

El código fuente del programa se reparte entre varios archivos (módulos) ,
cada uno con las declaraciones y los subprogramas que tienen relación.
Módulos: archivos de código fuente con declaraciones y subprogramas
de una unidad funcional: una estructura de datos, un conjunto de utilidades, ...
ListaLista
Archivos
Archivos

Principal
Principal

Cálculos
Cálculos

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

tArray elem;
int cont;

} tLista;

void init(tLista&);

bool insert(tLista&, double);

bool delete(tLista&, int);

int size(tLista);

void sort(tLista&);

bool cargar(tLista&, string);

bool guardar(tLista, string);

bool mezclar(string, string);

int size(string);

bool exportar(string);

int main() {

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

double mean(tLista);

double min(tLista);

double max(tLista);

double desv(tLista);

int minIndex(tLista);

int maxIndex(tLista);

double sum(tLista);

return 0;

}

Ejecutable
Ejecutable

Fundamentos de la programación: Programación modular

Página 3

2

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

10/04/2014

Compilación separada

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

Lista.obj
Lista.obj

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

tArray elem;
int cont;

} tLista;

void init(tLista&);

bool insert(tLista&, double);

bool delete(tLista&, int);

void sort(tLista&);

int size(tLista);

Cálculos
Cálculos

double mean(tLista);

double min(tLista);

double max(tLista);

double desv(tLista);

int minIndex(tLista);

int maxIndex(tLista);

double sum(tLista);

...

Archivos
Archivos

bool cargar(tLista&, string);

bool guardar(tLista, string);

bool mezclar(string, string);

int size(string);

bool exportar(string);

...

Archivos.obj
Archivos.obj

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

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 4

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() {

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

return 0;

}

Ejecutable
Ejecutable

Lista.obj

Calculos.obj

Archivos.obj

......

iostream.obj

fstream.obj

math.obj

......

Fundamentos de la programación: Programación modular

Página 5

3

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

10/04/2014

Compilación separada

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

COMPILACIÓN
COMPILACIÓN

iostream.obj

fstream.obj

math.obj

......

ENLACE
ENLACE

Principal
Principal

Lista.cpp

main.cpp

Lista.obj

Calculos.obj

Archivos.obj



......

main.obj

Ejecutable
Ejecutable

Fundamentos de la programación: Programación modular

Página 6

Fundamentos de la programación: Programación modular

Página 7

4

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

En el código de un programa de un único archivo tenemos:
 Definiciones de constantes.
 Declaraciones de tipos de datos.
 [Quizás, variables globales. Mejor evitar tener variables globales.]
 Prototipos de los subprogramas.
 Implementación de los subprogramas.
 Implementación de la función main().
Las constantes, tipos [, variables] y prototipos de subprogramas que tienen
que ver con alguna unidad funcional indican cómo se usaésta: interfaz.
 Estructura de datos con los subprogramas que la gestionan.
 Conjunto de utilidades (subprogramas) de uso general.
 Etcétera.
La implementación de los subprogramas es eso, implementación.

Fundamentos de la programación: Programación modular

Página 8

Creación de módulos de biblioteca

Interfaz: Definiciones y declaraciones de datos y subprogramas (prototipos).
¡Es todo lo que el usuario de esa unidad funcional necesita saber!
Implementación: Código de los subprogramas que hacen el trabajo.
No necesita conocerse para utilizarlo: ¡Se da por sentado que es correcto!
Separamos la interfaz y la implementación en dos archivos separados:
 Archivo de cabecera: Definiciones y declaraciones de datos y subprogramas.
 Archivo de implementación: Implementación de los subprogramas.
Archivos de cabecera: extensión .h
Mismo nombre (x.h/ x.cpp)
Mismo nombre (x.h/ x.cpp)
Archivos de implementación: extensión .cpp
Extraemos las definiciones y declaraciones de datos y subprogramas
de la unidad funcional y las colocamos en un archivo de cabecera.
Extraemos las implementaciones de esos subprogramas y los colocamos
en el archivo de implementación de ese archivo de cabecera.

Fundamentos de la programación: Programación modular

Página 9

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

10/04/2014

5

10/04/2014

Interfazfrente a implementación

Creación de módulos de biblioteca

void init(tLista&);

lista.cont = 0;

}

tArray elem;
int cont;

} tLista;

void init(tLista& lista) {

bool delete(tLista&, int);

bool insert(tLista&, double);

Lista.h
Lista.h

Lista.cpp
Lista.cpp

bool insert(tLista& lista, 
double valor) {

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

Módulo
Módulo
Unidad
Unidad
Biblioteca
Biblioteca
Si otro módulo (o el programa principal) quiere usar algo de esa biblioteca:
Deberá incluir el archivo de cabecera.
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.

#include "Lista.h"
...

main.cpp
main.cpp

if (lista.cont == N)

return false;

lista.elem[lista.cont] = 

else {

valor;

}

}

int size(tLista);

void sort(tLista&);

#include "Lista.h"

lista.cont++;

Fundamentos de la programación: Programación modular

Página 10

Lista.h
Lista.h

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

tArray elem;
int cont;

} tLista;

void init(tLista&);

bool insert(tLista&, double);

bool delete(tLista&, int);

int size(tLista);

void sort(tLista&);

Creación de módulos de biblioteca

Interfaz

El archivo de cabecera (.h) tiene todo lo que necesita
conocer cualquier otro módulo (o programa principal)
que quiera utilizar los servicios (subprogramas)
de ese módulo de biblioteca.
La directiva #includeañade las declaraciones del archivo
de cabecera en el código del módulo (preprocesamiento):
Preprocesador
Preprocesador
Es 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 a funciones).

#include "Lista.h"
...

main.cpp
main.cpp

main.cpp
main.cpp

tArray elem;
int cont;

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

} tLista;
void init(tLista&);
bool insert(tLista&, double);
bool delete(tLista&, int);
int size(tLista);
...

Fundamentos de la programación: Programación modular

Página 11

6

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

10/04/2014

Lista.cpp
Lista.cpp

#include "Lista.h"

void init(tL
  • Links de descarga
http://lwp-l.com/pdf14502

Comentarios de: Programación Modular - Fundamentos de la programación (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