0% encontró este documento útil (0 votos)
75 vistas49 páginas

Programación Modular: Preparado Como Parte de Los Contenidos de La Asignatura Introducción A La Informática

Este documento describe conceptos clave de la programación modular, incluyendo dividir un problema complejo en subproblemas más pequeños, la importancia de la cohesión y acoplamiento de módulos, y el uso de parámetros, variables locales y globales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
75 vistas49 páginas

Programación Modular: Preparado Como Parte de Los Contenidos de La Asignatura Introducción A La Informática

Este documento describe conceptos clave de la programación modular, incluyendo dividir un problema complejo en subproblemas más pequeños, la importancia de la cohesión y acoplamiento de módulos, y el uso de parámetros, variables locales y globales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 49

UNIVERSIDAD MAYOR DE SAN ANDRÉS

CARRERA DE INFORMÁTICA

PROGRAMACIÓN MODULAR
Preparado como parte de los contenidos de la Asignatura
Introducción a la Informática.

M.SC. ALDO VALDEZ ALVARADO


La Paz - Bolivia
Índice
1 Concepto
2 Criterios de Modularidad
3 Ventajas y Desventajas
4 Funciones y Procedimientos
1 CONCEPTO
Se puede definir a la programación modular como aquella que usa
el concepto de dividir un problema complejo en subproblemas más
pequeños, hasta que estos sean fáciles de tratar y resolver por
separado. Así la solución de los subproblemas en conjunto dan
como resultado la solución del problema completo (López Román,
2003).
Aplicando este principio a la hora de hacer un programa, entonces
habría que dividir el programa en subprogramas que realicen
tareas específicas. Es importante considerar que para poner en
práctica la modularización, es necesario un mecanismo que
permita aplicarla en los lenguajes de programación; este
mecanismo existe prácticamente en todos los lenguajes y consiste
en la posibilidad de definir tareas específicas como módulos de
código independientes del programa principal. En consecuencia
estos módulos de código independientes del programa deben
poder invocarse desde el programa o módulo principal para que
empiecen a trabajar y deben acabar devolviendo el control al
programa o módulo principal cuando terminen de ejecutarse
La programación modular permite:
a) Dividir la complejidad de un problema convirtiendo problemas
complejos en un conjunto de problemas más simples y por
tanto más sencillos de implementar.
b) Reutilizar el código de un programa en cualquier momento de
la ejecución del mismo.
Diseño Descendente
Es una técnica que permite diseñar
la solución de un problema con base
en la modularización o
segmentación dándole un enfoque
de arriba hacia abajo (Top Down
Design). Esta solución permite dividir
el problema en módulos que se
estructuran e integran
jerárquicamente, como si fuera el
organigrama de una empresa (López
Román, 2003).
Módulo
Es un segmento, rutina, subrutina, subalgoritmo o procedimiento
que puede ser definido dentro de un algoritmo mayor con el
propósito de ejecutar una tarea específica, pudiendo ser llamado o
invocado desde el módulo principal cuando se requiera. Este
enfoque de segmentación o modularización es útil:
➢ Cuando existe un grupo de instrucciones o una tarea específica
que debe ejecutarse en más de una ocasión.
➢ Cuando un problema es complejo o extenso, entonces la
solución se divide o segmenta en módulos que ejecutan partes
o tareas específicas.
Dicha solución se organiza y divide en partes más pequeñas que
sean fácilmente manejables y que, lógicamente, puedan ser
separadas; así cada una de estas partes se dedica a ejecutar una
determinada tarea, lo que redundará en una mayor concentración,
entendimiento y capacidad de solución a la hora de diseñar la
lógica de cada una de estas. Las partes en las que se divide una
empresa (funcionalmente separadas) son el equivalente a los
módulos o segmentos del algoritmo, algunos de ellos son módulos
directivos o de control, que son los que se encargarán de distribuir
el trabajo a los demás módulos, de tal forma que se puede diseñar
una especie de organigrama que indique la estructura general de
un algoritmo (López Román, 2003).
Proceso de Modularización
El proceso de segmentación consiste en hacer una abstracción del
problema, del cual se tiene inicialmente el panorama general.
Enseguida se procede a descomponer o dividir el problema en
partes pequeñas y simples.
➢ Se forma un primer módulo enunciando el problema en
términos de la solución de éste.
➢ Se toma este módulo y se busca la forma de dividirlo en otros
módulos más pequeños, que ejecuten tareas o funciones
específicas. Normalmente serán las mismas funciones que se
desea que ejecute el algoritmo, lo que permite de una forma
simple definir los módulos, y de esta forma dividir el problema
en partes más manejables.
➢ Se repite el paso anterior para cada módulo nuevo definido,
hasta llegar a un nivel de detalle adecuado, es decir, hasta hacer
que cada módulo ejecute una tarea específica, claramente
definida y que el diseño y la codificación de la lógica del mismo
resulte fácil.
2 CRITERIOS DE MODULARIDAD
Cohesión y acoplamiento
Los módulos deben cumplir dos características básicas para ser
candidatos a una buena división del problema. Alta cohesión: las
instrucciones contenidas dentro de un módulo deben contribuir a
la ejecución de la misma tarea. Bajo acoplamiento: la dependencia
entre módulos debe ser mínima. Lo que implica que no debe haber
datos compartidos entre los módulos.
Por lo general se espera que cada módulo realice una sola tarea; es
decir, todos los componentes de un módulo (sentencias) deben ir
dirigidos a resolver un y sólo un problema.
A esta propiedad se le denomina cohesión y se dice que los
módulos deben ser cohesivos.
El objetivo en el diseño modular es conseguir módulos tan
cohesivos como sea posible. Muchas veces esto no es posible al
cien por ciento pero siempre debe pretenderse desarrollar
módulos con alta cohesión.
La cohesión tiene que ver con que cada módulo del sistema se
refiera a un único proceso o entidad. A mayor cohesión el módulo
en cuestión será más sencillo de diseñar, programar, probar y
mantener. En el diseño estructurado, se logra alta cohesión cuando
cada módulo (función o procedimiento) realiza una única tarea
trabajando sobre una sola estructura de datos.
Una prueba que se recomienda hacer a los módulos para ver si son
cohesivos es analizarlos y describirlos con una oración simple que
contenga un solo verbo activo. Si existe más de un verbo presente
en la descripción del procedimiento o función, se debía plantear
más de un módulo, y volver a hacer la prueba con los módulos
resultantes.
Otro aspecto que destaca al usar modularidad es el acoplamiento
que mide el grado de relación de un módulo con los demás. Con un
menor acoplamiento el módulo es más sencillo de diseñar,
programar, probar y mantener.
En el diseño estructurado, se logra bajo acoplamiento reduciendo
las interacciones entre procedimientos o funciones, reduciendo la
cantidad y complejidad de los parámetros y disminuyendo al
mínimo los parámetros por referencia.
Alcance de las variables
Cuando se consideran varios módulos y no un solo programa
principal, se pueden declarar variables tanto en el contexto global
del algoritmo, como de manera local en cada módulo a lo que se le
conoce como alcance de las variables, en otras palabras esto
permite identificar la zona del programa donde una variable es
accesible. Desde este punto de vista, las variables pueden ser de
dos tipos: locales o globales.
Variables globales.
Son las que son accesibles desde cualquier punto del programa y se
pueden usar desde cualquier módulo o subprograma, esto lleva a
considerar que la variable puede usarse en cualquier parte del
programa y su valor se puede alterar incontroladamente, y si
posteriormente es necesario usar la variable en otra parte del
programa con su valor original, se tendrá un error.
Variables locales.
Las variables locales sólo existen en un ámbito determinado del
programa, por ejemplo en un subprograma o en un bloque de
sentencias. Solo pueden ser utilizadas en el módulo donde fueron
definidas
Parámetros
Entre los módulos que componen la estructura completa de un
problema, se establece una serie de comunicaciones a través de
determinadas interfaces (llamadas a los módulos) que permiten el
paso de información de un módulo a otro así como la transferencia
del control de la ejecución del programa. Un método puede aceptar
información para usarla en su cuerpo de sentencias. Esta
información es suministrada en forma de literales, variables
pasadas al método a través de su cabecera y cada uno de estos
elementos de información se denomina parámetro.
De manera más formal se puede definir un parámetro como un
valor que se pasa al método cuando éste es invocado. La lista de
parámetros en la cabecera (al inicio) de un método especifica los
tipos de los valores que se pasan y los nombres por los cuales el
método se referirá a los parámetros en la definición del método.
➢ En la definición del método los nombres de los parámetros
aceptados se denominan parámetros formales.
➢ En las invocaciones al método desde algún punto del programa,
los valores que se pasan al método se denominan parámetros
actuales (reales).
Los parámetros actuales y los parámetros formales no necesitan
tener los mismos nombres, ya que se corresponden por tipo y
posición.
Cuando se invoca un método, los parámetros se colocan entre
paréntesis, si no se necesitan parámetros se usan paréntesis vacíos.
En relación con los parámetros, un aspecto importante, que es
necesario conocer en cualquier lenguaje, es como se realiza el paso
de los parámetros actuales a los formales, a lo que se le conoce
comúnmente como el problema del paso de parámetros. Hay dos
posibles formas por valor o por referencia.
Paso por valor
En este caso el método recibe una copia del valor que se le pasa. La
variable original (parámetro actual) no cambia de valor,
independientemente de que en el método se cambie el contenido
del parámetro formal.
Paso por referencia
En el paso por referencia no se pasa una copia del valor sino la
identificación de la zona de memoria donde se almacena dicho
valor. Por esta razón al trabajar dentro del módulo con la entidad
pasada por referencia se está manipulando el mismo valor que se
utiliza fuera. Para efectos prácticos si se realiza una modificación de
ese valor dentro del módulo, la modificación se mantiene al salir
del mismo y la diferencia con el paso por valor, es que el que el
módulo maneja una copia del valor original, y las modificaciones
realizadas dentro del método no afectan a la variable externa.
3 VENTAJAS Y DESVENTAJAS
Ventajas
❏ Un programa modular es más fácil de escribir y depurar
(ejecutar, probar y poner a punto). Se puede profundizar en las
pruebas parciales de cada módulo mucho más de lo que se hace
un programa mayor.
❏ Un programa modular es fácil de mantener y modificar.
❏ Un programa modular es fácil de controlar. El desglose de un
problema en módulos permite encomendar los módulos más
complejos a los programadores más experimentados y los más
sencillos a los programadores más noveles.
❏ Posibilita el uso repetitivo de las rutinas en el mismo o en
diferentes programas.
❏ Al aplicar la programación modular, un problema complejo debe
ser dividido en varios subproblemas más simples, y estos a su
vez en otros subproblemas más simples.
Desventajas
❏ No se dispone de algoritmos formales de modularidad, por lo
que a veces los programadores no tienen claras las ideas de los
módulos.
❏ La programación modular requiere más memoria y tiempo de
ejecución.
4 FUNCIONES Y PROCEDIMIENTOS
Uno de los métodos fundamentales para resolver un problema es
dividirlo en problemas más pequeños, llamados subproblemas.
Estos problemas pueden a su vez dividirse repetidamente en
problemas más pequeños hasta que los problemas sean de fácil
solución. Divide y vencerás. Cada subproblema es deseable que sea
independiente de los demás y se denomina módulo. El problema
original se resuelve con un programa principal, llamado también
main, y los subproblemas o módulos mediante subprogramas:
procedimientos y funciones.
Funciones
Un subalgoritmo función es un subalgoritmo que recibiendo o no
datos devuelve un único resultado. Tienen su origen ligado al
concepto matemático de función de una o más variables. Ejemplo
de este tipo de subalgoritmos son las llamadas funciones internas
(sin, cos, abs). Las cuales pueden usarse en expresiones
algorítmicas como si se tratara de variables.
Las funciones pueden tener uno o más parámetros formales
(datos) pero siempre devuelven un único resultado. Las funciones
son evaluadas utilizando parámetros actuales o reales, es decir los
valores con los que se quiere evaluar la función.
Un subalgoritmo función es un subalgoritmo que recibiendo o no
datos devuelve un único resultado. Tienen su origen ligado al
concepto matemático de función de una o más variables. Ejemplo
de este tipo de subalgoritmos son las llamadas funciones internas
(sin, cos, abs). Las cuales pueden usarse en expresiones
algorítmicas como si se tratara de variables.
Las funciones pueden tener uno o más parámetros formales
(datos) pero siempre devuelven un único resultado. Las funciones
son evaluadas utilizando parámetros actuales o reales, es decir los
valores con los que se quiere evaluar la función.
Una función es un objeto del ambiente, con nombre, tipo y valor
único. El tipo se asocia al valor que retorna la función cuando es
evaluada para un conjunto dado de valores de sus argumentos.
Función nombre (lista de parámetros formales): Tipo de resultado
Declaración de variables
Inicio
Acciones Devolver (constante, variable o expresión)
Fin función
Lista de parámetros formales: contiene las variables que pasan
alguna información necesaria para que la función ejecute el
conjunto de acciones.
Tipo de resultado: señala el tipo de dato que devuelve la función.
Declaración de variables: en este lugar se deben declarar los
parámetros formales y también aquellas variables que se usarán en
la función.
Cuerpo de la función: lo constituye el conjunto de acciones a
realizar por la función.
Retornar el resultado: el único resultado que devuelve la función
puede ser un valor constante, o una variable o una expresión válida,
la cual debe colocarse entre paréntesis al lado de la acción
Devolver. Cuando se ejecuta esta acción se devuelve el control del
programa al lugar donde se ha llamado a la función.

