Tipos de Lenguaje de Programacion
Tipos de Lenguaje de Programacion
Tipos de Lenguaje de Programacion
Los lenguajes contienen un conjunto variado de comandos, instrucciones, reglas, formas de organizar los datos y otros elementos, que permiten codificar programas con los que se indican las tareas que la mquina debe realizar para procesar un conjunto de informacin determinado y resolver un problema.
Un poco de historia 1946: Konrad Zuse , un ingeniero Alemn mientras trabajaba en los Alpes de Bavaria, desarroll el lenguaje Plankalkul, el cual, fue aplicado entre otras cosas para jugar al ajedrez. 1949: Aparece Short Code, que viene a ser el primer lenguaje que fue usado en un dispositivo de cmputo electrnico, aunque se debe decir que se trata de un lenguaje traducido a mano. 1951: Grace Hopper , trabajando para Remington Rand, comenz el trabajo de diseo del primer compilador conocido ampliamente, el A-0, el cual, al ser liberado por la compaa en 1957, lo hizo con el nombre de MATH-MATIC. 1952: Alick E. Glennie, durante su tiempo libre en la Universidad de Manchester, concibe un sistema de programacin llamado AUTOCODE, que viene a ser un compilador muy rudimentario. 1957: aparece FORTRAN (FORmula TRANslator) sistema traductor de frmulas matemticas. Fue desarrollado por un equipo, al frente del cual se encontraba John Backus quien despus vendra a contribuir en el desarrollo del compilador para el lenguaje ALGOL y de la notacin usada para la especificacin sintctica de los lenguajes, conocida como BNF (Backus NaurForm). Este es considerado como el primer lenguaje de programacin de alto nivel.
Clasificacin Los lenguajes de programacin se clasifican en: Segn su nivel de abstraccin De maquina: estn escritos en lenguajes directamente legibles por la mquina (computadora), ya que sus instrucciones son cadenas binarias (0 y 1). Da la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traduccin posterior lo que supone una velocidad de ejecucin superior, solo que con poca fiabilidad y dificultad de verificar y poner a punto los programas. De bajo nivel: son lenguajes de programacin que se acercan al funcionamiento de una computadora, por ejemplo el lenguaje ensamblador donde cada instruccin nmotcnica tiene un equivalente directo en cdigo mquina y se manipulan directamente los registros internos del procesador. De medio nivel: tienen ciertas caractersticas que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje ms cercano al humano y, por tanto, de alto nivel. Ejemplo: Lenguaje C, donde se opera directamente con direcciones de memoria. De alto nivel: son normalmente fciles de aprender porque estn formados por elementos de lenguajes naturales, como el ingls.
Segn su paradigma Imperativos: atienden al paradigma imperativo, basan su funcionamiento en un conjunto de instrucciones secuenciales, las cuales, al ejecutarse, van alterando las regiones de memoria donde residen todos los valores de las variables involucradas en el problema que se plantea resolver. Es decir, se cambia progresivamente el estado del sistema, hasta alcanzar la solucin del problema. Ejemplo: Pascal, C++. Declarativos: en estos lenguajes se describe el problema, indicando que es lo que se desea obtener o que es lo que se est buscando, se enfoca en el que no en el como, en oposicin a los lenguajes imperativos donde se indica
mediante un algoritmo como hallar la solucin. Ejemplo: SQL, Prolog, Haskell. Orientados a objetos: expresan un programa como un conjunto objetos, que colaboran entre ellos para realizar tareas, se concentran en los objetos que van manipular y no en la lgica requerida para manipularlos. Por lo general los lenguajes que utilizan este paradigma se mezclan con alguno de los dos paradigmas anteriores. Ejemplos: Java, C++.
Criterios de Diseo de Lenguajes de Programacin Simplicidad: debe poseer la menor cantidad de conceptos como sea posible, descartando aquellos elementos que sean superfluos. Uniformidad: los conceptos bsicos del lenguaje deben aplicarse de manera consistente y universal, es decir se debe ser capaz de utilizar las capacidades del lenguaje en diversos contextos sin cambiar su forma. Ortogonalidad: funciones independientes controladas por mecanismos independientes. deben ser
Abstraccin: deben de encapsularse los patrones recurrentes, tal como si de una caja se tratase, ocultando detalles de implementacin y permitiendo solo una inspeccin limitada del contenido. Claridad: los mecanismos del lenguaje deben estar bien definidos y el cdigo debe ser facilmente predecible, los programadores deben ser capaces de leer el programa y entenderlo facilmente. Ocultar informacin: las unidades del programa solo deben tener acceso a la informacin que ellas necesitan. Modularidad: las interfaces entre las unidades programacin deben ser declaradas explicitamente. de
Seguridad: los errores de semntica deben ser detectables, preferiblemente en tiempo de compilacin. Expresividad: debe ser expresable una amplia variedad de programas.
Efecto secundario Se dice que una funcin o expresin tiene efecto colateral o efecto secundario si esta, adems de retornar un valor, modifica el estado de su entorno. Por ejemplo, una funcin puede modificar una variable global o esttica, modificar uno de sus argumentos, escribir datos a la pantalla o a un archivo, o leer datos de otras funciones que tienen efecto secundario. Los efectos secundarios frecuentemente hacen que el comportamiento de un programa sea ms difcil de predecir. En la programacin imperativa para el desarrollo de los programas se hace uso del efecto secundario.
Transparencia Referencial Se refiere la propiedad por la cual "cuando una expresin E del lenguaje es sustituida por el valor V, y V es el resultado de evaluar E, la semntica del programa no se altera". Es decir, el resultado de evaluar una expresin compuesta depende nicamente del resultado de evaluar las subexpresiones que la componen y de nada ms; no depende de la historia del programa en ejecucin o del orden de evaluacin de las sub-expresiones que la componen. Por ende debe retornar siempre el mismo valor al facilitarse la misma entrada.
Principales Paradigmas Imperativo Es un paradigma de programacin que describe la programacin en trminos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cmo realizar una tarea. La implementacin de hardware de la mayora de computadores es imperativa; prcticamente todo el hardware de los computadores est diseado para ejecutar cdigo de mquina, que es nativo al computador, escrito en una forma imperativa.
Declarativo Es un paradigma de programacin que est basado en el desarrollo de programas especificando o "declarando" un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solucin. La solucin es obtenida mediante mecanismos internos de control, sin especificar exactamente cmo encontrarla. No existen asignaciones destructivas, y las variables son utilizadas con transparencia referencial.
Funcional Es un tipo de programacin declarativa basada en el modelo matemtico de composicin funcional. En este modelo, el resultado de un clculo es la entrada del siguiente, y as sucesivamente hasta que una composicin produce el resultado deseado. As, un programa es un conjunto de funciones que cooperan entre ellas para el logro de un objetivo comn.
Lgico Es un tipo de programacion declarativa que tiene como caracterstica principal la aplicacin de las reglas de la lgica para inferir conclusiones a partir de datos. Conociendo la informacin y las condiciones del problema, la ejecucin de un programa consiste en la bsqueda de un objetivo dentro de las declaraciones realizadas.
Orientado a Objetos Es un paradigma de programacin que usa objetos y sus interacciones para disear aplicaciones y programas de computadora. Es decir se fundamente en concebir a un sistema como un conjunto de entidades que representan al mundo real, los objetos, que tienen distribuida la funcionalidad e informacin necesaria y que cooperan entre s para el logro de un objetivo
comn . Est basado en varias tcnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se populariz a principios de la dcada de 1990.
Sintxis, Semntica y Pragmtica Sintxis La sintxis se enfoca en la notacin de las frases utilizadas para codficar en el lenguaje de programacin, es decir las reglas que determinan como se han de combinar los elementos que constituyen el lxico del lenguaje para formar sentencias o frases validas. Una frase puede ser codificada en diferentes tipos de notaciones considerando el siguiente ejemplo de la matemtica tradicional: vw + y/z Utilizando la notacin de Lenguaje C: v * w + y/z En un rbol de sintxis:
La notacin en en Lenguaje C es ligeramente diferente, en el grfico se realza la prioridad de resolucin de los operadores aritmticos.
Semntica La semntica establece la relacin entre la estructura de una frase y lo que esta significa. Existen varios enfoques para la definicin de la semntica de un lenguaje entre ellos tenemos: Semntica operacional: define el significado de un lenguaje de programacin en trminos de los cambios de estado que producen las instrucciones primitivas del lenguaje. Estos cambios no se reflejan directamente en la maquina real, sino en una maquina (virtual) abstracta asociada que sirve como instrumento de conexin con aquella. Expresado de otra forma, podemos decir que la semntica operacional define el significado de un programa en trminos del efecto producido por la ejecucin paso a paso del mismo, de tal modo que la especificacin de las instrucciones del lenguaje mediante instrucciones primitivas de la maquina abstracta es, precisamente, la definicin semntica del mismo. A pesar de la aparente simplicidad de este formalismo, este tipo de semntica no describe con igual claridad todo tipo de lenguaje de programacin. El motivo es que el mecanismo que emplean los distintos lenguajes de programacin para realizar un cmputo no siempre puede expresarse de una manera clara, comprensible y concisa. Cada estado de la maquina abstracta se denomina configuracin. Semntica denotacional: define unas aplicaciones (funciones) de valoracin semntica que asignan a cada construccin denotada tal objeto matemtico que modela su significado. La semntica denotacional indica que funcin matemtica se obtiene a la salida ante unas entradas del programa, sin preocuparse de la ejecucin paso a paso del programa. El primer paso a realizar en la definicin de la semntica denotacional de un determinado lenguaje es el establecimiento de un dominio semantico al que pertenecern los resultados obtenidos de la evaluacin de las construcciones del lenguaje. Esta evaluacin es proporcionada por un conjunto de funciones de significado cuyo dominio esta constituido por el conjunto de construcciones del lenguaje y cuyo rango (o imagen) viene dado por el dominio semntico. Este tipo de semntica dotan de significado a los elementos del lenguaje de una manera mas formal y abstracta, pero sin embargo tambin necesitan
un mayor conocimiento de conceptos matemticos, que no tienen por que ser bsicos ni elementales. Semntica axiomtica: asocia a cada construccin del lenguaje un axioma lgico que relaciona el estado del computo (valores que tienen las variables utilizadas) antes y despus de ejecutar esta construccin. El mtodo axiomatico expresa la semntica de un lenguaje de programacin asociado al lenguaje una teora matemtica o sistema formal que permita demostrar propiedades de los programas escritos en ese lenguaje. Esta aproximacin formal contrasta con el mtodo denotacional, que asocia a cada construccin del lenguaje una denotacin (significado) en un intento de encontrar un modelo matemtico (coleccin abstracta de objetos matemticos) del lenguaje.
Pragmtica Mientras que la semntica se enfoca en que es lo que significa una frase, la pragmtica se enfoca mas bien en como esa frase es procesada o computada. Le es de particular interes el uso efectivo de varios recursos como tiempo, espacio y acceso a los dispositivos fsicos (dispositivos de almacenamiento, redes, impresoras, etc).
Traductor Es un programa que traduce de un lenguaje de alto nivel a uno de bajo nivel. Estos pueden ser de dos tipos:
Compilador Es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es cdigo mquina, pero tambin puede ser simplemente texto. Este proceso de traduccin se conoce como compilacin. Normalmente esta divididos en dos partes:
Front End: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar. Back End: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End.
Interprete Es un programa informtico capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intrpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripcin en un lenguaje de programacin al cdigo mquina del sistema destino, los primeros (los interpretes) slo realizan la traduccin a medida que sea necesario, tpicamente, instruccin por instruccin, y normalmente no guardan el resultado de dicha traduccin.
Bibliografa Finkel Raphael (1996). Advanced Programming Language Design. Editorial Addison-Wesley. I.E.S. Francisco Romero Vargas (2009). Fundamentos de Programacin. Disponible en: [http://www.iesromerovargas.net/DAI/ PLE/docs/TEMA1Apendice.pdf]. Consultada: 16 de Marzo de 2009. Slonneger K. y Kurtz B. (1995). Formal Syntax and Sematics of Programming Language. Editorial Addison-Wesley. Turbak F., Gifford D. Y Sheldon M. (2008). Design Concepts in Programming Language. Editorial The MIT Press. Universidad Tecnolgica de Buenos Aires (2009). Fundamentos Tericos de los Paradigmas de Programacin. Disponible en: [http:// www.pol.una.py/archivos/asi/paradigmas/FundamTeoricosParadigPro g.pdf]. Consultada: 16 de Marzo de 2009. Wikipedia (2009). Lenguajes de Programacin. Disponible en: [http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n]. Consultada: 16 de Marzo de 2009. Wikipedia (2009). Compilador. Disponible en: [http://es.wikipedia.org/wiki/Compilador]. Consultada: 16 de Marzo de 2009. Wikipedia (2009). Interprete. Disponible en: [http://es.wikipedia.org/ wiki/Int%C3%A9rprete_inform%C3%A1tico]. Consultada: 16 de Marzo de 2009.