La programación modular es la organización de un programa como una colección de pequeños bloques independientes llamados módulos, cuya estructura y comportamiento obedecen a ciertas reglas. [1] El uso de la programación modular facilita probar el programa y encontrar errores. Las subtareas que dependen del hardware se pueden separar estrictamente de otras subtareas, lo que mejora la portabilidad de los programas creados.
Un módulo es una pieza funcionalmente completa de un programa . En muchos idiomas (pero no necesariamente) se emite como un archivo separado con el código fuente o una parte continua nombrada del mismo. Algunos lenguajes permiten empaquetar módulos .
El principio de modularidad es un medio para simplificar la tarea de diseñar software (SW) y distribuir el proceso de desarrollo entre los equipos de desarrollo. Al dividir el software en módulos, cada módulo especifica la funcionalidad que implementa, así como los enlaces a otros módulos. [2] La conveniencia de usar una arquitectura modular radica en la capacidad de actualizar (reemplazar) el módulo sin necesidad de cambiar el resto del sistema.
El papel de los módulos puede ser desempeñado por estructuras de datos , bibliotecas de funciones , clases , servicios y otras unidades de software que implementan alguna funcionalidad y le proporcionan una interfaz .
El código del programa a menudo se divide en varios archivos, cada uno de los cuales se compila por separado de los demás. Esta modularidad del código puede reducir significativamente el tiempo de recompilación de los cambios realizados solo en una pequeña cantidad de archivos fuente y simplifica el desarrollo del equipo . También es la capacidad de reemplazar componentes individuales (como archivos jar , bibliotecas so o dll) del producto de software final, sin necesidad de reconstruir todo el proyecto (por ejemplo, desarrollar complementos para un programa ya terminado).
Un método para escribir programas modulares es la programación orientada a objetos . OOP proporciona un alto grado de modularidad a través de propiedades tales como encapsulación , polimorfismo y enlace tardío .
A pesar de que la programación modular no está ligada a los detalles de un lenguaje en particular (e incluso en ausencia de soporte explícito del lenguaje puede usarse con suficiente disciplina por parte de los programadores), la mayoría de los lenguajes impulsan su propio sistema de módulos. al nivel superior, como si fuera imposible portar el sistema de módulos de un idioma a otro [3] .
En el año 2000, Xavier Leroy propuso hacer modulares los sistemas de módulos, es decir, parametrizados por la descripción de un núcleo específico del lenguaje con su propio sistema de tipos [3] . Como ejemplo, demostró una implementación generalizada del lenguaje de módulos ML (como el sistema de módulos más desarrollado que se conoce en este momento) y ejemplos de su instanciación en el lenguaje ML tradicional para él y en el lenguaje C.
La implementación de Leroy se construye usando el lenguaje del módulo ML , es decir, como un funtor parametrizado por datos sobre el núcleo del lenguaje y una descripción de su mecanismo de verificación de consistencia de tipos . Esto significa que al escribir un compilador para un idioma determinado, es suficiente describir el núcleo del idioma y pasarlo al funtor dado (como una función de biblioteca); el resultado será un compilador para extender un idioma conocido con un sistema. de módulos ML .
La historia del concepto de módulos como unidades de compilación se remonta a Fortran II y Cobol , es decir, a finales de la década de 1950 [4] [5] . En 1976, apareció una publicación que desarrollaba el concepto de modularidad, sobre el lenguaje Mesa , que se desarrolló en Xerox PARC . En 1977, el científico Niklaus Wirth se familiarizó con este concepto en detalle , hablando con los desarrolladores de Xerox PARC. [6] Estas ideas fueron utilizadas por Wirth para crear el lenguaje Modula-2 , que se publicó en 1977 [7] .
El término "módulo" en programación comenzó a usarse en relación con la introducción de principios modulares en la creación de programas. En la década de 1970, un módulo era un procedimiento o función escrito de acuerdo con ciertas reglas. Por ejemplo: "el módulo debe ser simple, cerrado (independiente), visible (de 50 a 100 líneas), implementando solo una función de tarea, con un punto de entrada y uno de salida".
D. Parnas ( David Parnas ) en 1972 fue el primero en formular más o menos claramente las principales propiedades de un módulo de programa : “Para escribir un módulo, debe haber suficiente conocimiento mínimo sobre el texto de otro”. Así, de acuerdo con la definición, un módulo podría ser cualquier procedimiento separado (función) tanto del nivel más bajo de la jerarquía (nivel de implementación) como del nivel más alto, en el que solo ocurren llamadas a otros procedimientos del módulo. [ocho]
Así, Parnassus fue el primero en proponer el concepto de ocultación de información en la programación . Sin embargo, las únicas construcciones sintácticas que existían en los lenguajes de los años 70, como procedimiento y función, no podían proporcionar un ocultamiento de información confiable, debido al uso generalizado de variables globales.
Este problema solo podría resolverse desarrollando una nueva construcción sintáctica que no se vea afectada por las variables globales. Tal diseño fue creado y llamado módulo. Inicialmente, se asumió que al implementar sistemas de software complejos, el módulo debe usarse junto con procedimientos y funciones como una construcción que combina y oculta de manera confiable los detalles de la implementación de una subtarea específica.
Por lo tanto, el número de módulos en el complejo debería estar determinado por la descomposición del conjunto de tareas en subtareas independientes. En el caso extremo, un módulo puede incluso usarse para encerrar un solo procedimiento en él, si es necesario que se garantice que la acción local que realiza sea independiente de la influencia de otras partes del programa, bajo cualquier cambio.
Por primera vez, N. Wirth propuso una construcción sintáctica especializada del módulo en 1975 y la incluyó en su nuevo lenguaje Modula. La fuerza con que cambian las propiedades del lenguaje cuando se introduce el mecanismo del módulo se evidencia en el siguiente comentario de N. Wirth, que hizo sobre el lenguaje Modula-2 posterior: "Los módulos son la característica más importante que distingue al Modula-2". lenguaje de su predecesor Pascal".
Lenguajes que soportan formalmente el concepto de módulos: IBM S/360 Assembler , Cobol , RPG , PL/1 , Ada , D , F (inglés) , Fortran , Haskell , Blitz BASIC , OCaml , Pascal , ML , Modula-2 , Oberon , Component Pascal , Zonnon , Erlang , Perl , Python y Ruby . El Sistema IBM utilizaba "módulos" de los lenguajes RPG , Cobol y CL cuando se programaba en el entorno ILE.
La programación modular se puede realizar incluso cuando la sintaxis del lenguaje de programación no admite nombres explícitos de módulos.
Las herramientas de software pueden crear módulos de código fuente que se representan como partes de grupos (componentes de biblioteca) que se compilan con un programa vinculador .
Pascal estándar no proporciona mecanismos para la compilación separada de partes del programa con su ensamblaje posterior antes de la ejecución. Es bastante comprensible que los desarrolladores de compiladores comerciales de Pascal quieran incluir herramientas en el lenguaje que aumenten su modularidad. [9]
Un módulo en Pascal es una unidad de programa autocompilada que incluye varios componentes de la sección de declaración (tipos, constantes, variables, procedimientos y funciones) y, posiblemente, algunas declaraciones ejecutables de la parte de inicio. [diez]
En términos de su organización y naturaleza de uso en el programa, los módulos de Pascal están cerca de los módulos de paquete (PACKAGE) del lenguaje de programación Ada. En ellos, así como en los paquetes Ada, se asigna explícitamente alguna parte de la interfaz "visible", en la que se concentran las descripciones de tipos globales, constantes, variables, y también se dan los títulos de procedimientos y funciones. La aparición de objetos en la parte de la interfaz los hace disponibles para otros módulos y el programa principal. Los cuerpos de procedimientos y funciones se encuentran en la parte ejecutable del módulo, que se puede ocultar al usuario.
Los módulos son una gran herramienta para desarrollar bibliotecas de aplicaciones y una poderosa herramienta para la programación modular. Una característica importante de los módulos es que el compilador coloca su código de programa en un segmento de memoria separado. La longitud del segmento no puede exceder los 64 KB, pero la cantidad de módulos utilizados simultáneamente está limitada solo por la memoria disponible, lo que le permite crear programas grandes.
diccionarios y enciclopedias | |
---|---|
En catálogos bibliográficos |
|