Las funciones se llaman como parte de una expresión o instrucción


dentro de un programa o de otra función o procedimiento.

facto <- factorial (num)


Procedimientos
Un procedimiento o subrutina es un subalgoritmo que recibiendo o
no datos permite devolver varios resultados, un resultado o
ninguno.
Un procedimiento está compuesto por un grupo de sentencias a las
que asigna un nombre (identificador o simplemente nombre del
procedimiento) y constituye una unidad de programa.
La tarea asignada al procedimiento se ejecutará siempre que se
encuentre el identificador (nombre del procedimiento) en el
conjunto de sentencias que definen el programa.
La declaración de un procedimiento no indica a la computadora que
ejecute las instrucciones dadas, sino que indica a la computadora
cuáles son estas instrucciones y dónde están localizadas cuando
sea necesario.
Forma 1
Subrutina nombre()
Declaración de variables
Inicio
Acciones
Fin subrutina
Forma 2
Subrutina nombre (lista de parámetros formales)
Declaración de variables
Inicio
Acciones
Fin subrutina
Nombre: identificador válido
Lista de parámetros formales: parámetros formales del
procedimiento; sirven para pasar información al procedimiento y/o
devolver información del procedimiento a la unidad de programa
que le invoca. Están separados por comas, y precedidos por las
letras E (entrada), S (Salida) o E/S (Entrada/Salida).
Los procedimientos se llaman dentro de un programa o de otro
procedimiento directamente por su nombre, de acuerdo a los
formatos 1 o 2.
Formato 1
procedimiento
nombre
Formato 2
nombre (lista de parámetros formales)

