Logo Studenta

IaI-LGSM-Apuntes de Cátedra - Cap 3 - v1 0

¡Estudia con miles de materiales!

Vista previa del material en texto

Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 1 
Introducción 
Un mismo programa puede ser creado de muchas maneras distintas, dependiendo del estilo de cada 
programador. Sin lugar a duda, un buen programa no es solo aquel que tiene un número reducido 
de líneas de código, sino también una buena organización y suficientes comentarios descriptivos 
que expliquen qué es lo que está haciendo en cada parte del programa. Desde hace ya algunos años 
se han ido creando y perfeccionando diferentes técnicas de programación, con el objetivo de crear 
programas con un alto grado de organización, haciéndolos fáciles de leer y modificar. 
Esta técnica consiste en dividir un problema en distintos módulos con el fin de que cada uno realice 
una única actividad o tarea. De esta manera cada uno de los módulos se analizan, codifican y ponen 
a punto por separado de los demás módulos. Cada programa contiene un programa principal que 
controla todo lo que sucede; este transfiere el control a módulos de manera que ellos puedan 
ejecutar sus propios submódulos. Los submódulos son independientes en el sentido en que ninguno 
de ellos puede tener acceso directo a cualquier otro módulo o submódulo excepto el módulo que 
llama y sus propios submódulos. Permiten también hacer pequeñas porciones de código 
reutilizable, que pueden ser llamados desde el resto del programa sin necesidad de repetir esas 
partes de código cada vez que se necesiten. 
Breve reseña histórica de la evolución del Software 
En la siguiente figura se muestra 4 décadas de evolución del Software desde la década del 50 hasta 
el año 2.000 
 
 
En la primera era, la programación de computadoras era un "arte" para el que existían pocos 
métodos sistemáticos. El desarrollo del software se realizaba sin ninguna planificación, hasta que 
los planes comenzaron a complicarse y los costes a aumentar. Los programadores trataban de hacer 
las cosas lo mejor que se podía y con gran esfuerzo, resultaban con éxito. El software se diseñaba a 
medida para cada aplicación y tenía una distribución relativamente pequeña. 
La mayoría del software se desarrollaba y era utilizado por la misma persona u organización. La 
misma persona lo escribía, lo ejecutaba y, si fallaba, lo depuraba (corregía). Debido a este entorno 
personalizado del software, el diseño era un proceso implícito, realizado en la mente de alguien y la 
documentación normalmente no existía. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 2 
 
La segunda era en la evolución de los sistemas de computadora se extiende desde la mitad de la 
década de 1960 hasta finales de la de 1970. La multiprogramación y los sistemas multiusuario 
introdujeron nuevos conceptos de interacción hombre-máquina. Las técnicas interactivas abrieron 
un nuevo mundo de aplicaciones y nuevos niveles de sofisticación del hardware y del software. Los 
sistemas de tiempo real podían recoger, analizar y transformar datos de múltiples fuentes, 
controlando así los procesos y produciendo salidas en milisegundos en lugar de minutos. Los 
avances en los dispositivos de almacenamiento en línea condujeron a la primera generación de 
sistemas de gestión de bases de datos. 
La segunda era se caracterizó también por el establecimiento del software como producto y la 
llegada de las "empresas del software". Las empresas, el gobierno y la universidad se aprestaban a 
"desarrollar el mejor paquete de software" con el cual obtendrían grandes ganancias. 
 
Conforme crecía el número de sistemas informáticos, comenzaron a extenderse las bibliotecas de 
software de computadora. Las casas desarrollaban proyectos en los que se producían programas de 
decenas de miles de líneas de código. Todos esos programas tenían que ser corregidos cuando se 
detectaban fallos, modificados cuando cambiaban los requisitos de los usuarios o adaptados a 
nuevos dispositivos hardware que se hubieran adquirido. Estas actividades se llamaron 
colectivamente mantenimiento del software. 
La tercera era en la evolución de los sistemas de computadora comenzó a mediados de los años 
setenta y continuó más allá de una década. El sistema distribuido incrementó notablemente la 
complejidad de los sistemas informáticos. Las redes de área local y de área global, las 
comunicaciones digitales y la creciente demanda de acceso "instantáneo" a los datos, impusieron 
una fuerte presión sobre los desarrolladores del software. 
En conclusión, la tercera era se caracterizó por la llegada y amplio uso de los microprocesadores. 
El microprocesador produjo un extenso grupo de productos inteligentes, desde automóviles hasta 
hornos de microondas; desde robots industriales a equipos de diagnósticos médicos. 
 
