Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


El diseño modular, Apuntes de Ingeniería Infórmatica

Asignatura: Laboratorio de Programación, Profesor: , Carrera: Ingeniería Informática, Universidad: UMA

Tipo: Apuntes

Antes del 2010

Subido el 14/10/2007

josemanuelk6
josemanuelk6 🇪🇸

4.2

(56)

58 documentos

1 / 5

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
UNIVERSIDAD DE MALAGA
DPTO. DE LENGUAJES Y C. DE LA COMPUT ACION
E.T.S. DE INGENIERIA INFORMAT ICA
INGENIERIA INFORMATICA
LABORATORIO DE PROGRAMACIÓN
(CURSO 2004-2005)
T
TE
EM
MA
A
I
II
II
I
DISEÑO MODULAR
III.1. Introducción.
III.2. Módulos de biblioteca.
III.2.1. Espacios de nombres.
III.2.2. Especificación del interfaz.
III.2.3. Implementación del módulo
III.2.4. Utilización de bibliotecas.
III.3. Proyectos en Dev-C++.
Bibliografía: [SAVI00], [JOYA00].
E.T.S. de Ingeniería Informática (Ing. Informática) Dpto de Lenguajes y C. de la Computación
_______________________________________
Laboratorio de Programación Tema III. Diseño Modular 1
III.1. INTRODUCCIÓN.
Como se analizó en el tema IV de la asignatura Metodología de la Programación, el concepto
de programación modular tiene diversas interpretaciones en función del concepto de módulo:
1. Énfasis en el procesamiento:
a. Módulo como algoritmo autocontenido, es decir, un subprograma.
b. Módulo como agrupación de subprogramas relacionados lógicamente entre sí.
i. Agrupación de un programa principal y los subprogramas necesarios:
módulo de programa.
ii. Agrupación de diferentes subalgoritmos diseñados bajo un ámbito de
aplicación común.
2. Énfasis en los datos:
a. Módulo como agrupación de una estructura de datos y las operaciones que la
gestionan.
i. Accesibilidad. Tipos transparentes.
ii. Ocultación. Tipos Abstractos de Datos
iii. Herencia y Polimorfismo. Orientación a Objetos
En la asignatura Laboratorio de Programación, un programa siempre ha estado constituido
por un único módulo del tipo 1.b.i. (módulo de programa). En cambio, en este tema
abordaremos el diseño y la utilización de bibliotecas, es decir de módulos según los
conceptos anteriores 1.b.ii. y 2.a.i. Esto hará posible, por tanto, la construcción de programas
complejos formados por la integración de uno o varios módulos biblioteca y un módulo de
programa.
En realidad, nuestros módulos de programas construidos hasta ahora, han utilizado módulos
biblioteca proporcionados por el sistema para realizar diversas tareas (<iostream>, <string>,
etc.). Ahora se trata de diseñar nuestras propias bibliotecas, con objeto de dividir la solución
algorítmica a un determinado problema en diferentes entidades que agrupen partes
lógicamente relacionadas, al mismo tiempo que proporcionen un mecanismo adecuado de
reutilización de código.
Otra ventaja que aporta la modularidad es la posibilidad de hacer compilación separada, es
decir, compilar un módulo de forma “independiente” del resto, de tal forma que cambios en
un determinado módulo no impliquen la compilación de todos los módulos integrantes del
programa, sino únicamente de los implicados en dicho cambio. Esta ventaja se aprecia
cuando el número de módulos que forman un programa llega a ser grande.
III.2. MÓDULOS DE BIBLIOTECA.
Al igual que un módulo de programa se implementa mediante un fichero, C++ utiliza también
el concepto de fichero, junto con el concepto de espacio de nombres, para la realización de
módulos de biblioteca.
III.2.1. ESPACIOS DE NOMBRES.
Un espacio de nombres agrupa bajo un mismo ámbito un conjunto de definiciones y
declaraciones lógicamente relacionadas entre sí con algún criterio. Sintácticamente, para
definir un espacio de nombres se utilizará la palabra namespace seguida del identificador
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga El diseño modular y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

UNIVERSIDAD DE MALAGA

DPTO. DE LENGUAJES Y C. DE LA COMPUTACION

E.T.S. DE INGENIERIA INFORMATICA