La sentencia nombre indica la ejecución del procedimiento cuyo


identificador coincide con nombre. Después que ha terminado la
ejecución, se ejecuta la sentencia que sigue a la llamada al
procedimiento.
5 EJEMPLOS
Ejemplo 1. Utilizar funciones para hallar el factorial de un número.
Ejemplo 1. Utilizar funciones para hallar el factorial de un número.
Funcion f <- factorial ( num )
f <- 1
Para i<-1 Hasta num Con Paso 1 Hacer
f <- f * i
Fin Para
Fin Funcion

Algoritmo funciones1
Repetir
Leer n
Hasta Que n > 0
Escribir "El factorial del número ", n, " es: ",factorial(n)
FinAlgoritmo
Ejemplo 1. Utilizar funciones para hallar el factorial de un número.
Ejemplo 2. Utilizar procedimientos para hallar la potencia de un
número dado elevado a otro.
Ejemplo 2. Utilizar procedimientos para hallar la potencia de un
número dado elevado a otro.
Funcion potencia
Leer a, b
p <- 1
Para i<-1 Hasta b Con Paso 1 Hacer
p <- p * a
Fin Para
Escribir "La potencia de ", a, " elevado a la ", b, " es: ", p
Fin Funcion

Algoritmo procedimiento1
potencia
FinAlgoritmo
Ejemplo 2. Utilizar procedimientos para hallar la potencia de un
número dado elevado a otro.
Ejemplo 2. Utilizar procedimientos para hallar la potencia de un
número dado elevado a otro. (Otra forma)

