EL LENGUAJEMODULA-2
Programación 2Curso 2009
InCo
Módulos
Los programas (ej:PASCAL) usan engeneral funciones y procedimientos “debiblioteca”
En Modula-2 las bibliotecas se organizanen módulos (de biblioteca)
M1 M2 Mn
Biblioteca
Módulo
. . .
Módulos (2) Un módulo contiene un número de entidades de
exportación. Entidades posibles:
Tipos Constantes Variables Procedimientos y funciones
Exportación: disponibles para ser utilizados por otrosmódulos.
Cada módulo tiene también un nombre. Los “programas principales” son también llamados
módulos. Se distinguen:
Módulos de biblioteca Módulo Principal.
Módulos (3) Estructura de un programa (módulo principal) :
MODULE nombre;<lista de importaciones><declaraciones>
BEGIN<instrucciones>
END nombre
Importación:
FROM <nombre> IMPORT <lista_de_nombres>; <nombre> debe ser nombre de un módulo de
bibloteca. <lista_de_nombres> deben ser entidades exportadas
por el modulo referenciado.
FROM STextIO IMPORT WriteString, WriteLn;
Ejemplo
Programa que lee dos naturales ycomputa su máximo común divisor.
Los procedimientos y funciones de E/S(Entrada/Salida) son importados de módulosque suponemos definidos.
ReadCard debe ser un procedimiento conun solo parámetro de tipo CARDINAL.
EjemploMODULE módulo;
FROM InOut IMPORT ReadCard,WriteCard,WriteString,WriteLn;
VAR x, y: CARDINAL;
BEGIN
WriteString(“x =“);ReadCard(x);WriteLn;WriteString(“y= “);ReadCard(y);WriteLn;WHILE (x<>y) DO
IF (x>y) THEN x:= x-y;
ELSE y:=y-x;
END;
END; (*while*)WriteString(“MCSD = “); WriteCard(x,6);WriteLn;
END módulo.
Estructura de programas (M-2)
Fuerte similitud con Pascal. Esquema general:
Instrucciones operando sobre y modificando estadode datos
(Programa = Estructura de Datos + Algoritmos)
Estructura de Datos Conjunto de variables (de estado) Cada variable puede contener ciertos valores (datos) Estado de una variable x:
x tiene valor “v” (v es un valor permitido de la variable) x está indefinida (no tiene valor)
Estructura de Programas (M-2) (2)
Expresiones Variables y constantes denotan (representan)
valores Los valores pueden combinarse a través de
operaciones para computar otros valores
InstruccionesEstructuras de control
Asignación (x:=e;) Secuencia Selección Iteración Procedimientos
Instrucciones
Asignación x:= e;
Secuencia: s1;s2
Selección: IF expresion(BOOLEAN) THEN
s1;ELSEIF expr THEN s2;…ELSEIF expr THEN s(n-1);ELSE sN;END
Instrucciones Iteración:
WHILE expr(BOOLEAN) DOs1;
END
También FOR y REPEAT
Procedimientos y Funciones En general, mismas reglas que en PASCAL Pasaje de parámetros:
Por Valor Por Referencia (VAR)
Las funciones PUEDEN retornar valores de tiposestructurados
Datos
Principio (metodológico)
No Existe el concepto de “dato” (aislado)
Los datos están clasificados en TIPO
Existe primero el concepto de TIPO DE DATOS ypara cada tipo T, tenemos el concepto de dato detipo T
Tipos de Datos Conocer un tipo de datos es conocer:
Cuales son los valores de tipo T Cuales son las operaciones (primitivas) que se
pueden aplicar a valores del tipo T Para definir un tipo de datos deben darse reglas
de: Sintaxis
Cómo se escriben los valores (literales) Cómo se escribe la aplicación de cada operación
Semántica Qué valor denota cada literal Qué computa cada operación
El sistema de tipos de Modula-2
Elementales
Estructurados
Tipos Elementales
Los valores no se pueden descomponeren partes (básicos, atómicos)
BOOLEAN INTEGER CARDINAL REAL CHAR Enumeraciones Subrangos
Tipos Elementales
El tipo INTEGER: Valores: un rango de enteros (depende de la
versión del lenguaje) Literales: se usa la notación decimal (octal y hexa) Operadores
Aritméticos: +, -, *, DIV, MOD Relaciones: <, <=, =, <> (#), >, >=, siguiendo casi las
mismas reglas que en Pascal.
Tipos Elementales
El tipo CARDINAL: Tiene como valores números naturales (enteros no
negativos) hasta un máximo. Para hallar ese máximo se utiliza la función
estándar MAX(T) (donde T es el tipo básico)aplicado al tipo CARDINAL.
Tipos Elementales Algunas diferencias con PASCAL:
+, -, * sobrecargados (igual que en PASCAL)
Pero NO se pueden combinar por medio de estas operacionesvalores de <> tipo.
2+3.1 : incorrecto x+y es incorrecto con x:CARDINAL e y:INTEGER
Existen funciones de conversión:
INTEGER
CARDINAL
REAL
CAST(INTEGER,…)
CAST(INTEGER,…)
CAST(CARDINAL,…)
CAST(REAL,…)
Tipos Elementales
Excepción: valores de tipos subrangos sepueden combinar con valores del tipobase del subrango.
Tipos Estructurados Vectores y Matrices (“arreglos”)
ARRAY <tipoindice> OF <tipo> Mismas reglas que en PASCAL Indice: [i]
miArreglo[i], miArray[2]; Literales: {}
TYPE TipoArray = ARRAY [0..2] OF CARDINAL
…a: TipoArray;
…a:= TipoArray{1,2,3};
Tipos Estructurados (2)
Registros RECORD
c1: t1;…cn: tn;
END
Mismas reglas que en PASCAL Selección: _._ (rec.f) Literales: {} (similar al caso de array)
Tipos Estructurados Uniones discriminadas (registros con variantes)
RECORDnombre, apellido: Nombre;CASE: estado: EstadoCIvil OF
soltero:casado: cant_hijos: CARDINAL;
fecha_matrimonio: FechaEND
El enumerado que se utiliza en el case debe definirsepreviamente.
Tipos Estructurados
Punteros Se verán mas adelante
Utilizados en ESTRUCTURAS DINAMICAS.
Vectores Abiertos Se pueden declarar parámetros formales sin especificar
el tipo índice: PROCEDURE P(s: ARRAY OF CHAR)
En este caso, vectores de CHAR de cualquier tamañopueden pasarse como argumentos efectivos de Pcorrespondiendo al parámetro formal s.
En el cuerpo del PROCEDURE, ‘s’ tiene primer índice 0y existe la función predefinida HIGH que permite calcularel índice máximo.(como si fuera s:ARRAY[0..HIGH(s)] OF CHAR;)
Para que módulos?
Abstracción / Descomposición Se descompone el programa en módulos. Debe acordarse cual es la comunicación entre
ellos. Que entidades importan/exportan En caso que sean procedimientos, especificar QUE deben
hacer (y no es necesario conocer COMO)
Para que módulos?
Los módulos pueden desarrollarse y compilarseseparadamente.
Para obtener una versión ejecutable debe efectuarse elproceso de linking.
Cambios en la implementación de entidades importadasno obligan a recompilar todo el sistema.
Solo se recompila el módulo de implementación y sereconecta todo el sistema.
Naturalmente, los “códigos incompletos” generados porel compilador son también mantenidos en archivos.
Modulo de Biblioteca
Módulo de Definición
Módulo de Implementación
Modulo de definición DEFINITION MODULE nombre;
<lista de importaciones><lista de declaraciones sintácticas (i)>
END
Las entidades declaradas en (i) son las exportadas por el módulo,pueden ser:
Tipos Constantes Variables Subprogramas (solo se declara el cabezal y no el cuerpo)
Ejemplo:PROCEDURE: ReadCArd(VAR x:CARDINAL)
En general, basta declarar la mínima información necesaria para verificarel uso correcto de la entidad solo desde el punto de vista sintáctico
En particular, los tipos exportados pueden ser declarados solo con unnombre (Tipos Opacos a ver más adelante …)
Módulo de implementación IMPLEMENTATION MODULE nombre;
<lista de importaciones><declaraciones (ii)>
END
Cada entidad declarada en el módulo de definición esimplementada en el correspondiente módulo de implementación.
En particular, en este ultimo es donde se proveen los cuerpos de lossubprogramas exportados.
En el proceso de compilación de un módulo principal.
El compilador usa la información de los módulos de definición
El linker usa los módulos de implementación.
Compilación y creación del ejecutable(linking)
CompiladorMódulo
Principal
Errores decompilación
Código Objeto“desconectado”
Conector“Linker”
Bibiloteca de Módulos
[2][1]
Código ObjetoEjecutable
Compilación y creación del ejecutable(linking)
[1]: El compilador no accede al código objeto delos módulos referenciados.
Solo utiliza declaraciones que permitan verificarel uso correcto de las entidades importadas,desde el punto de vista sintáctico
Por ello, la salida del compilador no esta listapara ser ejecutada.
Compilación y creación del ejecutable(linking)
Para construir los ejecutables es necesario completar elcódigo objeto del programa con el correspondiente a lasentidades importadas.
Esto ultimo lo realiza el “conector” (linker) accediendo[2] otra vez a las bibliotecas.
Cada módulo de biblioteca se compone de dos partes
Modulo de Definición Modulo de Implementación.
Instalación del compilador
En el curso se trabajará con el compiladorNative XDS-x86 para Windows.
El instalador del compilador del entorno sepuede obtener de la pagina deExcelsior.(ver sitio P2 e instructivo)
Compilar desde línea de comandos
El enfoque modular del lenguaje permite la compilación de cadamódulo como una entidad independiente
Sin necesidad de compilar cada uno de los módulos queconstituyen el proyecto
Un módulo de implementación se compila ingresando el siguientecomando:
xc =compile archivo1.mod xc =c archivo1.mod (abreviación)
El resultado es un archivo con el mismo nombre que el módulo perocon extensión “.obj”
Este archivo es denominado el código objeto del módulo.
Compilar desde línea de comandos (2)
Un módulo de definición se compila con: xc =c archivo1.def
En este caso no se genera código objeto sino un archivocon extensión “.sym”
Para compilar un módulo es necesario disponer de losarchivos .sym de todos los módulos de definiciónimportados directa o indirectamente.
Los módulos de implementación no se requieren.
Compilación de proyectos Cuando se trabaja con proyectos con muchos módulos,
la compilación independiente resulta incómoda
Es posible establecer relaciones de dependencia entremódulos de acuerdo a las importaciones.
Estas relaciones indican a que módulos podría afectar lamodificación y recompilación de un módulo.
El compilador cuenta con un modo de funcionamientoque maneja esto automáticamente.
En este modo solo se compilan aquellos módulosnecesarios de acuerdo a las dependencias.
Compilación de proyectos (2) Para compilar el módulo archivo1.mod y todos
aquellos de los que depende y hayan sidomodificados desde la última compilación:
xc =make archivo1.mod xc =m archivo1.mod (abreviación)
SI el archivo que se pasa por parámetro es unmódulo principal, se ejecuta automáticamente ellinker. Es decir:
xc =m principal.mod
Compilará todos los módulos necesarios e invocará a xlink paragenerar el ejecutable principal.exe
Creación del ejecutable (linking) Para la construcción del programa ejecutable se
requieren todos los archivos que resultan del proceso decompilación de los módulos (.obj y .sym)
No se requieren los archivos de código fuente (.mod y.def)
El proceso de linking se invoca con el siguientecomando:
xlink principal.obj archivo1.obj archivo2.objarchivoN.obj xds.25i.lib xstart.lib import32.lib
El resultado es un ejecutable “principal.exe”
Compilación y creación del ejecutable(linking)
CompiladorMódulo
Principal
Errores decompilación
Código Objeto“desconectado”
Conector“Linker”
Bibiloteca de Módulos
[2][1]
Código ObjetoEjecutable
Creación del ejecutable (linking) (2)
Los archivos “.lib” son librerías que agrupanvarios .obj
Las librerías “xds25i.lib”, “xstart.lib” e“import32.lib” se distribuyen junto con elcompilador (podría requerirse la ruta completa).
Contienen código de soporte para losprogramas, como por ejemplo rutinas de lasbibliotecas estándar.
DEFINITION MODULE STextIO;
(* Input and output of character and string types over default channels. Theread result
is of the type IOConsts.ReadResults.*)
(* The following procedures do not read past line marks *)
PROCEDURE ReadChar (VAR ch: CHAR);(* If possible, removes a character from the default input stream, and assigns
thecorresponding value to ch. The read result is set to allRight, endOfLine orendOfInput.
*)
PROCEDURE ReadRestLine (VAR s: ARRAY OF CHAR);(* Removes any remaining characters from the default input stream before the
next linemark, copying to s as many as can be accommodated as a string value. The
read resultis set to the value allRight, outOfRange, endOfLine, or endOfInput.
*)
PROCEDURE ReadString (VAR s: ARRAY OF CHAR);(* Removes only those characters from the default input stream before the next
line markthat can be accommodated in s as a string value, and copies them to s. The
read resultis set to the value allRight, endOfLine, or endOfInput.
*)
DEFINITION MODULE RealMath;(* Mathematical functions for the type REAL *)
CONSTpi = 3.141592;exp1 = 2.718281;
PROCEDURE sqrt (x: REAL): REAL;(* Returns the positive square root of x *)
PROCEDURE exp (x: REAL): REAL;(* Returns the exponential of x *)
PROCEDURE ln (x: REAL): REAL;(* Returns the natural logarithm of x *)(* The angle in all trigonometric functions is measured in radians *)
…PROCEDURE power (base, exponent: REAL): REAL;(* Returns the value of the number base raised to the power exponent *)
PROCEDURE round (x: REAL): INTEGER;(* Returns the value of x rounded to the nearest integer *)
PROCEDURE IsRMathException (): BOOLEAN;(* Returns TRUE if the current coroutine is in the exceptional execution state
because of the raising of an exception in a routine from this module;otherwise
returns FALSE.*)
END RealMath.
Algunas diferencias entre PIM yestándar ISO
Existen varias definiciones del lenguaje Modula-2, cadacompilador utiliza una de ellas.
En cursos anteriores se utilizo la llamada PIM, que vienede “Programming in Modula2” (libro de Wirth)
En este curso se utilizara el estándar ISO. Algunas particularidades:
FROM modulo IMPORT; se puede utilizar en PIM para importartodo lo exportado por el módulo “modulo”. En ISO se debemencionar explícitamente la lista de elementos a importar
WriteLine y ReadLine NO están disponibles en ISO
CompareStr se reemplaza por Compare
Algunas diferencias entre PIM yestándar ISO (2)
Mas diferencias: Copy para manejo de strings se reemplaza por Extract.
StringToCard (y similares) se reemplaza por StrToCard delmódulo WholeStr.
La declaración de un tipo enumerado dentro de unadeclaración record-case no es válida. Debe declararse antesel enumerado.
Se utiliza la función CAST, del modulo SYSTEM, paraconvertir valores (excepto literales numéricos) a otro tipo. Nose permite la conversión del tipo al estilo PIM como
CARDINAL(x)
Algunas diferencias entre PIM yestándar ISO (3)
Para obtener más información sobre este estándarpuede consultarse:
La documentación que se distribuye con el compilador http://www.modula2.org/reference
En el laboratorio SOLO se utilizará la definición ISO.
Se desaconseja la utilización de compiladores diferentesal Native XDS-x86.
En los ejercicios de practico, parciales y exámenes, seadmitirán ambas definiciones
PREGUNTAS?
Top Related