INGENIERIA INFORMATICA

LABORATORIO DE PROGRAMACIÓN

(CURSO 2004-2005) TE^ T

EMMA

A I

IIIII

DISEÑO MODULAR

III.1. Introducción.III.2. Módulos de biblioteca.

III.2.1. Espacios de nombres.III.2.2. Especificación del interfaz.III.2.3. Implementación del móduloIII.2.4. Utilización de bibliotecas.

III.3. Proyectos en Dev-C++.Bibliografía: [SAVI00], [JOYA00].

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Programación

Tema III. Diseño Modular

III.1. INTRODUCCIÓN. Como se analizó en el tema IV de la asignatura Metodología de la Programación, el conceptode programación modular tiene diversas interpretaciones en función del concepto de módulo:

1.^

Énfasis en el procesamiento:

a.^ Módulo como algoritmo autocontenido, es decir, un subprograma.b.^ Módulo como agrupación de subprogramas relacionados lógicamente entre sí.

i.^ Agrupación de un programa principal y los subprogramas necesarios:^ módulo de programa

ii.^

Agrupación de diferentes subalgoritmos diseñados bajo un ámbito deaplicación común.

2.^

Énfasis en los datos:

a.^ Módulo como agrupación de una estructura de datos y las operaciones que lagestionan.

i.^ Accesibilidad. Tipos transparentes.ii.^ Ocultación. Tipos Abstractos de Datosiii.^ Herencia y Polimorfismo. Orientación a Objetos

En la asignatura Laboratorio de Programación, un programa siempre ha estado constituidopor un único módulo del tipo 1.b.i. (módulo de programa). En cambio, en este temaabordaremos el diseño y la utilización de bibliotecas, es decir de módulos según losconceptos anteriores 1.b.ii. y 2.a.i. Esto hará posible, por tanto, la construcción de programascomplejos formados por la integración de uno o varios módulos biblioteca y un módulo deprograma.En realidad, nuestros módulos de programas construidos hasta ahora, han utilizado módulosbiblioteca proporcionados por el sistema para realizar diversas tareas (, ,etc.). Ahora se trata de diseñar nuestras propias bibliotecas, con objeto de dividir la soluciónalgorítmica

a^

un^

determinado

problema

en

diferentes

entidades

que

agrupen

partes

lógicamente relacionadas

, al mismo tiempo que proporcionen un mecanismo adecuado de

reutilización de código

Otra ventaja que aporta la modularidad es la posibilidad de hacer

compilación separada

, es

decir, compilar un módulo de forma “independiente” del resto, de tal forma que cambios enun determinado módulo no impliquen la compilación de todos los módulos integrantes delprograma, sino únicamente de los implicados en dicho cambio. Esta ventaja se apreciacuando el número de módulos que forman un programa llega a ser grande. III.2. MÓDULOS DE BIBLIOTECA. Al igual que un módulo de programa se implementa mediante un fichero, C++ utiliza tambiénel concepto de fichero, junto con el concepto de espacio de nombres, para la realización demódulos de biblioteca. III.2.1. ESPACIOS DE NOMBRES. Un^

espacio de nombres

agrupa bajo un mismo ámbito un conjunto de definiciones y

declaraciones lógicamente relacionadas entre sí con algún criterio. Sintácticamente, paradefinir un espacio de nombres se utilizará la palabra

namespace

seguida del identificador

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Programación

Tema III. Diseño Modular

que queramos asignarle. A continuación encerramos entre llaves las diferentes declaracionesy definiciones que deseamos agrupar bajo el espacio de nombres.

namespace

nombre

declaraciones y definiciones

De esta forma, un espacio de nombres nos proporciona la primera de las característicasmencionadas

anteriormente

que

ofrece

la

modularidad:

agrupar

partes

lógicamente

relacionadas

Para conseguir la segunda característica asociada a la modularidad, esto es, la

reutilización de

código

, C++ divide un módulo biblioteca en dos entidades, la especificación del interfaz del

módulo y la implementación del mismo, asociando a cada una de ellas

ficheros diferentes