Funcion potencia( a, b )
p <- 1
Para i<-1 Hasta b Con Paso 1 Hacer
p <- p * a
Fin Para
Escribir "El número a: ", a, " elevado a b: ", b, " es: ", p
Fin Funcion

Algoritmo potencia2
Leer v1, v2
potencia(v1,v2)
FinAlgoritmo
Ejemplo 2. Utilizar procedimientos para hallar la potencia de un
número dado elevado a otro. (Otra forma)
Ejemplo 3. Mostrar todos los elementos de un lote que sean
primos, usar funciones o procedimientos.
Funcion sw <- primo ( n )
cdiv <- 0
Para i<-1 Hasta n Con Paso 1 Hacer
Si n mod i = 0 Entonces
cdiv <- cdiv + 1
Fin Si
Fin Para
Si cdiv = 2 Entonces
sw <- Verdadero
SiNo
sw <- Falso
Fin Si
Fin Funcion

Algoritmo funcion2
Leer num
Para i<-1 Hasta num Con Paso 1 Hacer
Leer elem
si primo(elem)
Escribir elem
FinSi
Fin Para
FinAlgoritmo
https://www.linkedin.com/in/msc-aldo-valdez-alvarado-17464820/

https://aldovaldezalvarado.blogspot.com/

https://www.facebook.com/aldoramiro.valdezalvarado

M.Sc. Aldo Ramiro Valdez Alvarado

Licenciado en Informática
Máster en Dirección Estratégica en Tecnologías de la Información
Máster en Business Intelligence y Big Data
Docente Investigador de la Carrera de Informática de la UMSA
Docente de Postgrado en la UMSA y otras Universidades
Conferencista Nacional e Internacional

También podría gustarte