En la cuarta era, computadoras personales controladas por sistemas operativos sofisticados, en 
redes globales y locales, acompañadas por aplicaciones de software avanzadas se convirtieron en 
lo más destacado. 
Finalmente, en la quinta era (2000-actualidad) aumentó la omnipresencia de la web, la reutilización 
de la información y de los componentes del software. 
Crisis del software 
La crisis del software es un término informático acuñado a principios de los años 70, en la primera 
conferencia organizada por la OTAN sobre desarrollo de software, de la cual nació formalmente la 
rama de la Ingeniería de Software. El término se adjudica a F. L. Bauer, aunque previamente había 
sido utilizado por Edsger Dijkstra. (1972) en “The Humble Programmer”. 
La crisis del software expresaba las dificultades para escribir programas frente al rápido crecimiento 
de la demanda, de la complejidad de los problemas a ser resueltos y de la inexistencia de técnicas 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 3 
establecidas para escribir programas libres de problemas (bugs), fácilmente comprensibles y 
pudieran ser verificables. 
La crisis se caracterizó por los siguientes problemas: 
• Complejidad de la forma de programar 
• Cambios a los que se ven afectados los programas 
• Ausencia de herramientas para estimar el esfuerzo 
• Funcionalidad incorrecta. 
• Desarrollo y mantenimiento inadecuados. 
• Insatisfacción de la demanda. 
• Imprecisión en la planificación del proyecto y estimación de los costos. 
• Baja calidad del software. 
• Dificultad de mantenimiento de programas con un diseño poco estructurado, difícil y 
costoso. 
• Insatisfacción de clientes y usuarios. 
Factores de influencia 
• Aumento del poder computacional. 
• Reducción del costo del hardware. 
• Rápida obsolescencia de hardware y software. 
Programación Modular 
Una de las grandes ventajas que tiene la programación estructurada es la división de problemas 
grandes en 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. 
La programación modular es un paradigma de la programación que consiste en dividir un 
programa en módulos o subprogramas con el fin de hacerlo más legible y manejable. 
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 driver o main), y los 
subproblemas (módulos) mediante subprogramas: procedimientos y funciones. 
 
