Visita Encydia-Wikilingue.con

Modula-2

modula-2 - Wikilingue - Encydia

Modula-2

Paradigma Imperativa, Estructurada, Modular
Surgido en 1978
Última versión {{{ultima_versao}}} ()
Versión en prueba {{{versao_beta}}} ()
Creado por Niklaus Wirth
Estilo de tipagem: Fuerte, Estática
Compiladores Native-XDS
Dialectos: PIM2, PIM3, PIM4, ISO
Influenciada por Pascal,Modula, Mesa, ALGOL, Simula-67
Influenció Modula-3, Oberon, Ada, Fortran 90, Luna, Zonnon, Modula-GM
Licencia: {{{licencia}}}
Página oficial {{{website}}}


Tabla de contenido

Descripción

Modula-2 es un lenguaje de programación proyectada y creada por Niklaus Wirth en la ETH, en torno a 1978, y surgió a partir de la necesidad de crear un lenguaje práctico, eficiente y esencialmente independiente del hardware sobre el cual fuera ejecutada. ES descendiente, principalmente, de dos otros lenguajes: el Modula y Pascal. De la primera heredó el nombre y el concepto de módulos, además de la sintaxis sistemática y moderna, de entre otras características, de Pascal. Así como sus precursores, el Modula-2 se clasifica de entre los lenguajes del Paradigma Imperativo.

Su historia es intrínseca a de el Proyecto de Lilith , cuyo objetivo explícito era usar un mismo lenguaje para todos sus softwares, alineado a la necesidad de utilizar un lenguaje de programación estructurada y simple para que, además de la construcción de sistemas grandes y complejos, también fuera capaz de expresar toda la gamma de programas necesarios para hacer Lilith en una poderosa herramienta de desarrollo de software. La solución para tal necesidad fue a la concepción de un lenguaje que viabiliza la creación de módulos que pueden ser compilados separadamente y que poseen checagem completa de tipos, además de soporte a la programación concurrente.


Vertientes


El Modula-2 posee dos principales vertientes. Siguen algunas de las variantes entre las ellas:

PIM 
Denominada con el nombre del libro "Programming in Modula-2" de Niklaus Wirth, que por su parte tuvo tres ediciones principales, cada una describiendo las ligeras variantes de la misma;
  • PIM2 (1983): La cláusula “EXPORT” debe ser explícitamente declarada en la creación de “DEFINITION MODULE”;
  • PIM3 (1985): La cláusula “EXPORT” fue suprimida en los módulos de definición, pues todo que se encuentra dentro de un “DEFINITION MODULE” define la interfaz para ese módulo, removiendo así la redundancia;
  • PIM4 (1989): Especificado el comportamiento del operador “MOD” cuando los operandos son negativos y del tipo "ARRAY OF CHAR" para siempre ser concluidos con “ASCII-NUL”;


ISO 
Fue concebida a partir del esfuerzo de su padronização por la Organización Internacional de Normalización.
  • ISO (1996): El ISO Modula-2 resolvió la mayoría de las ambigüidades existentes en el PIM Modula-2. Añadieron los tipos de datos “COMPLEX” y “LONGCOMPLEX”, tratamiento de excepciones, la creación de la cláusula “FINALLY” y una completa y padronizada biblioteca de Entrada/Salida (del inglés I/Lo, Input/Output), además del otras incontables variantes más pequeñas.


Buena práctica


El concepto de módulo puede ser usado para encapsular un conjunto de subprogramas y estructuras de datos, siendo importante tanto para la reusabilidade de código-fuente, en cuanto a la restricción de visibilidad innecesaria de determinadas partes del programa, pues, excepto para identificadores normalizados, ningún objeto de escopos externos son visibles dentro de un módulo a menos que explícitamente importados, o entonces, ningún objeto interno del módulo es visible de un escopo exterior, la menos que explícitamente exportados. Su implementación es compuesta de dos partes:

  • Módulo de definición (del inglés DEFINITION MODULE): Contiene sólo la interfaz, o sea, los prototipos de “PROCEDURE” que serán exportados (visible para otros módulos).
  • Módulo de ejecución (del inglés IMPLEMENTATION MODULE): Contiene el código de trabajo que es interno al módulo, o sea, la codificación de cada “PROCEDURE”.


Soluciones Desarrolladas


Además de los softwares creados para el Lilith, es posible encontrar diversos módulos gratuitos y disponibles para download, como por ejemplo, módulos para expresiones regulares, interfaz con banco de datos MySQL, lectura de archivos XML, creación de archivos Excel, compactação y descompactação de archivos, de entre otros.


Sintaxis

La sintaxis básica del Modula-2 será presentada a continuación con algunos ejemplos:

Palabras Reservadas
Son palabras llaves que ayudan el compilador a reconocer la construcción del lenguaje, por lo tanto no pueden ser utilizadas por el programador como identificadores.
AND         ELSIF           LOOP       REPEAT
ARRAY       END             MOD        RETURN
BEGIN       EXIT            MODULE     SET
BY          EXPORT          NOT        THEN
CASE        SEA             OF         TE Lo
CONST       FROM            OR         TYPE
DEFINITION  IF              POINTER    UNTIL
DIV         IMPLEMENTATION  PROCEDURE  VAR
DEL          IMPORT          QUALIFIED  WHILE
ELSE        IN                   RECORD WITH
Identificadores
Son los nombres definidos por el programador para representar constantes, variables, procedures, etc. Un identificador no es válido cuando inicia con un número o posee caracteres que no son letras o números.
Ejemplos:
  • Declaración correcta
     VAR n : CARDINAL;
  • Declaración incorrecta
     VAR 123número : CARDINAL;
     
