Está en la página 1de 36

1 Concepto de Modularización

2 Procedimientos y Funciones

TEMAS
de la
3 Comunicación entre módulos
CLASE

4 Ejercitación
1 Concepto de Modularización
Etapas de resolución de un problema por computadora

Problema del
Mundo Real

Análisis
Complejos
Modelo
Extensos Diseño
Modificables
Solución Implementación
Modularizada

Verificación
Metodología de diseño Top Down

Principio de “Divide y vencerás”

Descomponer el problema en partes (subproblemas) mas


simples

¿Cuándo se detiene la descomposición del problema?


Problema del
autoservicio

Recepción
del Salida del Generación Generar listado
producto producto Informe de ofertas

Actualizar Actualizar Comparar Comparar


Recibir Recibir Agregar producto y stock actual
Stock Stock stock actual
producto y Producto y cantidad al y stock Agregar producto
Actual Actual y stock
cantidad cantidad proveedor máximo de ordenado por rubro
(Sumar) (Restar) minimo de
cada correspondiente cada
producto producto

Determinar
Actualizar lista
proveedor
del proveedor
del
correspondiente
Producto

Permite distribuir el trabajo Ventajas de la


descomposición del Favorece el mantenimiento
problema correctivo

Facilita la reutilización dentro del


mismo problema o en otro similar Aumenta la legibilidad
Facilita el crecimiento de los
sistemas
Avanzamos a la etapa de Implementación

Problema del
Mundo Real

Análisis

Modelo Diseño

Implementación
Solución
Modularizada
Módulos
Datos propios
s c r i bir
Datos compartidos o e
¿Cóm grama y
o
el Pr dulos?
ó
los m
En la etapa de implementación…
▪ Se debe elegir el lenguaje de programación para escribir los algoritmos de cada módulo y la declaración de sus datos

▪ Los lenguajes de programación ofrecen diversas opciones para implementar la modularización.

¿Qué tipos de módulos ofrece Pascal?

PROCEDIMIENTOS FUNCIONES
(PROCEDURE) (FUNCTION)

Tienen características comunes, pero ciertas particularidades determinan cual es el mas adecuado para implementar
un módulo particular

▪ ¿El módulo devuelve datos?

▪ ¿Cuántos datos devuelve?

▪ ¿De qué tipo son los datos que devuelve?

▪¿Qué tipo de acciones ejecuta el módulo?


UR E ? T I O N ?
¿P ROCED ¿ F U NC

¿Cuáles son los aspectos que los diferencian?

▪ Encabezamiento del módulo

▪ Invocación

▪Lugar donde retorna el flujo de control


una vez ejecutado el módulo
PROCEDURE

Conjunto de instrucciones que realiza una tarea específica y como resultado puede retornar
0, 1 o más valores.

¿Cómo se define el módulo?

Encabezamiento
Declaración de tipos internos
del módulo (opcional)

Declaración de variables
internas del módulo(opcional)

Sección de instrucciones
PROCEDURE

Conjunto de instrucciones que realiza una tarea específica y como resultado puede retornar
0, 1 o más valores.

Program uno;
………

procedure Calculo (Parámetros Formales);


Type
….
Var
……
Begin
¿Cómo se invoca el módulo? ……
…..

End;

Begin
……
Calculo (parámetros actuales);
……
End.
PROCEDURE

Conjunto de instrucciones que realiza una tarea específica y como resultado puede retornar
0, 1 o más valores.

Luego de ejecutado el módulo ¿Qué instrucción se ejecuta?

Program uno;
………
¿Qué ocurre
con el flujo de
procedure Calculo (Parámetros Formales);
control del
Type
programa?
….
Var
……
Begin

Luego de ejecutado el módulo, el ……


flujo de control retorna a la …..
instrucción siguiente a la invocación End;
del módulo
Begin
……
Calculo (parámetros actuales);
……
End.
PROCEDURE
Puede ocurrir que un módulo Procedure contenga además, de la declaración de tipos y variables propias,
la definición de otros módulos. Se dice que el procedimiento contiene módulos anidados. Por ejemplo:
FUNCTION
Conjunto de instrucciones que realiza una tarea específica y como resultado retorna un
único valor de tipo simple.

