Introducción
La optimización de programas computacionales, surge con la capacidad de hacer eficiente cada uno de sus procesos y como unidad, aprovechar al máximo los recursos hardware con los cuales se cuenta en su ejecución.
Con la revisión de esta unidad, se espera introducir al lector en el concepto de manejo de memoria estática y la programación modular como una alternativa de eficiencia y efectividad operativa del código en una plataforma tecnológica.
Objetivos
Objetivo general
Optimizar el proceso de construcción de programas haciendo uso de funciones para intercambiar datos entre ellas y verificar el ámbito de las variables.
Objetivos específicos
- Dominar conceptualmente la programación modular.
- Optimizar programas computacionales a través de funciones que faciliten su modularidad.
Arreglos
Con el ánimo de optimizar procesos y código, la mayoría de lenguajes de programación cuentan con un tipo de estructura de datos estáticos llamada arreglos (Array), organizados de forma consecutiva. Para acceder a un elemento del arreglo, se hace uso del nombre del arreglo seguido de uno o más subíndices encerrados entre corchetes.
Los tipos de arreglos están clasificados en:
- Unidimensionales (vectores): una estructura de datos estática que posee un conjunto finito y ordenado de elementos (todos del mismo tipo), que se encuentran organizados de forma consecutiva en la memoria principal del computador. Los arreglos unidimensionales corresponden al tipo más simple, ya que posee una sola dimensión y para acceder a un determinado elemento, se hace a través de un solo índice o subíndice.
-
En varias dimensiones (matrices): en ocasiones, no es suficiente hacer uso de vectores para el almacenamiento de datos, ya que se hace necesario almacenar un grupo de datos en forma de tabla o matriz que requieren para su identificación el uso de dos o más subíndices que determinan su dimensión.
Se clasifican en:
- Bidimensionales: se pueden interpretar como la organización de varios vectores que se caracterizan por ser del mismo tipo dimensión y precisión. En un arreglo bidimensional a diferencia del unidimensional (vector), se hace uso de dos índices que se utilizan para identificar un elemento dentro de la matriz, un índice señala la fila y el otro señala la columna.
- Multidimensionales: son aquellos que tienen más de una dimensión y como consecuencia, más de un subíndice.
Almacenamiento de datos en arreglos
El almacenamiento de datos en arreglos es el proceso que consiste en asignar en cada posición de un arreglo (unidimensional o bidimensional) un determinado tipo de dato (entero, real, cadena, etc).
Existen tres formas básicas para almacenar datos en un arreglo: mediante lectura, ciclos o asignación directa.
El procedimiento para almacenar datos en una matriz se desarrolla de igual manera, teniendo en cuenta que para ubicar un elemento dentro de la matriz, se debe hacer uso de dos subíndices: el primero indica la fila y el segundo la columna.
La recuperación o lectura de datos en un arreglo es la característica que permite hacer uso de los datos que han sido asignados en cada posición de memoria.
Funciones (declaración y llamado)
Las funciones son unidades de programa o módulos que se diseñan para ejecutar una tarea específica permitiendo reducir repeticiones de código y hacer más fácil la programación al dividir un proyecto grande en módulos más pequeños y manejables que se codifican, depuran y prueban de manera independiente a las otras unidades que hacen parte del programa, y que una vez creados pueden ser reutilizados n números de veces dentro del programa.
Por ejemplo, si en un programa se necesita imprimir en pantalla 5 arreglos unidimensionales, es posible crear y llamar una función que haga el mismo procedimiento 5 veces (y más), escribiendo una sola vez el código de imprimir.
Si las funciones se agrupan en bibliotecas, estas pueden ser utilizadas por otros programas, permitiendo ahorrar tiempo en su desarrollo. Revise a continuación la sintaxis de una funcióny los tipos de datos.
Para que una función pueda ser invocada desde cualquier parte del programa, debe ser inicialmente declarada conservando la misma cabecera de la función y finalizando la instrucción con punto y coma(;). Adicionalmente, para poder hacer uso de una función, esta debe ser llamada o invocada a través de cualquier expresión dentro del programa (generalmente el principal o también desde otra función).
Programación modular
La programación modular es el proceso que consiste en dividir en varios módulos un mismo programa donde cada módulo cumple con una función específica. Esta subdivisión se realiza de manera sucesiva hasta que un módulo tenga solamente una terea que ejecutar. Dicha tarea puede ser: Recibir datos, ejecutar procesos con los datos, control a otros módulos o la combinación de éstos.
Según Joyanes, cada programa tiene un módulo denominado programa principal que controla todo lo que sucede; se transfiere el control a los submódulos (posteriormente se denominará subrpogramas), de modo que ellos puedan ejecutar sus funciones; sin embargo, cada submódulo devuelve el control al módulo principal cuando se haya completado su tarea. Un módulo puede transferir temporalmente (bifurcación) el control a otro módulo; sin embargo, cada módulo debe devolver el control al módulo del cual se recibe originalmente el control 1.
1 Joyanes, L. (1996). Fundamentos de programación, algoritmos y estructura de datos. España: Editorial McGraw Hill.
Ámbito de variables (locales y globales)
La modularización hace que un gran problema se subdivida en partes mas pequeñas (módulos), y conlleva a la definición de variables en diferentes sitios del algoritmo.
Las variables se pueden definir dentro de los módulos (procedimientos o funciones) y fuera de ellos, teniendo en cuenta que estas primero deben haber sido declaradas o creadas antes de ser usadas. Las que son creadas dentro de los módulos se denominan variables locales y las que se hacen fuera de ellos, que generalmente se declaran al inicio del programa y pueden ser usadas por cualquier función para leer o escribir en ella se denominan variables globales. En consecuencia, se define el ámbito de las variables como de ámbito local o de ámbito global.
Paso de parámetros por valor y por referencia
Cuando un programa llama a un subprograma (función o procedimiento), la información se trasmite a través de la lista de parámetros que se deben corresponder entre los parámetros formales del procedimiento o función y los parámetros reales. Generalmente los lenguajes de programación poseen dos métodos para pasar parámetros entre funciones:
-
Parámetros por valor: los parámetros que llegan a la función cuando es invocada, son una copia del valor original que puede cambiar al interior de la función, sin que estos cambios tengan efectos fuera de ella, haciendo que el valor original permanezca intacto.
Algunas consideraciones:
- En la llamada por valor no se devuelve información al programa que hace el llamado a la función.
- No se hace diferencia entre un parámetro que es variable, constante o expresión, ya que sólo interesa el valor del argumento.
- Parámetros por referencia: se usan cuando una función debe modificar el valor del parámetro pasado y devolver éste valor modificado a la función llamadora1. Esto significa que cuando se pasa el argumento a la función, esta recibe la dirección de memoria del valor original (no la copia del valor) y si esta modifica el parámetro, el valor original almacenado en la posición de memoria también cambia. La llamada por referencia es muy útil para programas donde se necesita la comunicación del valor en ambas direcciones.
1 Joyanes, L. (2000). Programación en algoritmos, estructuras de datos y objetos. Madrid: Mc Graw Hill.
Resumen
El desarrollo eficiente en la construcción de algoritmos exige la aplicación de una serie de técnicas que de manera sumativa conducen a la creación de soluciones eficientes, tanto en respuesta a la solución del problema, como al manejo mismo del hardware (computador) donde se aplica.
En la programación de computadores es fundamental tener claridad respecto a los componentes teóricos y prácticos de los procesos y procedimientos que mejoran el desarrollo de una aplicación; así como el efecto e impacto que causan sobre una plataforma computacional.
Bibliografía ()
- Aguilar, L. (1996) Fundamentos de programación, segunda edición. España: Editorial McGrawHill.
- Becerra Santamaria, C. (1998) Algoritmos: conceptos básicos, cuarta edición. Bogotá: Kimpres Ltda.
- Deitel, H. (2003) Cómo programar en C++, cuarta edición. México: Pearson Education. Joyanes.
- Joyanes Aguilar, L. (2000) Programación en algoritmos, estructuras de datos y objetos. Madrid: McGraw Hill.
- Pimiento Cárdenas, W. (2009) Fundamentos de lógica para programación de computadores. Bogotá: Editorial Universidad Piloto de Colombia.





