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
mó
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