¿Cómo se define el módulo?

Encabezamiento

Declaración de tipos
(opcional)
Declaración de variables
(opcional)

Sección de instrucciones
Asignación
(obligatoria)
FUNCTION
Conjunto de instrucciones que realiza una tarea específica y como resultado retorna un
único valor de tipo simple.

¿Cómo se invoca el módulo? Program otro;

Function cubo(Parámetros Formales):integer;


Type
….
Var
……
Begin
……
…..

¿Qué ocurre con el End;


flujo de control del
programa? Var a: integer;

Begin
…..
…..
write (cubo (parametro actual));
….
a:= cubo (4);
Luego de ejecutado el módulo, el flujo de ….
control retorna a la misma instrucción de if (cubo (parametro actual) > 100) then ….;
invocación del módulo
….
while (cubo (parametro actual) > 50) do
….
….
End.
Esquema general de un programa que utiliza módulos
tes
ns tan
program uno; co
de
ión
la rac
Const Dec s
a de t ipo
{Declaración de constantes del programa} Zon de
ión
rac s
e cla dida
de D e
acc dulos
a
Type Zon e s
abl los m
ó
a r i
{Declaración de tipos definidos} e v ama y
d r
a c ión prog
ar el
D ecl ión d
Var a de secc
n
Zo de la
{variables} des du l os

l os
e
i ó n d s
Procedure Calculo (parámetros formales);
l a rac ed ida
…… e D
ec acc
d le s
Function EsPar (parámetros formales): Boolean; Zona ar iab ma
v ra
... de prog
ó n l
a raci ón de
l i
Dec secc
d e l a
Var a de
Zon o des
{variables} es
sol u t abl
c
s eje
ne
Begin {Sección del programa principal} u c cio
r
I nst
e
a d
…… Zon
End.
3 Comunicación entre módulos
Variables globales

Parámetros
Analicemos el alcance de Variables…
Program dos;
Variable
Var
s
a, b: integer; globales
Parámetr
procedure calculo(parámetros formales); os
var Variables
x: integer; Var b:integer;
Locales del ¿Dónde se pueden utilizar
Begin módulo a y b?
x:= 9; a:= 100; b:=0;
¿Dónde se puede utilizar
write (x);
x?
End;
Variable ¿Dónde se puede utilizar
Var Local del h?
h: char;
Begin program ¿Qué pasa si dentro de
a calculo se
a:= 80;
b:= a * 2; declara b: integer?
h:= ‘A’; ¿Qué pasa si dentro de
calculo(parámetros actuales); calculo se
End. declara b: char?
Variables globales, locales y parámetros

Analicemos el alcance de variables en el siguiente ejemplo…


program ejemplo; Supongamos que identificamos:
var a, b: integer;
variables locales del módulo
procedure uno(parámetros formales);
variables “globales”
var c: char;
begin
b := a * 2;
c:= 'A'; x Programa a
writeln(a, b, c); y ejemplo b
a:= tres (parámetros actuales);
end;

Procedure Function
Function tres (parámetros formales): tipo; c i
uno tres
var i: integer;
begin
Alcance i:= a+b;
uno (parámetros actuales);
de los tres:= (c+i)/100;
Teniendo en cuenta el alcance de las variables
end;
datos y la visibilidad de los módulos, analizar:

Var x, y: integer; ¿Qué invocaciones son válidas?


begin
x:= 5; y:= 20 mod 10; ¿Es correcta la utilización de las variables en el
uno (parámetros actuales); programa principal?
a:= tres (parámetros actuales);
writeln(x, y);
writeln(a, b); ¿Y en el procedure uno?
end.
¿Y en la function tres?
program otroejemplo; Supongamos que identificamos:
var a, b: integer;
variables locales del módulo
procedure cuatro (parámetros formales);
var c: char; variables “globales”
procedure cinco (parámetros
formales);
var d: real;
x Programa a
begin
y otroejemplo b
b := a * 2 + 4; d:= 2,5;
writeln(a, b, c, d);
end;
var h: integer;
begin Procedure Function
h c
b := a * 2; cuatro seis
cinco (parámetros actuales);
c:= 'A';
Alcance writeln(a, b, c, h);
h:= seis (parámetros actuales); Procedure
de los end;
d
cinco