Las dos siguientes secciones abordan estas dos entidades. III.2.2. ESPECIFICACIÓN DEL INTERFAZ. El interfaz de un módulo de biblioteca contiene las definiciones de constantes y tipos y lasdeclaraciones de subprogramas (cabeceras seguidas de punto y coma, también denominadasprototipos) que el módulo exporta. En definitiva, se establece todo aquello que puede serposteriormente utilizado por parte de otro módulo, ya sea un módulo de programa o bien otrabiblioteca. Todas las declaraciones y definiciones aparecerán agrupadas bajo el espacio denombres elegido para el módulo.La especificación del interfaz se almacena en un fichero con extensión “

.h”

. Este tipo de

fichero se denomina también

fichero cabecera

(header en inglés). Por norma, el nombre del

fichero cabecera coincidirá con el nombre del espacio de nombres que contiene.Ejemplo: Especificación del interfaz para un módulo biblioteca de números complejos en el

fichero

m_complejo.h

#ifndef

m_complejo #define

m_complejo // define el

tipo

de datos Complejo

y^

declara algunas

operaciones

namespace m_complejo {struct Complejo

float real;float imag;}; // lee un

numero

complejo de

teclado

void

leer(Complejo& c); //^

escribe

un numero

complejo

por

pantalla

void

escribir(const Complejo&

c);

//^

asigna

a^

c el

número

complejo

formado

por

real

e^

imag

void

crear(Complejo&

c,

float

real,

float

imag);

//^

suma

dos numeros

complejos

void

sumar(Complejo&

res, const Complejo&

x,

const

Complejo& y);

//^

resta

dos numeros

complejos

void

restar(Complejo&

res,

const

Complejo& x,

const

Complejo& y);

}^ //

namespace m_complejo #endif

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Programación

Tema III. Diseño Modular

El esquema:

#ifndef m_complejo#define m_complejo....#endif

se denomina “guarda” del fichero cabecera y tiene como cometido evitar la duplicación de lasdefiniciones y declaraciones contenidas en el esquema cuando éste sea utilizado por otrosmódulos. Las dos primeras líneas del esquema serán las dos primeras líneas del fichero y laúltima línea del esquema de guarda será la última línea del fichero. El nombre de la guarda(en nuestro ejemplo,

m_complejo

) se forma poniendo delante y detrás del nombre del

espacio de nombres, el carácter ‘_’.El fichero cabecera podrá incluir otros ficheros cabecera necesarios para la especificación delas declaraciones y definiciones que contiene. III.2.3. IMPLEMENTACIÓN DEL MÓDULO. La implementación de un módulo de biblioteca contiene las definiciones de los subprogramas(implementación) declarados en el interfaz, así como cualquier otra declaración y/o definiciónnecesaria para realizar la implementación. Todas las declaraciones y definiciones apareceránagrupadas bajo el espacio de nombres elegido para el módulo.La implementación se almacena en un fichero con extensión “

.cpp”

. Por norma, el nombre

del fichero de implementación coincidirá con el nombre del espacio de nombres que contiene.Ejemplo: Implementación

del

módulo

biblioteca

de

números

complejos

en

el^

fichero

m_complejo.cpp // inclusion

del

tipo complejo

y sus

operaciones

#include “m_complejo.h”#include using

namespace std; // implementa

las

operaciones

sobre

complejos

namespace m_complejo {^ //

lee un

numero

complejo de

teclado

void

leer(Complejo& c) {

cin >>

c.real

c.imag;

} //^

escribe

un numero

complejo

por

pantalla

void

escribir(const Complejo&

c)

cout

<< c.real <<

c.imag <<

}//^

asigna

a c

el

número complejo

formado

por

real

e^

imag

void

crear(Complejo&

c,

float

real,

float

imag)

c.real

=^

real;

c.imag

=^

imag;

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Programación

Tema III. Diseño Modular

Ejemplo2: Utilización, por parte de un módulo de biblioteca, del módulo biblioteca de

números complejosFichero

m_lista_co.h

#ifndef

m_lista_co #define

m_lista_co // inclusion

del

tipo complejo

y sus

operaciones

#include “m_complejo.h” // define el

tipo

de datos Lista de

complejos y

operaciones

namespace m_lista_co {typedef struct

Nodo*

Lista_Cmplx;

struct Nodo

m_complejo::Complejo

dat;

Lista_Cmplx

sig;

}; //^

crea una

lista

vacia

void

crear(Lista_Cmplx&

lst);

//^

mete un