La resolución de un problema comienza con una descomposición modular y luego nuevas 
descomposiciones de cada módulo en un proceso denominado refinamiento sucesivo. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 4 
Estatécnica permite dar más legibilidad y facilidad en la construcción y corrección de los errores 
que se presentan en la solución de un problema determinado. Cada una de las divisiones que se 
hacen para obtener la solución de un problema se denomina módulo y éstos son implementados 
por medio de los subprogramas. 
Por lo tanto, los subprogramas (sean funciones o procedimientos) permiten hacer pequeñas 
porciones de código reutilizable, que pueden ser llamados desde el resto del programa sin necesidad 
de repetir esas partes de código cada vez que se necesiten. 
Un subprograma es un algoritmo diseñado para efectuar una tarea particular, bajo la dependencia 
de un algoritmo u otro subprograma que lo utiliza. De esta manera, el subprograma se diseña para 
ser utilizado por otros procesos más amplios, dentro de los cuales existe una comunicación y flujo 
de recibo y entrega de información. 
La utilización de subprogramas en la solución de problemas grandes tiene muchas ventajas. Por 
ejemplo, para tareas que deban efectuarse más de una vez, la modularidad evita la necesidad de 
programación redundante, esencialmente tener que repetir el mismo conjunto de instrucciones; en 
vez de ello, un módulo puede construirse e invocarse cada vez que se necesite hacer la misma tarea, 
por lo tanto, el uso de módulos permite que los programas sean más cortos. De igual manera, la 
fragmentación en módulos individuales proporciona claridad, facilidad de distribución de trabajo en 
equipo y, por ser algoritmos cortos, son más fáciles de escribir, corregir y su estructura lógica es más 
clara que la de los programas que no están divididos en módulos. 
El subprograma, por ser un algoritmo, debe cumplir con las mismas características de éste y hacer 
tareas similares como aceptar datos, escribir datos y hacer cálculos; sin embargo, es utilizado para 
un propósito específico. El subprograma recibe datos del algoritmo o de otro subalgoritmo que lo 
invoca y éste le devuelve resultados. Su tarea puede compararse con la de un jefe que le da 
instrucciones a un empleado (subprograma), para que realice una determinada tarea y así poder 
continuar con su trabajo; se detiene mientras su subalterno realiza la tarea y cuando éste le 
devuelve los resultados reanuda su trabajo. Asimismo, cuando un algoritmo invoca un subprograma 
le cede el control de ejecución a éste, por lo tanto, detiene la ejecución de la próxima instrucción 
hasta que el subprograma se ejecute, le entregue resultados y le devuelva el control de ejecución. 
La comunicación que se establece entre el algoritmo llamante y el subprograma se hace a través 
de variables denominadas parámetros. 
Un subprograma puede ser invocado tantas veces como se necesite y, a su vez, los subprogramas 
también pueden invocar a otros subprogramas, como puede verse en la figura siguiente. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 5 
 
 
En el gráfico las flechas indican el flujo de ejecución del algoritmo; observe que cuando se ejecuta 
una instrucción de llamada a un subprograma, el algoritmo llamante se detiene, ya que no 
solamente le transfiere información al subprograma sino también el control de ejecución; esto hace 
que se active el subprograma, se les dé valor a las variables que lo conforman y se ejecuten una a 
una las instrucciones. Una vez que finaliza su ejecución, tiene la información requerida por el 
algoritmo llamante; por lo tanto, se la entrega y devuelve el control de ejecución a la instrucción 
siguiente o a la misma instrucción desde donde fue llamado, dependiendo de la clase de 
subprograma. 
En la figura también se muestra que un algoritmo puede invocar las veces que sea necesario al 
mismo subprograma y que un subprograma puede, a su vez, invocar a otros subalgoritmos. 
Cuando un algoritmo invoca a un subprograma es como si las instrucciones de éste se copiaran 
dentro del algoritmo y las ejecutara; en el caso del subprograma A, no tiene sentido tener el mismo 
grupo de instrucciones repetidas dentro del algoritmo; los subprogramas se diseñan para que sean 
usados en diferentes programas. 
Ventajas de la programación modular 
• Disminuye la complejidad del algoritmo. 
• Disminuye el tamaño total del programa. 
• Facilita la programación: Es más sencillo resolver varios problemas simples que uno 
complejo. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 6 
• Mayor claridad: Programación estructurada en bloques y código más compacto. 
• Ahorro de tiempo: Cada parte de la solución puede desarrollarse independientemente en 
paralelo. 
• Facilita la modificación/mantenimiento: comprobación individual de los módulos 
• Permite la reutilización del código: Empaquetado de funciones y procedimientos en o 
bibliotecas reutilizables. 
• Trabajo en equipo: división de la programación entre un equipo de programadores → 
reducción del tiempo de desarrollo. 
Los Módulos 
Un módulo es una rutina, subrutina, subprograma, subalgoritmo o subproceso que puede definirse 
dentro de un algoritmo u otro módulo superior con el fin de ejecutar una tarea específica y puede 
ser llamado o invocado desde el algoritmo principal o desde un módulo superior cuando sea 
necesario. 
Los módulos se clasifican en procedimientos y funciones. Los procedimientos y funciones son 
unidades de programas diseñados para ejecutar una tarea específica. Por ejemplo, los 
procedimientos predefinidos LEER y ESCRIBIR están diseñados para realizar operaciones de entrada 
y salida de datos de un programa. 
El proceso de descomposición de un problema en módulos se denomina modularización. Los 
procedimientos y funciones asisten a la programación modular. 
Funciones 
Desde el punto de vista matemático, una función es una expresión que toma uno o más valores 
llamados argumentos y produce un valor que se llama resultado. Este resultado es, además, único. 
Ejemplos de funciones matemáticas son los logaritmos, funciones trigonométricas (seno, coseno, 
etc.). 
El en ambiente de programación y diseño de algoritmos, las funciones tienen exactamente el mismo 
significado. Es decir, se realizan ciertos cálculos con una o más variables de entrada y se produce un 
único resultado. En programación y diseño de algoritmos, este resultado podrá ser un valor 
numérico, alfanumérico o lógico. Es decir, una función puede devolver un resultado que 
puede ser una cadena, un número o un valor de tipo lógico (verdadero o falso). Esto hace que, en 
los lenguajes de programación, se deba especificar de qué tipo es una función. Una función será de 
tipo numérica cuando devuelva un número y será de tipo alfanumérica o string (o char) cuando 
devuelva una cadena. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 7 
 
