viernes, 27 de febrero de 2009

LENGUAJES BAJO, ALTO...

Lenguajes de Bajo Nivel.
Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes máquina, pero, al igual que ellos, dependen de la máquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos. Por ejemplo, nemotécnicos típicos de operaciones aritméticas son: en inglés, ADD, SUB, DIV, etc.; en español, SUM,RES,DIV,etc. Una instrucción típica de suma sería:
ADD M, N, P
Esta instrucción podría significar “sumar el número contenido en la posición de memoria M al número almacenado en la posición de memoria N y situar el resultado en la posición de memoria P”. Evidentemente es mucho más sencillo recordar la instrucción anterior con un nemotécnico que su equivalente en código máquina”.
0110 1001 1010 1011
Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora en esto se diferencia esencialmente del lenguaje máquina, sino que requiere una fase de traducción al lenguaje máquina.
El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje máquina se conoce como programa objeto, ya directamente entendible por la computadora.
El traductor de programas fuente a objeto es un programa llamado ensamblador, existente en casi todos los computadores.
Programa fuente en ensamblador (assembly)
Programa Ensamblador (assembler)
Programa objeto en código máquina.
No se debe confundir el programa ensamblador, encargado de efectuar la traducción del programa fuente escrito a lenguaje máquina, con el lenguaje ensamblador, lenguaje de programación con una estructura y gramática definidas.
Ventajas del lenguaje ensamblador.
Los lenguajes ensambladores presentan la ventaja frente a los lenguajes máquina de su mayor facilidad de codificación y, en general, su velocidad de cálculo.
Desventajas del lenguaje ensamblador.
Los inconvenientes más notables de los lenguajes ensambladores son:
Dependencia total de la máquina lo que impide la transportabilidad de los programas. El lenguaje ensamblador del PC es distinto del lenguaje ensamblador del Apple Macintosh.
La formación de los programadores es más compleja que la correspondiente a los programadores de alto nivel, ya que no sólo las técnicas de programación, sino también el conocimiento del interior de la máquina.
Hoy día los lenguajes ensambladores tienen sus aplicaciones mas reducidas en la programación de aplicaciones y se centran en aplicaciones de tiempo real, control de procesos y de dispositivos electrónicos, etc.
Intérpretes.
Un intérprete es un traductor que toma un programa fuente, lo traduce y a continuación lo ejecuta.
Programa Fuente
Intérprete
Traducción y ejecución línea a línea.
Un lenguaje que soporte un traductor de tipo intérprete se denomina lenguaje interpretado. BASIC es el modelo por excelencia de lenguaje interpretado.
Los programas fuente en BASIC se escriben con ayuda de un programa denominado editor que suele venir incorporado al programa intérprete.
Compiladores.
Un compilador es un programa que traduce los programas fuente escritos en lenguajes de alto nivel: Pascal, FORTRAN.... a lenguaje máquina.
Los programas escritos en lenguajes de alto nivel se llaman programa fuente y el programa traducido se le llama programa objeto ó código objeto. El compilador traduce sentencia a sentencia el programa fuente.
Lenguajes compiladores típicos son: Pascal, FORTRAN, COBOL..., hoy día es posible encontrar también versiones de compiladores BASIC y de C.
La compilación es el proceso de traducción de programas fuente a programas objeto.
Programa Fuente.
Compilador.
Programa Objeto.
El programa objeto obtenido de la compilación no ha sido traducido normalmente a código máquina sino a ensamblador. Para conseguir el programa máquina real se debe utilizar un programa llamado montador o enlazador (linker). El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable.
Programa Fuente.
Compilador (traductor).
Programa Objeto.
Montador.
Programa ejecutable en lenguaje máquina.
El proceso de ejecución de un programa Pascal, por ejemplo, tiene los siguientes pasos:
Escritura del programa fuente con un editor y guardarlo en un dispositivo de almacenamiento.
Introducir el programa fuente en memoria.
Compilar el programa con el compilador Pascal.
Verificar y corregir errores de compilación.
Obtención del programa objeto.
El montador obtiene el programa ejecutable.
Se ejecuta el programa y si no existen errores, se tendrá la salida del programa
Lenguajes de alto nivel
Siguiendo el razonamiento anterior (utilizar el propio ordenador como traductor), en los años sesenta se empezaron a desarrollar lenguajes cada vez más complejos, en los que cada instrucción ya no se correspondía exactamente con una instrucción del lenguaje máquina, sino con varias. Estos son los lenguajes de alto nivel o, simplemente, L.A.N. (no confundir con “red de área local”)
Lógicamente, la traducción desde un lenguaje de alto nivel a lenguaje máquina es mucho más compleja que desde lenguaje ensamblador, por lo que los traductores se han hecho cada vez más complicados.Una característica muy importante de los lenguajes de alto nivel es que son independientes del hardware, lo que implica que los programas desarrollados con estos lenguajes pueden ser ejecutados en ordenadores con hardware totalmente distinto. A esto se le llama portabilidad.
Los programas encargados de traducir el código de alto nivel a código máquina se llaman compiladores e intérpretes. Son programas muy complejos que generan el código binario equivalente al código de alto nivel para una máquina concreta. Por lo tanto, el programa de alto nivel, que es portable de un hardware a otro, debe ser traducido a código máquina en cada tipo de máquina en la que se pretenda ejecutar.
Ejemplos de lenguajes de alto nivel son: Cobol, C, Fortran, Basic, Pascal, Ada, etc.
Comparación entre los lenguajes de alto y bajo nivel
Lenguajes de alto nivel
Lenguajes de bajo nivel
Ventajas
Inconvenientes
· Son comprensibles directamente por la máquina (aunque el ensamblador necesita una pequeña traducción)
· Los programas se ejecutan muy rápidamente (si están bien escritos, claro)
· Ocupan menos espacio en memoria
· Permiten controlar directamente el hardware, por lo que son apropiados para la programación de sistemas
· Necesitan ser traducidos por medio de complicados programas (compiladores e intérpretes)
· La traducción automática del código de alto nivel al código máquina siempre genera programas menos eficientes que si se escribieran directamente en binario
· Ocupan más espacio en memoria
· En general, solo pueden acceder al hardware utilizando al sistema operativo como intermediario. Pero, entonces, ¿cómo programar el sistema operativo, que necesita controlar directamente el hardware?
Inconvenientes
Ventajas
· Son completamente dependientes del hardware. Un programa escrito para determinado tipo de máquina no funcionará en un ordenador con diferente arquitectura.
· Incluso los programas más sencillos son largos y farragosos
· Los programas son difíciles de escribir, depurar y mantener
· Es imposible resolver problemas muy complejos
· Son portables, es decir, independientes del hardware. Un programa escrito en una máquina puede funcionar en otra con hardware distinto, siempre que se vuelva a traducir a binario en la máquina nueva.
· Los programas son más sencillos, ya que una sola instrucción puede equivaler a varias instrucciones binarias.
· Los programas son más fáciles de escribir, depurar y mantener
· Es posible, aunque difícil, enfrentarse a problemas muy complejos
Enfrentando las ventajas e inconvenientes de unos y otros, se concluye que, en general, se prefiere usar lenguajes de alto nivel para el desarrollo de aplicaciones, reservando los de bajo nivel para casos muy concretos en los que la velocidad de ejecución o el control del hardware sean vitales. Por ejemplo, los sistemas operativos más conocidos, como Windows o GNU/Linux, están programados casi en su totalidad con lenguajes de alto nivel, reservando un pequeño porcentaje del código a rutinas en ensamblador.
También hay que destacar que no todos los lenguajes de alto nivel son iguales. Los hay de “más alto nivel” que otros. C tiene sin duda menor nivel de abstracción que, por ejemplo, Visual Basic; pero, por eso mismo, los programas en C son más rápidos y eficientes que los escritos en Visual Basic, aunque también pueden llegar a ser más difíciles de escribir y depurar.
Categorías dentro de los lenguajes de alto nivel
Para terminar con esta vista preliminar sobre el mundo de los lenguajes de programación, mencionaremos que los lenguajes de alto nivel se suelen subdividir en categorías tales como:
· Lenguajes de tercera generación (o imperativos), en los que el programador escribe una secuencia de instrucciones que el ordenador debe ejecutar en un orden preestablecido. Son los lenguajes que nosotros vamos a manejar. Todos los lenguajes “clásicos” pertenecen a esta categoría: C, Basic, Cobol, Fortran, etc.
· Lenguajes de cuarta generación (o 4GL), dirigidos a facilitar la creación de interfaces con el usuario y con otras aplicaciones, como las bases de datos.Un ejemplo de estos lenguajes es SQL.
· Lenguajes orientados a objetos, que son una evolucuión de los lenguajes de tercera generación y que permiten construir con mayor facilidad y robustez programas modulares complejos. Ejemplos de lenguajes orientados a objetos son C++ o Java.
· Lenguajes declarativos y funcionales, propios de la inteligencia artificial, como Prolog o Lisp.
· Otos tipos más específicos: lenguajes concurrentes, paralelos, distribuidos, etc.
En general, podemos decir que un programador acostumbrado a trabajar con un lenguaje de tercera generación puede aprender con poco esfuerzo cualquier otro lenguaje de tercera generación, y, con algo más de trabajo, un lenguaje orientado a objetos. Sin embargo, el “salto” a otros tipos de lenguajes, como los declarativos, cuesta más porque la raíz misma de estos lenguajes es diferente.
Lenguajes de cuarta generación
No existe consenso sobre lo que es un lenguaje de cuarta generación (4GL). Lo que en un lenguaje de tercera generación (3GL) como COBOL requiere cientos de líneas de código, tan solo necesita diez o veinte líneas en un 4GL. Comparado con un 3GL, que es procedural, un 4GL es un lenguaje no procedural: el usuario define qué se debe hacer, no cómo debe hacerse. Los 4GL se apoyan en unas herramientas de mucho más alto nivel denominadas herramientas de cuarta generación. El usuario no debe definir los pasos a seguir en un programa para realizar una determinada tarea, tan sólo debe definir una serie de parámetros que estas herramientas utilizarán para generar un programa de aplicación. Se dice que los 4GL pueden mejorar la productividad de los programadores en un factor de 10, aunque se limita el tipo de problemas que pueden resolver. Los 4GL abarcan:
Lenguajes de presentación, como lenguajes de consultas y generadores de informes.
Lenguajes especializados, como hojas de cálculo y lenguajes de bases de datos.
Generadores de aplicaciones que definen, insertan, actualizan y obtienen datos de la base de datos.
Lenguajes de muy alto nivel que se utilizan para generar el código de la aplicación.
Los lenguajes SQL y QBE son ejemplos de 4GL. Hay otros tipos de 4GL:
Un generador de formularios es una herramienta interactiva que permite crear rápidamente formularios de pantalla para introducir o visualizar datos. Los generadores de formularios permiten que el usuario defina el aspecto de la pantalla, qué información se debe visualizar y en qué lugar de la pantalla debe visualizarse. Algunos generadores de formularios permiten la creación de atributos derivados utilizando operadores aritméticos y también permiten especificar controles para la validación de los datos de entrada.
Un generador de informes es una herramienta para crear informes a partir de los datos almacenados en la base de datos. Se parece a un lenguaje de consultas en que permite al usuario hacer preguntas sobre la base de datos y obtener información de ella para un informe. Sin embargo, en el generador de informes se tiene un mayor control sobre el aspecto de la salida. Se puede dejar que el generador determine automáticamente el aspecto de la salida o se puede diseñar ésta para que tenga el aspecto que desee el usuario final.
Un generador de gráficos es una herramienta para obtener datos de la base de datos y visualizarlos en un gráfico mostrando tendencias y relaciones entre datos. Normalmente se pueden diseñar distintos tipos de gráficos: barras, líneas, etc.
Un generador de aplicaciones es una herramienta para crear programas que hagan de interface entre el usuario y la base de datos. El uso de un generador de aplicaciones puede reducir el tiempo que se necesita para diseñar un programa de aplicación. Los generadores de aplicaciones constan de procedimientos que realizan las funciones fundamentales que se utilizan en la mayoría de los programas. Estos procedimientos están escritos en un lenguaje de programación de alto nivel y forman una librería de funciones entre las que escoger. El usuario especifica qué debe hacer el programa y el generador de aplicaciones es quien determina cómo realizar la tarea.

No hay comentarios:

Publicar un comentario