elemento al

principio

de

la

lista

void

meter(Lista_Cmplx&

lst,

const

m_complejo::Complejo&

d);

//^

saca el

primero de

la lista (no

vacia)

void

sacar(Lista_Cmplx&

lst,

m_complejo::Complejo&

d);

//^

devuelve

true

si la

lista

esta

vacia

bool

vacia(const

Lista_Cmplx&

lst);

//^

destruye

la

lista

liberando memoria

usada

void

destruir(Lista_Cmplx&

lst);

}^ //

namespace m_lista_co

#endif Fichero

m_lista_co.cpp

// inclusion

del

tipo

Lista

y^

sus

operaciones

#include "m_lista_co.h"#include using

namespace std; using

namespace m_complejo; namespace m_lista_co {//

crea una

lista

vacia

void

crear(Lista_Cmplx&

lst)

{lst

= NULL;

}//^

mete un

elemento

al

principio

de la

lista

void

meter(Lista_Cmplx& lst,

const

Complejo&

d)

{Lista_Cmplx nuevo =

new Nodo;

nuevo->dat =

d;

nuevo->sig =

lst;

lst^

= nuevo; }

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Programación

Tema III. Diseño Modular

//^

saca el

primero de

la lista (no

vacia)

void

sacar(Lista_Cmplx&

lst,

Complejo&

d)

{Lista_Cmplx aux

= lst;

lst^

= lst->sig; d^ =^

aux->dat; delete

aux; }//^

devuelve

true

si la

lista

esta

vacia

bool

vacia(const

Lista_Cmplx&

lst)

{return

(lst ==

NULL);

}//^

destruye

la

lista

liberando memoria

usada

void

destruir(Lista_Cmplx&

lst)

{Lista_Cmplx aux;while

(lst !=

NULL)

aux =

lst; lst =

lst->sig; delete

aux; }} }^ //namespace

m_lista_co

Ejemplo3: Utilización, por parte de un módulo de programa, del módulo biblioteca de lista

de números complejos en el fichero

uso_lista.cpp

// inclusion

del

tipo Lista y

sus operaciones

#include “m_lista_co.h”#include using

namespace std; using

namespace m_complejo; using

namespace m_lista_co; int main(){Complejo

a; Lista

lst; m_lista_co::crear(lst);cout

<< “Introduzca complejos

hasta

endl;

leer(a);while (!((a.real

&&^

(a.imag

meter(lst,a);leer(a);}while^

(!vacia(lst)) { sacar(lst,a);escribir(a);cout <<

endl;

}return 0;}

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Programación

Tema III. Diseño Modular

III.3. PROYECTOS EN DEV-C++. Dev-C++ utiliza el concepto de

proyecto

para agrupar todos los ficheros que componen los

diferentes módulos en los que se ha descompuesto la solución algorítmica a un determinadoproblema.Para crear un proyecto se utiliza la opción

Nuevo

Proyecto

del menú

Archivo

. De la

ventana obtenida, seleccionaremos la opción

Empty

Project

, tras lo que el sistema nos

pedirá el nombre del proyecto, que debe ser diferente al nombre de los ficheros que engloba.Una vez elegido el nombre, se nos preguntará el directorio de trabajo donde almacenaremostodos los ficheros relacionados con el proyecto.Una vez creado el proyecto, podemos pasar a crear los diferentes ficheros asociados a losmódulos que conforman nuestro programa, mediante la opción

Nuevo

Codigo

Fuente

del menú

Archivo

. A la pregunta de

¿Añadir

nuevo

archivo

al

proyecto?,

responder

yes

También es posible añadir al proyecto ficheros ya creados previamente. Para ello, elegiremosla opción

Añadir

a^

Proyecto

del menú

Proyecto

. Así mismo, podemos sacar un

fichero del proyecto mediante la opción

Quitar

de

Proyecto

del mismo menú.

No será necesario añadir al proyecto los ficheros relacionados con los módulos biblioteca delsistema, basta con incluirlos en los ficheros correspondientes tal como se ha explicadopreviamente.Para generar el ejecutable de nuestro programa seleccionaremos la opción

Reconstruir

Todo

del menú

Ejecutar

. Posteriormente para ejecutar nuestro programa elegiremos la

opción

Ejecutar

del mismo menú.