PARADIGMAS DE LA COMPUTACION David Elias Martínez M. Escuela Nacional de Estudios Profesionales, Acatlán Los requerimientos de una organización de contar con sistemas de información a la medida de las necesidades de los usuarios y con lo último en tecnología y telecomunicaciones, ha orientado los esfuerzos de los ingenieros de software para automatizar procesos de información con métodos y herramientas cada vez más sofisticados y específicos para cada área de aplicación. La ingeniería de software es la aplicación de herramientas, técnicas y metodologías para el diseño de software flexible con calidad, menos costoso y confiable; sin embargo, también es importante determinar el tipo de aplicación y la tecnología de información disponible para el tipo de software. El diseño de software se puede llevar a cabo usando las fases del ciclo de vida de un sistema; análisis, diseño e implementación; o las etapas en espiral, en la que los requerimientos y el diseño se reestructuran conforme se desarrolla la aplicación y las necesidades del usuario y del sistema son resueltas y continúamente se corrige el análisis, diseño y la implementación. Un proceso de desarrollo de software involucra también lenguajes y ambientes de desarrollo. Editores interactivos para crear y guardar programas; compiladores y ligadores; bibliotecas de módulos de programas; depuradores, etc. Un ambiente integral de desarrollo de software debería de apoyar todas las fases y actividades del proceso de software. Las herramientas CASE (Computer Aided Software Engineering) ofrecen la ayuda automatizada al desarrollo de software, es decir, ofrecen soluciones puntuales en cada una de las etapas del desarrollo del software. Los lenguajes y métodos de diseño son la guía para producir el diseño de un sistema. Un método de diseño es la forma de producir el diseño de un sistema. Los métodos más usados son: estructurado, diseño "desde arriba hacia abajo" (top-down) y diseño orientado a objetos. No obstante estas metodologías de diseño, dentro de los lenguajes es común encontrar paradigmas de programación. Los lenguajes que soportan un paradigma específico de computación se puede clasificar como orientado al paradigma de computación. Así, se encuentra FORTRAN y Pascal, definidos originalmente como lenguajes procedurales porque utilizan el concepto de rutina como la unidad de modularización. Eiffel y Smalltalk son lenguajes orientados a objetos; su programas se expresan en términos de clases y objetos como unidades de modularización. En general, esta relación puede no ser uno a uno. Se puede disponer de C++ que soporta el paradigma procedural y el orientado a objetos. Y podemos clasificarlo como neutral al paradigma. Si el método de diseño y el paradigma del lenguaje coinciden, entonces el mapeo entre las abstracciones del diseño y las abstracciones del lenguaje es directo, en el caso contrario, los costos del mapeo pueden ser muy altos. Los lenguajes de programación convencionales son una abstracción de la arquitectura de la computadora subyacente. El modelo abstracto consiste en la ejecución secuencial, paso por paso, de las instrucciones que cambian el estado de la computación vía la modificación del almacén de valores. Los lenguajes convencionales basados en el modelo computacional de Von Newman se llaman imperativos, basados en instrucciones o, simplemente, lenguajes Von Newman; Basic, Pascal, Fortran y Lenguaje C fueron los lenguajes imperativos de mayor influencia cuando aparecieron. Los paradigmas de lenguajes: Programación declarativa: la descomposición de un problema hasta su implementación algorítmica. Programación por módulos: enfatiza el concepto de módulo como agrupación de variables, procedimientos, funciones y tipos. El programa se compone de un conjunto de módulos. Programación genérica: este estilo enfatiza la definición de módulos genéricos, los cuales pueden ser instanciados a la hora de compilación o en tiempo de ejecución, es el caso de C++ y Ada. Un paradigma que corresponde a los lenguajes de cuarta generación es la inteligencia artificial, que se ha resuelto con lenguajes de programación como PROLOG y LISP; el primero, desarrollado en 1956-1962 por J. McArthy y el segundo por A. Colmerauer en 1972, para el desarrollo de inteligencia artificial, que corresponden ambos a la definición de lenguajes funcionales o aplicativos. El lenguaje LISP original es libre de conceptos Von Newmann, como las variables cuyos valores se modifican, instrucción de asignación, instrucción de goto, etc. La lista es el único tipo de estructura de datos que permite LISP. Los programas de LISP también son listas. Esta uniformidad entre la estructura de datos y los programas permite definir intérpretes de LISP de una manera sencilla. Este lenguaje incluyó conceptos menos consolidados en esa época, como son el manejo de excepciones y las multi-tareas. APL es otro lenguaje basado en las matemáticas. Contiene un conjunto nutrido de operadores sobre arreglos que eliminan la programación tediosa de ciclos. SNOBOL4 también es ejemplo de un lenguaje no convencional. Proporciona facilidades para la manipulación de cadenas (strings) y aparcamiento de patrones (pattern matching). Apoya la programación declarativa. LISP, APL y SNOBOL4 son grandes consumidores de recursos computacionales (tiempo y espacio), por lo tanto se dificulta su eficiencia en máquinas convencionales. A pesar de esto, han llegado a ser muy exitosos para cierto tipo de aplicaciones y tienen sus usuarios devotos. Por ejemplo, LISP es ampliamente usado en aplicaciones de Inteligencia Artificial. APL se usa para hacer prototipos rápidos en aplicaciones financieras o científicas que implican el uso de operaciones sobre matrices. La mayor contribución de LISP y SNOBOL4 fue el énfasis en la computación simbólica. En la mayoría de las aplicaciones actuales sólo una pequeña parte de ellas está dedicada a los cálculos numéricos. El resto, en su mayoría, ocupa el procesamiento simbólico tal como el manejo de bases de datos o el procesamiento de textos. LISP ha seguido desarrollándose en la versión del lenguaje SCHEME, el cual fue diseñado como lenguaje educativo para cursos introductorios y como una alternativa de comparación con los lenguajes convencionales. Otra nueva definición de lenguajes de programación ha propiciado el desarrollo de la tecnología, el procesamiento en paralelo, y los biochips en lo que se denomina Quinta Generación, paradigma inicialmente desarrollado en Japón en la década de los 80's y que durante los 90's alcanzaría su máximo desarrollo en lo que se conoce como robótica y los sistemas expertos. Bajo este esquema PROLOG fue seleccionado por el gobierno de Japón para realizar su proyecto de inteligencia artificial. Los lenguajes de programación funcionales y lógicos han abandonado el modelo computacional de Von Neumann, es el caso de Prolog y Scheme, ambos tienen fundamento en las matemáticas y no en la arquitectura subyacente del hardware (modelo Von Newman). Por lo tanto, no pueden aspirar a los mismos niveles de eficiencia que los lenguajes imperativos. LISP y ML, el último diseñado en 1984, son lenguajes basados en el modelo computacional funcional. Entre sus características tenemos: Cálculo Lambda, Expresiones tipo S y tipo M, Símbolos atómicos, Funciones elementales, Listas, Composición de funciones, Recursividad, Programación y expresión de algoritmos en Lisp, Intérpretes, Extensiones del lenguaje. Algunas de las características de los lenguajes lógicos son: Cláusulas de Horn, Variables, hechos y reglas. La programación lógica como paradigma para especificaciones; lenguajes de especificación, generalización de bases de datos relacionales, mecanismos de deducción. Parámetros de eficiencia. ¿Qué significa entonces, el paradigma de un lenguaje de programación? Al manejar un lenguaje dentro del diseño de software implica un costo para mapear la relación software-lenguaje. De manera que para problemas científicos y métodos numéricos FORTRAN y LENGUAJE C son la mejor alternativa por aritmética de punto flotante y soporte para varias plataformas. De la misma forma, tendría la posibilidad de usar Java, ASP o Perl para aplicaciones de telecomunicaciones, en este caso, mediante protocolos de transferencia y acceso a datos vía Internet. El manejo de los lenguajes SQL, C++ Builder, Delphi o Visual Basic para el manejo de registros de una base de datos, o LISP y PROLOG para inteligencia artificial. Los compiladores de Prolog y LISP están disponibles en la red, Visual Prolog 5 es posible obtenerlo de la Facultad de Ciencias, <ftp://ftp.fciencias.unam.mx/>ftp.fciencias.unam.mx y LISP en su versión Common Lisp es (posiblemente) el intérprete más extendido, y está disponible para distintas plataformas. Su página Web es <http://www.clisp.sourceforge.net/>www.clisp.sourceforge.net TL3 es otro intéprete de Lisp, que tiene un Graphics Toolkit y es multiplataforma. Su página Web es <http://www.research.att.com/~leonb/TL3/>www.research.att.com/~leonb/TL3/. "En el desarrollo tecnológico de la informática es imprescindible el manejo de lenguajes para apuntalar las ventajas que ofrece una aplicación: funcionalidad, facilidad de estructura, seguridad y robustecimiento; un lenguaje que propicie estas características permitirá desarrollar aplicaciones que controlen un robot, un biochip, un procesamiento en paralelo o una red neuronal". Fuente: http://morgan.iia.unam.mx/usr/humanidades/211/columnas/MARTINEZ