Identificadores Normalizados
No necesitan ser declarados.
ABS         EXCL            LONGINT    REAL
BITSET      FALSE           LONGREAL   SIZE
BOOLEAN     FLOAT           MAX        TRUE
CAP         HALT            MIN        TRUNC
CARDINAL    HIGH            NIL        VAL
CHAR        INC             ODD
CHR         INCL            ORD
DEC         INTEGER         PROC
Operadores
+	Adición, unión de conjuntos
-	Subtracción, diferencia de conjuntos
*	Multiplicación, intersección de conjuntos
/	División
&	" Y " lógico
	" NO " lógico
Operadores relacionáis
=	Igual
#	Diferente
<	Menor que
>	Mayor que
:=	Atribución
<=	Más pequeña o igual la =
>	Mayor o igual la '
"	Strings
< >	Diferente
(**)	Comentarios
Delimitadores
.	Punto
,	Vírgula
;	Punto y vírgula
:	Dos puntos
|	Barra vertical
^	Derreferenciador
Forma de pares
( )	Expresiones, tipos de enumeração
{ }	Conjuntos
[ ]	Tipo subfaixa, indexación de arrays
Estructuras de Atribución/Control
Permite que dentro de un bloque de mandos, exista una toma de decisión en cuanto a instrucción a ser ejecutada o entonces la repetición de un determinado bloque de instrucciones.
ATRIBUCIÓN              WHILE     WITH 
Llamada de procedure    REPEAT    EXIT 
IF                      LOOP      RETURN 
CASE                    SEA 


Ejemplos

Hello World

   MODULE hello;
     FROM InOut IMPORT writestring, writeln;
     BEGIN
       WriteString("Hello, world!");
       Writeln;
   END hello.

Manipulación de Vector con SER

   MODULE  Vectores;
     FROM InOut IMPORT ReadCard,WriteCard,WriteLn,WriteString;
      VAR    Index      :  CARDINAL;
             Automoveis :  ARRAY  [1..12]  OF  CARDINAL;
      BEGIN
        SEA  Index  :=  1  TE Lo  12   DEL
          Automoveis [Index] := Index + 10;
        END;
        Automoveis [7] := 54;
        WriteString ( " Este es el primer programa con un vector. ");
        WriteLn;
        WriteLn;		
        SEA  Index  :=  1  TE Lo  12  DEL
          WriteString( " Numero del Automovel " );
          WriteCard( Index , 3);
          WriteString( " Posee el valor de " );
          WriteCard( Automoveis [Index] , 3);
          WriteLn;
        END;
    END  Vectores.
A través del ejemplo arriba, pueden ser hechas las siguientes observaciones sobre la sintaxis:
  • Un programa en Modula-2 debe ser iniciado con la palabra “MODULE” seguido del nombre del programa (“Vectores” en el ejemplo arriba) y un símbolo “;”. El término del mismo debe ser hecho utilizando la palabra “END” seguido del nombre del módulo nuevamente y de un símbolo “.”
  • La “Lista de Importaciones” determina las entidades a ser importadas. La palabra reservada “FROM” puede ser omitida caso después de la palabra “IMPORT” contenga el nombre del módulo.
Ex: La lista de importaciones puede ser hecha de las siguientes maneras:
     IMPORT IO
     ...
     IO.WrStr(“No utilizando FROM”);
     ...
     
     o FROM
     
     IO IMPORT WrStr
     ...
     WrStr(“No utilizando FROM”);
     ...
  • La declaración de las variables a ser utilizadas dentro del bloque de mandos deben ser hechas después de la palabra “VAR”, seguidos del nombre de la variable, del símbolo “:”, el tipo de la variable y el símbolo “;”
  • Los bloques conteniendo los mandos deben ser escritas entre las palabras “BEGIN ... END;”. Después del final de cada mando debe contener el símbolo “;”

Factorial utilizando Sub Rutina

   MODULE factorial;
     FROM InOut IMPORT ReadCard,WriteCard,WriteLn,WriteString;
     VAR n : CARDINAL;
     PROCEDURE Fat(n : CARDINAL) : CARDINAL;
     BEGIN
       IF n=0 THEN 
         RETURN 1
       ELSE
         RETURN n*Fat(n-1);
       END;
     END Fat;
   BEGIN
     WriteString("Este modulo calcula el factorial de 'N'");
     WriteLn;WriteLn;
     WriteString("Entre con el valor de 'N':");
     ReadCard(n);
     WriteLn;WriteLn;
     WriteString("El factorial de");
     WriteCard(n,3);
     WriteString("  y'");
     WriteCard(Fat(n),6);
   END factorial.

Cálculo de los Números Perfectos

   MODULE perfectNumbers;
     FROM InOut IMPORT ReadCard,WriteCard,WriteLn,WriteString;
     VAR n           : CARDINAL;
         loop         : CARDINAL;
         suma         : CARDINAL;
         loopInterno  : CARDINAL;
   BEGIN
     WriteString("Calculo de numeros perfectos");
     WriteLn;
     WriteString("Teclee el valor de N - entera");
     ReadCard(n);
     IF(n > 0) THEN
       loopInterno:=0;
     SEA loop:=1 TE Lo n DEL
       suma := 0;
       SEA loopInterno:=1 TE Lo loop-1 DEL
          IF(loop MOD loopInterno = 0)THEN
            suma := suma + loopInterno;
          END;
       END;
       IF(suma =loop)THEN
         WriteString("Perfecto:");
         WriteCard(suma,6);
         WriteLn;
       END;
     END;
     ELSE
       WriteString("Numero invalido");
     END;
   END perfectNumbers.


Compiladores

Libros

Conexiones externas

Archivo:Singleton.png Este sobre Programación es uno esbozo. Usted puede ayudar la Wikipédia expandiéndolo.