Unidad 3: La Estructura de los Programas de Computadora

3.1 Programas y Sentencias

Un programa de computadora es un sistema con componentes e interrelaciones. Intentaremos determinar cuales son dichos componentes y como se relacionan.

En primer lugar definiremos los conceptos de programa y programa de computadora.

Un programa puede ser definido como "una secuencia precisa y ordenada de instrucciones y grupos de instrucciones, las cuales, en su total, definen, describen, o caracterizan la realización de alguna tarea".

Un programa de computadora es simplemente un programa el cual, posiblemente a trevés de una transformación, indica a la computadora como realizar una tarea.

En el nivel más elemental, observamos que un programa de computadora está compuesto de sentencias o instrucciones. Estas instrucciones están ordenadas en una secuencia. Podemos por lo tanto identificar a las instrucciones como componentes y a la secuencia como un relación. Esta es la visión clásica o "algoritmica" de un programa.

De esta visión tenemos como consecuencia, que el esfuerzo en el desarrollo de un programa se enfatiza en encontrar un método de solución y su transcripción sentencia a sentencia.

Para los propósitos de nuestro estudio, consideraremos que una sentencia es una línea de código que el programador escribe.

3.2 Estructura de la Sentencia de Programas de Computadoras

3.3 La Lingüística de la Modularidad

Previo a la definición de módulo de programa haremos algunas observaciones. Supongamos un conjunto de sentencias como las que se representan a continuación:

__________

__________

A1: BEGIN A

__________

__________

B: __________

__________

__________

A2: END A

C: __________

__________

 

Diremos que A1 y A2 son los límites del conjunto o agregado de sentencias llamado A. La sentencia B se encuentra dentro de A, y C se encuentra fuera de A.

Las sentencias se encuentran en el orden en que ingresaran a un compilador. Este orden es conocido como orden lexicográfico de un programa. Para nuestro estudio el término lexicográfico siempre significará "como está escrito" o el orden en que aparecen las sentencias de un programa en el listado de un compilador. Volviendo al ejemplo, diremos que la sentencia C está lexicográficamente después que la A2.

Es importante distinguir que el orden lexicográfico casi siempre no se corresponde con el orden de ejecución de las sentencias.

Uno de los propósitos de los elementos de límite (A1 y A2 en el ejemplo) es el de controlar el alcance en el que identificadores son definidos y asociados a objetos (variables).

Estamos ahora en condiciones de definir el término módulo de programa o simplemente módulo: Un módulo es una secuencia lexicográficamente contigua de sentencias, encerrada entre elementos de frontera, y que poseen un identificador del conjunto de dichas sentencias.

Dicho de otra manera, un módulo es un grupo de sentencias contiguas que poseen un identificador simple por el cual son referenciadas.

Esta definición es general y dentro de la misma podemos encontrar implementaciones particulares de lenguajes específicos como ser: "párrafos", "secciones", y "subprogramas" de COBOL, "funciones" de C, "procedimientos" de Pascal, etc.

Un lenguaje de programación incluye un determinado tipo de módulo, solo si implementa construcciones lingüísticas específicas que realizan las características de definición y activación de dichos módulos.

3.4 Conexiones Normales y Patológicas

Diremos que entre dos módulos existe una conexión normal cuando la conexión se produce al nivel del identificador del módulo invocado.

En oposición si la conexión intermodular se realiza a un identificador de un elemento interno del módulo invocado, diremos que es una conexión patológica.

fig3-1.jpg (7089 bytes)

3.5 Diagramas de Flujo de Datos

Los diagramas de flujo de datos que usaremos en la etapa de diseño son similares a los utilizados para la etapa del análisis.

Las transformaciones son representadas por burbujas (círculos) y los flujos de datos se representan con flechas. Cada flujo se etiqueta con su contenido.

Si dos flujos dibujados adyacentemente son ambos necesarios para realizar una determinada transformación (a la cual arriban), dibujaremos entre ambos un asterisco ("*"). Este símbolo al igual que en otras disciplinas matemáticas representa el operador "Y" o de conjunción. De igual manera, si solo uno de los flujos es necesario, utilizaremos el símbolo Å , que representa al operador "O" o de disyunción.

La cantidad de detalle mostrado en el diagrama de flujo de datos variará de problema en problema y de diseñador en diseñador. (ver ejemplo en Const/Your)

Los diagramas de flujo de datos serán de gran utilidad en el estudio del concepto de cohesión,y su utilidad principal es el de herramienta gráfica en la estrategia de diseño estructural llamada análisis de transformación.

3.6 Estructura y Procedimiento

Tanto neófitos como veteranos, muchas veces encuentran difícil de comprender la diferencia entre el procedimiento y la estructura de programas y sistemas. Peor aún son las fallas en la diferenciación entre codificación y diseño estructural.

La estructura nos da una relación jerárquica de control existente entre los módulos que conforman un programa.

3.7 Diagramas de Flujo y Diagramas de Estructura

Normalmente los procedimientos se representan con diagramas de flujo (no confundir con diagramas de flujo de datos) los cuales modelan la secuencia de operaciones que realiza el programa a través del tiempo.

Un diagrama de estructura en cambio no modela la secuencia de ejecución sino la jerarquía de control existente entre los módulos que conforman el programa, independientemente del factor tiempo. Existe un módulo raíz de máximo nivel, del cual dependen los demás, en una estructura arborescente.

En el estudio de la estructura de programas, se pueden realizar comparaciones útiles entre dichas estructuras, y las estructuras de las organizaciones humanas.

3.8 Notación de los Diagramas de Flujo de control

fig3-2.jpg (11920 bytes)
fig3-3.jpg (17558 bytes)

3.9 Notación de los Diagramas de Estructura

fig3-4.jpg (14687 bytes)

 

Ejemplo Comparativo entre Diagramas de Procesamiento y de Estructura

Diagrama de Flujo fig3-5.jpg (9742 bytes)
Diagrama de Estructura fig3-6.jpg (9275 bytes)

 

 

WB01343_.gif (599 bytes) WB01344_.gif (1348 bytes) WB01345_.gif (616 bytes)