Formas de llamar o invocar funciones: 
En una asignación: 
p := factorial(5) ; 
En una operación escribir: 
 writeln(factorial(5)); 
En una expresión algebraica 
y := 1 / factorial(x) - 1 / factorial(z) ; 
En una condición 
 if (y > factorial(x)) then … 
 if (primo(x)) then … 
 
Procedimiento 
Se ha visto que las funciones se utilizan para devolver como resultado un valor, sin embargo, en 
ocasiones necesitaremos devolver más de un resultado o también ejecutar las mismas líneas de 
código varias veces en un algoritmo (como por ejemplo una ordenación, etc.) En estas situaciones 
la función no es apropiada y se utilizarán los procedimientos. 
Un procedimiento es un conjunto de sentencias o instrucciones que realizan una determinada tarea 
y que pueden ser ejecutados desde más de un punto del programa principal. Un procedimiento 
tiene una llamada, cuando el procedimientose ejecuta totalmente, vuelve al punto desde donde 
fue llamado y se ejecuta la siguiente instrucción. 
El procedimiento se escribe como cualquier otro algoritmo, solo existen diferencias en la parte 
inicial y final. Para nombrar los procedimientos se deben seguir las mismas reglas que para las 
variables. Notemos que el objetivo de los procedimientos es ayudar en la modularidad del programa 
y evitar la repetición de instrucciones ya que estas se pueden escribir en un procedimiento y en 
lugar de repetirlas, llamar al procedimiento cuantas veces sea necesario. 
Desde el programa principal es posible pasar valores (numéricos, alfanuméricos o combinación de 
ambos) al procedimiento. Este utilizará esos valores para realizar un determinado proceso. Los 
valores que se pasan a un procedimiento (en forma de variables) se llaman parámetros (de igual 
forma que en las funciones). 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 8 
 