datos
Function seis (parámetros formales): tipo;
begin Teniendo en cuenta el alcance de las variables
a:= a+b; y la visibilidad de los módulos, analizar:
seis:= (a+c)/100;
end; ¿Qué invocaciones son válidas?

Var x, y: integer; ¿Es correcta la utilización de las variables en el


begin programa principal?
x:= 5; y:= 20 mod 10;
cuatro (parámetros actuales);
cinco (parámetros actuales); ¿Y en el procedure cuatro?
a:= seis (parámetros actuales);
writeln(x, y); ¿Y en el procedure cinco?
writeln(a, b);
end. ¿Y en la function seis?
Program dos;
Var Variables Datos propios
a, b: integer; globales

procedure calculo;
var x: integer; Variable
Begin
Local del Variables locales
módulo
x:= 9; a:= 100; (al módulo y al
write (x); programa)
End;

procedure mostrar; Variable


var y: char; Local del
Begin módulo
Alcance de y:= ‘P’;
a:= a+10;
los datos write (a);
write (b);
End;

Var Datos compartidos


h: char; Variable Local del
Begin programa
a:= 80;
b:= a * 2; ¿Variables globales?
h:= ‘A’;
calculo;
mostrar;
write (a);
End.
▪ Posibilidad de perder integridad de los datos, al modificar involuntariamente
en un módulo alguna variable que luego deberá utilizar otro módulo.
¿Independencia? ¿Reusabilidad?

▪ Dificultad durante la etapa de la verificación


Desventajas
de la
comunicación
▪ Demasiadas variables en la sección de declaración
a través de
variables
▪ Posibilidad de conflicto entre los nombres de las variables utilizadas por
diferentes programadores
globales

▪ Falta de especificación del tipo de comunicación entre los módulos

▪ Uso de memoria

No se recomienda el uso de variables globales


Se recomienda una solución que combina:

OCULTAMIENTO DE DATOS Y PARAMETROS

▪ El ocultamiento de datos significa ▪ El uso de parámetros significa


que los datos exclusivos de un que los datos compartidos se
módulo o programa NO deben ser deben especificar como
"visibles" o utilizables por los demás parámetros que se trasmiten
módulos. entre módulos.
el
cales d Variab
l
sl
able
o progr es locales
Vari lo ama del
u
mód

Los datos propios Los datos propios Los datos compartidos se


del módulo se del programa se declararán como
declararan locales al declararan locales al parámetros.
módulo programa

No nos sirven para la comunicación!!


El parámetro se define como una variable que representa un dato
compartido entre módulos o entre un módulo y el programa
principal.

Por lo tanto, el dato compartido se especificará como un parámetro


que se trasmite entre los módulos.

Del curso de Ingreso se sabe que el dato compartido puede ser un


Parámetros dato de entrada al módulo, un dato de salida del módulo o bien un
dato de entrada y salida del módulo .

¿Cómo se implementan los parámetros en Pascal?


PARAMETROS

POR VALOR POR REFERENCIA


Parámetros
datos de entrada al datos de salida
en Pascal módulo
datos de entrada y
salida del módulo
Un parámetro por valor es un dato de entrada que significa que el módulo recibe una
copia de un valor proveniente de otro módulo o del programa principal.

Con este dato el módulo puede realizar operaciones y/o cálculos, pero fuera del
módulo ese dato NO reflejará cambios.

Program ejemplo1;

Procedure uno (x:integer); uno


Parámetro Begin
X=10
X=9
x:= x+1;
por valor write (x);
End;
ejemplo1
var num: integer;
num=9
Begin
num:=9;
uno (num);
write (num);
End.
¿Qué
valores
imprime?
Un parámetro por referencia es un dato de salida o entrada/salida que contiene la
dirección de memoria donde se encuentra la información compartida con otro módulo
o programa que lo invoca.

El módulo que recibe este parámetro puede operar con la información que se
encuentra en la dirección de memoria compartida y las modificaciones que se
produzcan se reflejarán en los demás módulos que conocen esa dirección de
memoria compartida.

