Historia de los lenguajes de programacion
Genealogía de los lenguajes de programación
Con la idea de
facilitarnos las tareas que debemos de desempeñar los humanos, hemos venido
inventado diversas herramientas a lo largo de nuestra historia, que nos
permiten tener una mejor calidad de vida.
Los ordenadores
son uno más de los inventos del hombre, aunque debemos decir que las
tecnologías para su fabricación y explotación han tenido un desarrollo
sorprendente a partir de la segunda mitad del siglo XX. Esta herramienta por sí
sola no es capaz de efectuar ninguna tarea, es tan sólo un conjunto de cables y
circuitos que necesitan recibir instrucción por parte de los humanos para
desempeñar alguna tarea. El problema entonces, se puede fijar en ¿cómo vamos a
poder hacer que un conjunto de circuitos desempeñen una determinada tarea y nos
entreguen los resultados que nosotros esperamos?, es decir, ¿de qué manera se
puede lograr la comunicación entre el hombre y el ordenador?
Así pues, tratando
de dar una solución al problema planteado, surgieron los lenguajes de
programación, que son como un lenguaje cualquiera, pero simplificado y con
ciertas normas, para poder trasmitir nuestros deseos al ordenador.
Por otro lado,
como se sabe, un conjunto de circuitos no entendería ningún lenguaje que
nosotros conozcamos, por más sencillo que éste parezca. Los circuitos en todo
caso, sólo reconocen presencia o ausencia de energía, es decir que debemos
hablarle a la máquina en su propio lenguaje (presencia y ausencia de energía, 0
y 1), o nuestro lenguaje deberá de ser traducido a un lenguaje binario cuyo
alfabeto es el 0 y el 1, mediante las herramientas desarrolladas para llevar a
cabo esta tarea, las cuales reciben el nombre de traductores, y como veremos
más adelante, los hay de muchos tipos, dependiendo de características más
específicas del lenguaje a traducir y de la manera de llevar a cabo su
traducción.
Como ya habréis
entendido, para crear un lenguaje de programación, deberemos crear la
herramienta que lo traduce, y es justamente de ellas, de las que hablaremos a
continuación, para describir como han ido evolucionando en los últimos 50 años:
• 1946: Konrad Zuse , un ingeniero Alemán 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 cómputo electrónico, aunque se debe
decir que se trata de un lenguaje traducido a mano.
• 1951: Grace Hopper , trabajando para
Remington Rand, comenzó el trabajo de diseño del primer compilador conocido
ampliamente, el A-0, el cual, al ser liberado por la compañía 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 programación llamado AUTOCODE,
que viene a ser un compilador muy rudimentario.
• 1957: aparece FORTRAN (FORmula TRANslating) sistema
traductor de fórmulas matemáticas. Fue desarrollado por un equipo, al frente
del cual se encontraba John Backus quien después vendría a contribuir en el
desarrollo del compilador para el lenguaje ALGOL y de la notación usada para la
especificación sintáctica de los lenguajes, conocida como BNF (Backus Naur
Form).
A partir de los
años sesenta, empiezan a surgir diferentes lenguajes de programación,
atendiendo a diversos enfoques, características y propósitos, que más adelante
describiremos. Por lo pronto, puede decirse, que actualmente existen alrededor
de 2000 lenguajes de programación y continuamente, están apareciendo otros más
nuevos, que prometen hacer mejor uso de los recursos computacionales y
facilitar el trabajo de los programadores.