Podemos utilizar procedimientos, por ejemplo, para dibujar recuadros en la pantalla, mostrar 
mensajes de error, realizar procesos en los que se debe devolver más de un resultado, colocar en 
un procedimiento las líneas de código que se repiten varias veces en un algoritmo. 
Formas de llamar o invocar procedimientos: 
Menu(OP) 
Intercambiar(A,B) 
LimpiarPantalla 
Procedimiento vs Función 
Las funciones, normalmente, devuelven un sólo valor a la unidad de programa (programa que invoca 
a la función) que las referencia. Los procedimientos pueden devolver cero, uno o varios valores. En 
el caso de no devolver ningún valor, realiza alguna tarea tal como alguna operación de entrada y/o 
salida. 
El procedimiento se declara igual que la función, pero su nombre NO está asociado a ninguno de 
los resultados que obtiene 
Una función se referencia utilizando su nombre en una expresión, mientras que un procedimiento 
se referencia por su llamada o invocación al mismo. 
Ámbito de las variables 
En programación existen dos tipos de variables, las llamadas locales y las variables globales. 
Variables Locales: Son aquellas que se encuentran dentro de un subprograma (procedimiento o 
función) y es distinta de las variables que están en el algoritmo principal. El valor se confina al 
subprograma en el que está declarada. 
Variables Globales: Son las que se definen o están declaradas en el algoritmo principal y tiene efecto 
tanto en el algoritmo principal como en cualquiera de sus subprogramas. 
Una variable local (de un subprograma) no tiene ningún significado en el algoritmo principal y otros 
subprogramas. Si un subprograma asigna un valor a una de sus variables locales, este valor no es 
accesible a otros subprogramas, es decir, no pueden utilizar este valor. Las variables globales tienen 
la ventaja de compartir información de diferentes subprogramas. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 9 
En resumen: las variables locales son las que se definen en subprogramas y solo tienen valor dentro 
de él. Las variables globales son las definidas en el algoritmo principal y tienen valor y se pueden 
utilizar en cualquier parte de algoritmo o en cualquier subprograma. 
Los parámetros 
Los parámetros permiten que el programa y los procedimientos y funciones puedan comunicarse 
entre sí intercambiando información. Si la ejecución de los subprogramas produce resultados 
necesarios en el punto de llamada, los parámetros pueden actuar como el medio de trasmisión de 
esos resultados. 
El número, orden y tipo de los parámetros o argumentos utilizados en la invocación a una Función 
o un Procedimiento deben coincidir con el número, orden y tipo de parámetros del 
encabezamiento del módulo. 
 
Clasificación de parámetros 
• Parámetros Formales: aparecen en la declaración de la subrutina. Ejemplo: f(x,y), x e y son 
los parámetros formales. 
• Parámetros Actuales: variables y expresiones que son pasadas a la subrutina en el 
momento de la invocación. Ejemplo: f(3,4), 3 y 4 son parámetros actuales. 
Pasaje de información entre argumento y parámetro 
Cada vez que un algoritmo llama a un subprograma, se establece una correspondencia automática 
entre los argumentos y los parámetros correspondientes. En el pasaje de estos parámetros se 
distinguen básicamente dos formas: pasaje por valor y pasaje por referencia. 
Pasaje de parámetros por valor: es la forma más simple de pasar los datos, donde los parámetros 
reciben como valores iniciales una copia de los valores de los argumentos y con estos valores se 
comienza a ejecutar el subprograma. Cada parámetro actual es asignado en el parámetro formal 
correspondiente cuando un subprograma es llamado. Debe ser tratado como una variable de la cual 
el módulo hace una copia y la utiliza localmente. 
 
 
 
 
Facultad de Ingeniería. Extensión Áulica Libertador General San Martín Capítulo 3. Programación Modular 
Introducción a la Informática E.A.L.G.S.M. Página 10 
Pasaje de parámetros por referencia: en lugar de pasar el valor del argumento como valor inicial 
para su respectivo parámetro, el pasaje de parámetros por referencia, también llamado por 
dirección, establece una conexión directa a través de su dirección de memoria. Cada parámetro 
formal es un alias del parámetro actual correspondiente, significa que el módulo recibe la dirección 
de memoria de una variable conocida en el punto de invocación. 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. 
Efectos Laterales 
La comunicación entre el programa principal (o módulos) con los demás módulos, debe realizarse a 
través de parámetros. Cualquier otra comunicación se conoce como efectos laterales. Si un 
procedimiento o función modifica una variable global (distinta de un parámetro actual), éste es un 
efecto lateral

Continuar navegando

Materiales relacionados

352 pag.
PYTHON_PROGRAMACION_V2_3_3

SENAC

User badge image

Santiiago Arboleda

261 pag.
Fundamentos_de_programacion_C_Java

Escola Santa Afra

User badge image

Jose Francisco Freire