Parámetro Program ejemplo2; dos


Procedure dos (var x:integer);
por Begin x->dir (num)
referencia x:= x+1;
write (x); Ejemplo2
End;
num=9
num=10
var num: integer;
Begin
num:=9;
dos (num);
write (num);
End.
¿Qué
valores
imprime?
Program ejemplo1; Program ejemplo2;

Procedure uno (x:integer); Procedure dos (var x:integer);


Begin Begin
x:= x+1; x:= x+1;
write (x); {1} write (x); {3}
End; End;

var num: integer; var num: integer;

Begin Begin
num:=9; num:=9;
uno (num); dos (num);
write (num); {2} write (num); {4}
End. End.

En {1} se muestra 10 como valor de x En {3} se muestra 10 como valor de x

En {2} se muestra 9 como valor de x En {4} se muestra 10 como valor de x

¿Cómo se explican los valores que se imprimen?


Consideraciones…

Un parámetro por valor debe ser tratado como una variable local del
módulo.

La utilización de este tipo de parámetros puede significar una


utilización importante de memoria.

Los parámetros por referencia en cambio operan directamente sobre


la dirección de la variable original, en el contexto del módulo que
llama.

Esto significa que no requiere memoria local.


Variables globales Parámetros
▪ Posibilidad de perder integridad de los
datos, al modificar involuntariamente en un
módulo alguna variable que luego deberá
utilizar otro módulo Los módulos no pueden afectar
▪ Posibilidad de conflicto entre los nombres de involuntariamente los datos de otros módulos.
las variables utilizadas por diferentes ¡Independencia! ¡Reusabilidad!
programadores
▪ Dificultad durante la etapa de la verificación

Variables
▪ Demasiadas variables en la sección de Se reduce significativamente la cantidad de
globales declaración variables globales

vs
Parámetros ▪ Falta de especificación del tipo de
comunicación entre los módulos Permite distinguir el tipo de comunicación

Los parámetros por referencia no utilizan


▪ Uso de memoria memoria local

El uso de parámetros por valor puede


significar una importante utilización de
memoria local
COMUNICACIÓN DE DATOS ENTRE MODULOS Y
PROGRAMA

En resumen

abl es
d
men
eco Por valor
N o r
la !!
para nicación
u Por referencia
com
Cuando se invoca a un módulo se deben tener cuenta
las restricciones propias del lenguaje de
implementación. En Pascal:

▪ La invocación al módulo (parámetros actuales)

▪ La interface del módulo (parámetros formales)

▪ Los parámetros actuales y formales

Program ejemplo3;
Procedure Calcular (x, y: integer;
var suma, prod: integer);
begin
Deben coincidir en cantidad y tipo de dato. suma:= x + y;
Consideraciones Se relacionan 1 a 1 prod:= x * y;
generales end;

Var val1, val2, s, p: integer;


Begin

Calcular (6, 17, s, p);

val1:= 10; val2:= 5;


Calcular (val1, val2, s, p);

Calcular (23, val2, 14, p);


End.
c ó m o se
¿
emos ables
?
Analic s v a r i
o d i fi can la
m
?
e i m prime
s
¿Qué

Ejercitación

icializada
lo ca l x no está in
bl e
r v a r q ue la varia
Obs e
Observar la
declaración
de la
variable loc
al c
Ejercitación ejemplo5 cuenta
calculo
24 b
a 5 b

b 2
ime en
a
r10
¿Qué imp cia
a
ten
cada sen
c 0
c ???
10
write?
a=5 a = 10
a = 24
b=2 b = 24
b = 10
c = ?? c=0

a = 24
b=2
c = 10
Ejercitación p rime en
¿Qu é i m
tencia
cada sen
write?
queimprime valores

c cant
???
0
¿Qué valores n aux
???
se imprimen? num 10
num1 ???
50 ???

num1 ???
a 25
???

a = ??? num = 10
c = ??? num1= ???
n = ??? aux= 25
num1= 50 cant= 0

a = 25
c=0
n = ???
num1= 50

También podría gustarte