Evolución de los lenguajes de programación Imperativos y Orientados a objetos
Evolución de los lenguajes de programación declarativos
Como se puede observar en los cuadros, la
existencia de tantos lenguajes obedece a que cada uno de ellos esta
encaminado a resolver ciertas tareas dentro de la amplia
problemática de la explotación de la información, o bien, a que su
arquitectura, o su forma de llevar a cabo la programación, tiene un enfoque
particular.
De acuerdo con el estilo de programación, podemos
clasificar los lenguajes en las siguientes categorías:
• Imperativos: Son aquellos lenguajes, que 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 solución del problema.
Como un ejemplo ilustrativo vamos a escribir un
programa en un lenguaje de este tipo para calcular el factorial de un número
positivo x.
READ(x);
fac := 1 ;
for i = 1 to x
{
fac := fac * i ;
}
WRITELN(fac);
• Declarativos: En este paradigma, más que el ¿cómo? desarrollar paso a paso un
proceso, nos interesa el ¿qué? deseamos obtener a través del programa. Quizás
el lenguaje declarativo que nos sea más familiar, es SQL, el cual es utilizado
para interactuar con la información de bases de datos, concentrándose (como se
podrá observar en el siguiente ejemplo), sólo en los resultados que van a ser
obtenidos, dejándole al traductor la tarea de cómo llegar a ellos y
presentárnoslos.
SELECT
* FROM alumnos WHERE sexo
= "M" ORDER BY edad
Dentro de este paradigma, se encuentran dos estilos
distintos de programación, cada uno de los cuales posee su propia lógica.
o Funcionales: Son lenguajes basados en funciones, las cuales se representan
mediante expresiones, que nos permiten obtener ciertos resultados a partir de
una serie de argumentos. De hecho las expresiones están formadas por un
conjunto de términos, que a su vez pueden encapsular otras expresiones, para
con la evaluación de todas ellas, llegar a la solución deseada. Para describir
la idea, retomaremos el ejemplo del factorial escrito en el lenguaje funcional
Haskell.
fac
:: Integer -> Integer
fac
0 = 1
fac
x = x * fac (x-1)
o Lógicos: Este tipo de lenguajes se basan en el cálculo de predicados, la cual es
una teoría matemática que permite entre otras cosas, lograr que un ordenador
basándose en un conjunto de hechos y de reglas lógicas, pueda derivar en
soluciones inteligentes. El mismo ejemplo del factorial, se vería de la
siguiente manera, escrito en PROLOG.
factorial
(0, 1)
factorial
(X, Fac) :- Y is X-1, fac(Y, F2), Fac is F2 * X .
• Orientados a Objetos: Este último paradigma, como se puede observar en la figura 1,
algunas veces se mezcla con alguno de los otros 2 modelos, sin embargo mantiene
características propias, que lo diferencian claramente. Los programas de este
tipo, se concentran en los objetos que van a manipular, y no en la lógica
requerida para manipularlos. Ejemplos de objetos pueden ser: estudiantes,
coches, casas etc, cada uno de los cuales tendrá ciertas funciones (métodos) y
ciertos valores que los identifican, teniendo además, la facultad de
comunicarse entre ellos a través del paso de mensajes. Cabe mencionar con
más detalle los elementos fundamentales que deben de poseer este tipo de
lenguajes:
o Abstracción: Determinación de las características de los objetos, que sirven
para identificarlos y hacerlos diferentes a los demás.
o
Encapsulamiento: Es el proceso que
agrupa y almacena los elementos que definen la estructura y el comportamiento
de una abstracción, en un mismo lugar.
o
Modularidad: Es la propiedad de
agrupar las abstracciones que guardan cierta relación lógica, y a la vez
minimizar la interdependencia entre las diversas agrupaciones.
o
Jerarquía: Consiste en establecer
un orden o una clasificación de las abstracciones.
Además de estos elementos fundamentales, también
existen otros 3 elementos secundarios , que aunque son deseados, no son
indispensables para clasificar un lenguaje dentro de este estilo.
o
Tipificación: Mecanismo que intenta
restringir el intercambio entre abstracciones que poseen diversas
características.
o Persistencia: Es la propiedad de un objeto a continuar existiendo a través del
tiempo y/o del espacio.
o Concurrencia: Es la propiedad que distingue a los objetos activos, de los que no
lo están.
Webgrafia
https://unamer34.files.wordpress.com/2008/06/hlp.pdf
Comentarios
Publicar un comentario