historia lenguajes de programación
TRANSCRIPT
-
7/30/2019 Historia Lenguajes de Programacin
1/64
FACULTAD DE INGENIERAFACULTAD DE INGENIERA
E.A.P. INGENIERA DE SISTEMAS E INFORMTICAE.A.P. INGENIERA DE SISTEMAS E INFORMTICA
MANUAL DEL CURSO:MANUAL DEL CURSO:
Teora de LenguajesTeora de Lenguajes(Unidad I)(Unidad I)
Tema:
Introduccin a la teora de LenguajesIntroduccin a la teora de Lenguajes
Dictado por:
DIANA CECILIA MUOZ CASANOVADIANA CECILIA MUOZ CASANOVA
M.S. en Ingeniera de Sistemas e Informtica
CHIMBOTE PERCHIMBOTE PER
20072007
-
7/30/2019 Historia Lenguajes de Programacin
2/64
CAPTULO I: HISTORIA DE LOS LENGUAJES DE PROGRAMACIN
1.1. Introduccin 21.2. Historia de los lenguajes de programacin 31.3. Tendencias en los lenguajes de programacin 7
CAPTULO II: EVOLUCIN DE LOS LENGUAJES DE PROGRAMACIN
2.1. Evolucin de los lenguajes de programacin 112.1.1.Estructurados vs. No estructurados 11
2.1.2.1985-1990 y el nacimiento del xbase 112.1.3.Los primeros aos, 1990-1995: las bases de datos relacionales 122.1.4.La segunda mitad, 1995-2000: la orientacin a objetos 122.1.5.El fin de los lenguajes D.O.S. 132.1.6.2000 y ms all: lenguajes visuales 132.1.7.Una visin a la web y al futuro: html, perl, php, pithon, java y otros 14
2.2. Generaciones de lenguajes de programacin 152.3. Tipos de lenguaje de programacin segn su campo de aplicacin. 152.4. Tipos de lenguaje de programacin en funcin al estilo de programar 162.5. Lenguajes imperativos 162.6. Lenguajes funcionales 18
2.6.1.Concepto matemtico de funcin. 182.6.2.Concepto de lenguajes funcionales. 192.6.3.Categoras de lenguajes funcionales. 202.6.4.Problemas del modelo imperativo 20
2.7. Lenguajes lgicos (declarativos) 222.8. Lenguajes orientados a objetos 262.9. Lenguajes con concurrencia 272.10.Evolucin de los lenguajes de programacin declarativos 292.11.Evolucin de los lenguajes de programacin orientado a objetos e
Imperativos 30
CAPTULO III: CONCEPTOS EN LOS LENGUAJES DE PROGRAMACIN
3.1. Qu es lo que constituye un buen lenguaje? 313.1.1.Atributos de un buen lenguaje 313.1.2.Estandarizacin de los lenguajes 32
3.2. Sintaxis de lenguajes de programacin 323.3. Tipos de datos 333.4. Abstraccin 343.5. Abstraccin en programacin 343.6. Clases de abstraccin 35
3.6.1.Abstraccin de control 353.6.2.Abstraccin de datos. 37
-
7/30/2019 Historia Lenguajes de Programacin
3/64
3.7. Tipos abstractos de datos (TADS) 373.8. Lenguajes de programacin y TADS 373.9. Lenguajes de programacin que deberas aprender 39
3.9.1.PHP 393.9.2.C# 39
3.9.3.AJAX 403.9.4.Javascript 403.9.5.PERL 413.9.6.C413.9.7.Ruby y ruby on rails 413.9.8.ASP 42
CAPTULO IV: LENGUAJES DE BAJO, MEDIO Y ALTO NIVEL
4.1. Introduccin 43
4.2. Lenguajes de bajo nivel 434.2.1.Lenguaje mquina. 444.2.2.Ensamblador. 44
A) Ventajas del lenguaje ensamblador 45B) Desventajas del lenguaje ensamblador 48
4.3. Lenguajes de medio nivel 494.4. Lenguajes De Alto Nivel 524.5. Generadores de aplicaciones o 4 nivel 53
CAPTULO V: ELEMENTOS DE UN LENGUAJE DE PROGRAMACIN
5.1. Elementos sintcticos de un lenguaje 545.2. Tipos de datos 555.3. Notaciones de expresiones 565.4. Propiedad asociativa y precedencia 565.5. Representacin de rbol para expresiones 575.6. Evaluacin de expresiones 57
5.6.1.Evaluacin mediante la reconstruccin de un rbol 575.6.2.Evaluacin mediante una pila 58
A) Algoritmo para transformar una notacin infija a postfija 58
B) Tabla de prioridades. 60C) Algoritmo (pseudocdigo) 60
-
7/30/2019 Historia Lenguajes de Programacin
4/64
-
7/30/2019 Historia Lenguajes de Programacin
5/64
-
7/30/2019 Historia Lenguajes de Programacin
6/64
CAPTULO I: HISTORIA DE LOS LENGUAJES DE
PROGRAMACIN
1.1. INTRODUCCIN
Una computadora es una mquina que solo comprende las instrucciones que se le
den en un determinado formato. Cada mquina reconoce y ejecuta un nmero de
instrucciones diferentes que se agrupan en los distintos lenguajes de
programacin.
Un lenguaje de programacin es un conjunto limitado de palabras y de smbolos
que representan procedimientos, clculos, decisiones y otras operaciones quepueden ejecutar una computadora. A pesar de que en este trabajo parte de la
divisin de lenguajes de programacin en imperativos y declarativos (los cuales a
su vez se dividen en numerosos subgrupos), la clasificacin ms comn y bsica
que suele hacerse de los lenguajes de programacin es la que los divide en
lenguajes de bajo y de alto nivel. Los lenguajes de programacin de bajo nivel
fueron los primeros que surgieron y se llaman as porque estn directamente
relacionados con el hardware del computador, es decir, el usuario introduce una
serie de cdigos numricos que la mquina va a interpretar como instrucciones.
Para usar este lenguaje, el programador tena que conocer el funcionamiento de la
mquina al ms bajo nivel y los errores de programacin eran muy frecuentes.
Los lenguajes de alto nivel surgieron con posterioridad con el primer compilador
de FORTRAN (FORmula TRANslation), que, como su nombre indica, inici
como un "simple" esfuerzo de traducir un lenguaje de frmulas, al lenguaje
ensamblador y por consiguiente al lenguaje de mquina, facilitando la labor a los
programadores. A partir de FORTRAN, se han desarrollado innumerables
lenguajes, que siguen el mismo concepto: facilitar la vida al programador,
aumentando la productividad. Estos lenguajes usan un nmero reducido de
instrucciones (normalmente en ingls) que siguen unas estrictas reglas
gramaticales que se conocen como sintaxis del lenguaje. Pero aunque el
programador de esta forma se distancie del hardware del computador, este sigue
trabajando en lenguaje mquina. Por ello se hace necesaria una traduccin a una
-
7/30/2019 Historia Lenguajes de Programacin
7/64
secuencia de instrucciones interpretables por el computador. Esta labor es llevada
a cabo por los compiladores y los intrpretes.
El compilador es un programa que se encarga de la traduccin global del programa
realizado por el usuario. Esta operacin recibe el nombre de compilacin. El
programa es traducido completamente antes de que se ejecute, por lo que la
ejecucin se realiza en un periodo muy breve. El intrprete por el contrario lleva a
cabo una traduccin inmediata en el momento de la ejecucin, es decir, ir
ejecutando las instrucciones una a una haciendo que el proceso requiera un
periodo de tiempo sensiblemente mayor del que necesitara un compilador. Los
intrpretes son usados para traducir programas de alta dificultad de
implementacin, en estos casos, las rdenes a traducir son de tal complejidad que
no merece la pena crear un compilador ya que este tambin tendra que ser de una
complejidad por encima de lo normal.
Hay que mencionar la existencia de lenguajes que combinan caractersticas de los
de alto nivel y los de bajo nivel (es decir, Ensamblador). Un ejemplo es C:
contiene estructuras de programacin de alto nivel; sin embargo, fue diseado con
muy pocas instrucciones, las cuales son sumamente sencillas, fciles de traducir al
lenguaje de la mquina; y requiere de un entendimiento apropiado de cmo
funciona la mquina, el uso de la memoria, etctera. Por ello, algunos consideran a
lenguajes como C (que fue diseado para hacer sistemas operativos), lenguajes de
nivel medio, si bien, son considerados mayoritariamente de bajo nivel.
1.2. HISTORIA DE LOS LENGUAJES DE PROGRAMACIN
Los primeros lenguajes de programacin surgieron de la idea de Charles Babagge,
la cual se le ocurri a este hombre a mediados del siglo XIX. Era un profesormatemtico de la universidad de Cambridge e inventor ingles, que la principio del
siglo XIX predijo muchas de las teoras en que se basan los actuales ordenadores.
Consista en lo que l denominaba la maquina analtica, pero que por motivos
tcnicos no pudo construirse hasta mediados del siglo XX. Con l colaboro Ada
Lovedby, la cual es considerada como la primera programadora de la historia, pues
realizo programas para aqulla supuesta maquina de Babagge, en tarjetas
perforadas. Como la maquina no llego nunca a construirse, los programas de Ada,
lgicamente, tampoco llegaron a ejecutarse, pero si suponen un punto de partida
-
7/30/2019 Historia Lenguajes de Programacin
8/64
de la programacin, sobre todo si observamos que en cuanto se empez a
programar, los programadores utilizaron las tcnicas diseadas por Charles
Babagge, y Ada, que consistan entre otras, en la programacin mediante tarjetas
perforadas. A pesar de ello, Ada ha permanecido como la primera programadora
de la historia. Se dice por tanto que estos dos genios de antao, se adelantaron un
siglo a su poca, lo cual describe la inteligencia de la que se hallaban dotados.
En 1823 el gobierno Britnico lo apoyo para crear el proyecto de una mquina de
diferencias, un dispositivo mecnico para efectuar sumas repetidas. Pero Babagge
se dedico al proyecto de la mquina analtica, abandonando la maquina de
diferencias, que se pudiera programar con tarjetas perforadas, gracias a la creacin
de Charles Jacquard (francs). Este hombre era un fabricante de tejidos y haba
creado un telar que poda reproducir automticamente patrones de tejidos, leyendo
la informacin codificada en patrones de agujeros perforados en tarjetas de papel
rgido. Entonces Babagge intento crear la mquina que se pudiera programar con
tarjetas perforadas para efectuar cualquier clculo con una precisin de 20 dgitos.
Pero la tecnologa de la poca no bastaba para hacer realidad sus ideas. Si bien las
ideas de Babagge no llegaron a materializarse de forma definitiva, su contribucin
es decisiva, ya que los ordenadores actuales responden a un esquema anlogo al de
la mquina analtica. En su diseo, la mquina constaba de cinco unidades bsicas:
1) Unidad de entrada, para introducir datos e instrucciones.
2) Memoria, donde se almacenaban datos y resultados intermedios.
3) Unidad de control, para regular la secuencia de ejecucin de las operaciones.
4) Unidad Aritmtico-Lgica, que efecta las operaciones.
5) Unidad de salida, encargada de comunicar al exterior los resultados.
Charles Babbage, conocido como el "padre de la informtica" no pudo completaren aquella poca la construccin del computador que haba soado, dado que
faltaba algo fundamental: la electrnica. El camino sealado de Babbage, no fue
nunca abandonado y siguindolo, se construyeron las primeras computadoras.
Al desarrollarse las primeras computadoras electrnicas, se vio la necesidad de
programarlas, es decir, de almacenar en memoria la informacin sobre la tarea que
iban a ejecutar. Las primeras se usaban como calculadoras simples; se les
indicaban los pasos de clculo, uno por uno.
-
7/30/2019 Historia Lenguajes de Programacin
9/64
John Von Neumann desarroll el modelo que lleva su nombre, para describir este
concepto de "programa almacenado". En este modelo, se tiene una abstraccin de
la memoria como un conjunto de celdas, que almacenan simplemente nmeros.
Estos nmeros pueden representar dos cosas: los datos, sobre los que va a trabajar
el programa; o bien, el programa en s.
Cmo es que describimos un programa como nmeros? Se tena el problema de
representar las acciones que iba a realizar la computadora, y que la memoria, al
estar compuesta por switches correspondientes al concepto de bit, solamente nos
permita almacenar nmeros binarios.
La solucin que se tom fue la siguiente: a cada accin que sea capaz de realizar
nuestra computadora, asociarle un nmero, que ser su cdigo de operacin
(opcode). Por ejemplo, una calculadora programable simple podra asignar los
opcodes:
1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE.
Supongamos que queremos realizar la operacin 5 * 3 + 2, en la calculadora
descrita arriba. En memoria, podramos "escribir" el programa de la siguiente
forma: Localidad Opcode Significado Comentario 0 5 5 En esta localidad,
tenemos el primer nmero de la frmula 1 3 * En esta localidad, tenemos el
opcode que representa la multiplicacin. 2 3 3 En esta localidad, tenemos el
segundo nmero de la frmula 3 1 + En esta localidad, tenemos el opcode que
representa la suma. 4 2 2 En esta localidad, tenemos el ltimo nmero de la
frmula. Podemos ver que con esta representacin, es simple expresar las
operaciones de las que es capaz el hardware (en este caso, nuestra calculadora
imaginaria), en la memoria.
La descripcin y uso de los opcodes es lo que llamamos lenguaje de mquina. Es
decir, la lista de cdigos que la mquina va a interpretar como instrucciones,describe las capacidades de programacin que tenemos de ella; es el lenguaje ms
primitivo, depende directamente del hardware, y requiere del programador que
conozca el funcionamiento de la mquina al ms bajo nivel.
Los lenguajes ms primitivos fueron los lenguajes de mquina. Esto, ya que el
hardware se desarroll antes del software, y adems cualquier software finalmente
tiene que expresarse en el lenguaje que maneja el hardware.
La programacin en esos momentos era sumamente tediosa, pues el programadortena que "bajarse" al nivel de la mquina y decirle, paso a pasito, cada punto de la
-
7/30/2019 Historia Lenguajes de Programacin
10/64
tarea que tena que realizar. Adems, deba expresarlo en forma numrica; y por
supuesto, este proceso era propenso a errores, con lo que la productividad del
programador era muy limitada. Sin embargo, hay que recordar que en estos
momentos, simplemente an no exista alternativa.
El primer gran avance que se dio, fue la abstraccin dada por el Lenguaje
Ensamblador, y con l, el nacimiento de las primeras herramientas automticas
para generar el cdigo mquina. Esto redujo los errores triviales, como poda ser
el nmero que corresponda a una operacin, que son sumamente engorrosos y
difciles de detectar, pero fciles de cometer. Sin embargo, an aqu es fcil para el
programador perderse y cometer errores de lgica, pues debe bajar al nivel de la
forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de l.
Con el desarrollo en los 50s y 60s de algoritmos de ms elevado nivel, y el
aumento de poder del hardware, empezaron a entrar al uso de computadoras
cientficos de otras ramas; ellos conocan mucho de Fsica, Qumica y otras ramas
similares, pero no de Computacin, y por supuesto, les era sumamente complicado
trabajar con lenguaje Ensamblador en vez de frmulas. As, naci el concepto de
Lenguaje de Alto Nivel, con el primer compilador de FORTRAN (FORmula
TRANslation), que, como su nombre indica, inici como un "simple" esfuerzo de
traducir un lenguaje de frmulas, al lenguaje ensamblador y por consiguiente al
lenguaje de mquina. A partir de FORTRAN, se han desarrollado innumerables
lenguajes, que siguen el mismo concepto: buscar la mayor abstraccin posible, y
facilitar la vida al programador, aumentando la productividad, encargndose los
compiladores o intrpretes de traducir el lenguaje de alto nivel, al lenguaje de
computadora.
Hay que notar la existencia de lenguajes que combinan caractersticas de los de
alto nivel y los de bajo nivel (es decir, Ensamblador). El ejemplo mas apropiadopodra ser el lenguaje C ya que puede acceder a los registros del sistema, trabajar
con direcciones de memoria, todas ellas caractersticas de lenguajes de bajo nivel
y a la vez realizar operaciones de alto nivel.
-
7/30/2019 Historia Lenguajes de Programacin
11/64
1.3. TENDENCIAS EN LOS LENGUAJES DE PROGRAMACIN
El estudio de los lenguajes de programacin agrupa tres intereses diferentes; el del
programador profesional, el del diseador del lenguaje y del Implementador del
lenguaje.
Adems, estos tres trabajos han de realizarse dentro de las ligaduras y capacidades
de la organizacin de una computadora y de las limitaciones fundamentales de la
propia "calculabilidad".
El termino "el programador" es un tanto amorfo, en el sentido de que camufla
importantes diferencias entre distintos niveles y aplicaciones de la
programacin. Claramente el programador que ha realizado un curso de doce
semanas en COBOL y luego entra en el campo del procesamiento de datos es
diferente del programador que escribe un compilador en Pascal, o del
programador que disea un experimento de inteligencia artificial en LISP, o
del programador que combina sus rutinas de FORTRAN para resolver un
problema de ingeniera complejo, o del programador que desarrolla un sistema
operativo multiprocesador en ADA.
El "diseador del lenguaje" es tambin un termino algo nebuloso. Algunos
lenguajes (como APL y LISP) fueron diseados por una sola persona con un
concepto nico, mientras que otros (FORTRAN y COBOL) son el producto de
desarrollo de varios aos realizados por comits de diseo de lenguajes.
El "Implementador del lenguaje" es la persona o grupo que desarrolla un
compilador o interprete para un lenguaje sobre una maquina particular o tipos
de maquinas. Mas frecuentemente, el primer compilador para el lenguaje Y
sobre la maquina X es desarrollada por la corporacin que manufactura la
maquina X. Por ejemplo, hay varios compiladores de Fortran en uso; unodesarrollado por IBM para una maquina IBM, otro desarrollado por DEC para
una maquina DEC, otro por CDC, y as sucesivamente. Las compaas de
software tambin desarrollan compiladores y tambin lo hacen los grupos de
investigacin de las universidades
Hay tambin muchos aspectos compartidos entre los programadores, diseadores
de un lenguaje implementadores del mismo. Cada uno debe comprender lasnecesidades y ligaduras que gobiernan las actividades de los otros dos.
-
7/30/2019 Historia Lenguajes de Programacin
12/64
Hay, al menos, dos formas fundamentales desde las que pueden verse o
clasificarse los lenguajes de programacin: por su nivel y por principales
aplicaciones. Adems, estas visiones estn condicionadas por la visin histrica
por la que ha transcurrido el lenguaje
Los "Lenguajes Declarativos" son los ms parecidos al castellano o ingles en su potencia
expresiva y funcionalidad estn en el nivel mas alto respecto a los otros. Son
fundamentalmente lenguajes de ordenes, dominados por sentencias que expresan "Lo que
hay que hacer" en ves de "Como hacerlo".
Los lenguajes de " Alto Nivel" son los mas utilizados como lenguaje de programacin.
Aunque no son fundamentalmente declarativos, estos lenguajes permiten que los
algoritmos se expresen en un nivel y estilo de escritura fcilmente legible y comprensible
por otros programadores.Los "Lenguajes Ensambladores" y los "Lenguajes Maquina" son dependientes de la
maquina. Cada tipo de maquina, tal como VAX de digital, tiene su propio lenguaje
maquina distinto y su lenguaje ensamblador asociado. El lenguaje Ensamblador es
simplemente una representacin simblica del lenguaje maquina asociado, lo cual permite
una programacin menos tediosa que con el anterior.
La programacin de un lenguaje de alto nivel o en un lenguaje ensamblador requiere, por
tanto, algn tipo de interfaz con el lenguaje maquina para que el programa pueda
ejecutarse. Las tres interfaces mas comunes: un "ensamblador" , un "compilador" y un"interprete". El ensamblador y el compilador traduce el programa a otro equivalente en el
lenguaje X de la maquina "residente" como un paso separado antes de la ejecucin. Por
otra parte, el interprete ejecuta directamente las instrucciones en un lenguaje Y de alto
nivel, sin un paso de procesamiento previo.
Algunos lenguajes son lenguajes principalmente interpretados, como APL, PROLOG y
LISP. El resto de los lenguajes -- Pascal, FORTRAN, COBOL, PL/I, SNOBOL, C, Ada y
Modula-2 son normalmente lenguajes compilados. En algunos casos, un compilador
estar utilizable alternativamente para un lenguaje interpretado (tal como LISP) einversamente (tal como el interprete SNOBOL4 de los laboratorios Bell). Frecuentemente
la interpretacin es preferible a la compilacin en un entorno de programacin
experimental o de educacin, donde cada nueva ejecucin de un programa implicado un
cambio en el propio texto del programa. La calidad de diagnosis y depuracin que
soportan los lenguajes interpretados es generalmente mejor que la de los lenguajes
compilados, puesto que los mensajes de error se refieren directamente a sentencias del
texto del programa original. Adems, la ventaja de la eficiencia que se adjudica
tradicionalmente a los lenguajes compilados frente a los interpretados puede pronto ser
-
7/30/2019 Historia Lenguajes de Programacin
13/64
eliminado, debido a la evolucin de las maquinas cuyos lenguajes son ellos
mismos1lenguajes de alto nivel. Como ejemplo de estos estn las nuevas maquinas LISP,
las cuales han sido diseadas recientemente por Symbolics y Xerox Corporations.
Los lenguajes de Programacin son tomados de diferentes perspectivas. Es importante
para un programador decidir cuales conceptos emitir o cuales incluir en la programacin.
Con frecuencia el programador es osado a usar combinaciones de conceptos que hacen al
lenguaje "DURO" de usar, de entender e implementar. Cada programador tiene en mente
un estilo particular de programacin, la decisin de incluir u omitir ciertos tipos de datos
que pueden tener una significativa influencia en la forma en que el Lenguaje es usado, la
decisin de usar u omitir conceptos de programacin o modelos.
Existen cinco estilo de programacin y son los siguientes:
1. Imperativa : Entrada, procesamiento y salidas de Datos.
2. Funcional : "Funciones", los datos son funciones, los resultados pueden ser un valor
o una funcin.
3. Lgico : {T,F} + operaciones lgicos (Inteligencia Artificial).
4. Orientados a Objetos: Clases, encapsulamiento de datos Herencia de datos,
polimorfismo
5. Concurrente.
El programador, diseador e implementador de un lenguaje de programacin debencomprender la evolucin histrica de los lenguajes para poder apreciar por que presentan
caractersticas diferentes. Por ejemplo, los lenguajes "mas jvenes" desaconsejan (o
prohiben) el uso de las sentencias GOTO como mecanismo de control inferior, y esto es
correcto en el contexto de las filosofas actuales de ingeniera del software y
programacin estructurada. Pero hubo un tiempo en que la GOTO, combinada con la IF,
era la nica estructura de control disponible; el programador no dispone de algo como la
construccin WHILE o un IF-THEN-ELSE para elegir. Por tanto, cuando se ve un
lenguaje como FORTRAN, el cual tiene sus races en los comienzos de la historia de los
lenguajes de programacin, uno no debe sorprenderse de ver la antigua sentencia GOTO
dentro de su repertorio.
Lo mas importante es que la historia nos permite ver la evolucin de familias de
lenguajes de programacin, ver la influencia que ejercer las arquitecturas y aplicaciones
de las computadoras sobre el diseo de lenguajes y evitar futuros defectos de diseo
aprendido las lecciones del pasado. Los que estudian se han elegido debido a su mayor
influencia y amplio uso entre los programadores, as como por sus distintas caractersticas
de diseo e implementacion. Colectivamente cubren los aspectos ms importantes con los
-
7/30/2019 Historia Lenguajes de Programacin
14/64
que ha de enfrentarse el diseado de lenguajes y la mayora de las aplicaciones con las
que se enfrenta el programador.
Tambin varios lenguajes estn prefijados por las letras ANSI. Esto significa que el
American National Standards Institute ha adoptado esa versin del lenguaje como el
estndar nacional. Una vez que un lenguaje esta estandarizado, las maquinas que
implementan este lenguaje deben cumplir todas las especificaciones estndares,
reforzando as el mximo de transportabilidad de programas de una maquina a otra. La
polica federal de no comprar maquinas que no cumplan la versin estndar de cualquier
lenguaje que soporte tiende a "fortalecer" el proceso de estandarizacion, puesto que el
gobierno es, con mucho, el mayor comprador de computadoras de la nacin.
Finalmente, la notacin algebraica ordinaria, por ejemplo, influyo fuertemente en el
diseo de FORTRAN y ALGOL. Por otra parte, el ingles influyo en el desarrollo del
COBOL. El lambda calculo de Church dio los fundamentos de la notacin funcional de
LISP, mientras que el algoritmo de Markov motivo el estilo de reconocimiento de formas
de SNOBOL. La arquitectura de computadoras de Von Neumann, la cual fue una
evolucin de la maquina mas antigua de Turing, es el modelo bsico de la mayora de los
diseos de computadoras de las ultimas tres dcadas. Esta maquina no solo influyeron en
los primeros lenguajes sino que tambin suministraron el esqueleto operacional sobre el
que evoluciono la mayora de la programacin de sistemas.
Una discusin mas directa de todos estos primeros modelos no estn entre los objetivos de
este texto. Sin embargo, es importante apuntar aqu debido a su fundamental influencia en
la evolucin de los primeros lenguajes de programacin, por una parte, y por su estado en
el ncleo de la teora de la computadora, por otra. Mas sobre este punto, cualquier
algoritmo que pueda describirse en ingles o castellano puede escribirse igualmente como
una maquina de Turing (maquina de Von Neumann), un algoritmo de Markov o una
funcin recursiva. Esta seccin, conocida ampliamente como "tesis de Church", nos
permite escribir algoritmos en distintos estilos de programacin (lenguajes) sin sacrificar
ninguna medida de generalidad, o potencia de programacin, en la transicin.
-
7/30/2019 Historia Lenguajes de Programacin
15/64
CAPTULO II: EVOLUCIN DE LOS LENGUAJES DE
PROGRAMACIN
2.1. EVOLUCIN DE LOS LENGUAJES DE PROGRAMACIN
2.1.1.ESTRUCTURADOS VS. NO ESTRUCTURADOS
A partir de C el gran lenguaje, y Pascal; se dividen los lenguajes en
estructurados (aquellos que en su codificacin usaban una estructura jerrquica
de procedimientos y funciones), en contraposicin a los lenguajes no
estructurados como el Basic cuya codificacin se basaba en lneas de
programacin, permitiendo al programador "saltar" de una lnea de instruccina otra, haciendo que el cdigo fuera algunas veces inentendible y muy difcil
de mantener (modificar) porque no segua una estructura.
Basic de todos modos evolucion, primero con el ahora primitivo GW Basic,
teniendo su mxima expresin con el Quick Basic del D.O.S. 5.0, el cual ya
inclua algunos conceptos mas de avanzada y ms "aggiornados" a lo que eran
sus contrapartes estructuradas.
2.1.2.1985-1990 Y EL NACIMIENTO DEL XBASE
DBase fue el gran desarrollo para base de datos de los aos 80. Bajo la batuta
de la firma Ashton Tate, empresa que dio origen a un interprete de bases de
datos muy sencillo y poderoso: dBbase II. Luego vinieron el dBase III+ que
hizo furor, y la etapa de la decadencia para dBase: el dBase IV, ya bajo la
direccin de Borland.
As surgi el gran compilador Clipper, de Nantucket Corp., en su versin
Autumm 86 que permita generar ejecutables libres de royalties y sin runtimes,
incluso tomando en forma directa el cdigo dBase. Pero no solo era eso,
proveia cientos de comandos y funciones para potenciar al dBase.
Al ver el xito de dBase y Clipper, surgi la empresa Fox Software que
desarrollo el FoxBase (un clon de dBase III+) y supero al "maestro" con su
versin Fox Plus, pero aun as, nunca pudo superar a Clipper ya que siempre
lidio con su poltica de necesitar de runtimes para su ejecucin, cosa que
Clipper nunca necesit.
-
7/30/2019 Historia Lenguajes de Programacin
16/64
2.1.3.LOS PRIMEROS AOS, 1990-1995: LAS BASES DE DATOS
RELACIONALES
A principios de la dcada pasada, se nota la evolucin de los lenguajes de
programacin. En forma profesional y aplicaciones de alto nivel, el lenguaje
preferido era C.
Para el aprendizaje se usaba Pascal, que permita inculcar el concepto de
programacin estructurada.
Tambin Basic, era un lenguaje utilizado, no en pocas ocasiones en forma
profesional, aunque con ciertas limitaciones; su reinado estuvo en los aos 80.
En lenguaje C, fue y todava es el gran artfice de la computacin actual. A
partir de el se desarrollaron compiladores que realmente constituan otros
lenguajes de programacin. Es decir un lenguaje que crea otros lenguajes. Tal
es el caso de la estrella de la primera mitad de la dcada pasada: Clipper de
Nantucket Corp., el gran compilador de lenguaje Xbase. Clipper fue criticado
por los profesionales de la programacin quienes aducan que no era un
lenguaje, sino un simple compilador nacido de la necesidad de aligerar la
ejecucin de cdigo del Interprete que le dio su origen, es decir el dBase. Pero
realmente Clipper, gracias a llevar dentro su cdigo un corazn de lenguaje C,
fue muy fcil de utilizar y alcanzo gran popularidad.
Se desarrollaron librera externas, y con la programacin al estilo C a partir de
su versin 5.0 y la inclusin de objetos, se convirti en uno de los favoritos de
la programacin administrativa, junto con Pascal.
Todos los lenguajes Xbase se basaban en el concepto de bases de datos
relacionales, es decir la agrupacin de la informacin en forma de tablas,
denominadas campos y registros, cada uno de ellos preformateados para
recibir cierto tipo de dato (ej: fechas, caracteres, nmeros, valores lgicos,etc.); pudiendo "unir" diferentes bases por medio de campos comunes.
2.1.4.LA SEGUNDA MITAD, 1995-2000: LA ORIENTACIN A OBJETOS
A medida que los aos van pasando el concepto de Bases relacionales empieza
a decaer relativamente, surge entonces una variante que se aplica a todos los
lenguajes: La orientacin a objetos. Ya no solo se habla de programacin
estructurada, sino que los mdulos de programacin son vistos como objetos,las estructuras representan objetos y/o funciones que se adaptan en forma
-
7/30/2019 Historia Lenguajes de Programacin
17/64
general a procesos especficos es la maximizacin de la programacin
modular.
El modelo de objetos engloba los conceptos de encapsulacin, herencia y
poliformismo, el cual se aplica a los datos y al tipo de bases de datos que
almacena la informacin.
La orientacin a objetos significa la agrupacin de entidades de datos de forma
global, de tal manera que puedan ser interpretados de una forma comn por
una misma estructura de programacin.
2.1.5.EL FIN DE LOS LENGUAJES D.O.S.
Windows 95 marca el comienzo del fin de la programacin D.O.S. y por lo
tanto de los lenguajes basados en este. Este proceso no fue enrgico, todava
hoy, estamos viviendo esta etapa. Todava hay numerosos y excelentes
sistemas desarrollados bajo entorno D.O.S. ejecutndose pero cada vez son los
menos.
Veamos que hicieron los lenguajes D.O.S. para mantenerse en el mercado:
Clipper trato de evolucionar hacia Windows bajo la batuta de Computer
Associates con el nombre de Visual Objects, el cual fue un fracaso. Al igual
que Visual Dbase 5.0 bajo la rbita de Borland.
Los nicos "sobrevivientes" al menos en esencia son Visual Fox (Microsoft),
Visual Basic (Microsoft), Delphi (Borland) y Visual C (Microsoft)
2.1.6.2000 Y MS ALL: LENGUAJES VISUALES
Con al llegada de Windows todo es Visual, todo es iconos, todo es botones,
todo es Ventanas. Para programar en lenguajes visuales, primero hay que
comprender lo que es Windows. La forma de programar los sistemasevolucion radicalmente. Con Windows es preciso programar conservando las
convenciones del mismo, guardando sus caractersticas y funcionalidades. Los
sistemas hechos para Windows, deben ser tan Windows como el propio
sistema operativo.
La forma de programar se basa en objetos, cada uno de los cuales tiene sus
Propiedades y funciones. Se basa en la programacin de eventos para dichos
objetos. Otro detalle es que la programacin se basa en componentes (OLE,OCX, ActiveX), los cuales reducen notablemente el trabajo de la
-
7/30/2019 Historia Lenguajes de Programacin
18/64
programacin al proporcionar herramientas antes impensadas en la
programacin D.O.S.
Todos los lenguajes visuales ofrecen RAD (Rapid Aplication Development) o
Wizzards; con lo cual comenzaron a prometer hacer aplicaciones en poco
tiempo, incluso para inexpertos. Lejos estaban ya los tiempos en que
programar era solo usar un simple editor de textos. Ahora las herramientas de
programacin son poderosas. Son casi un sistema operativo, por asi decirlo;
con entornos de desarrollo avanzado y excelentes Debuggers. Las incursiones
cada vez mas innovadoras de Microsoft parecen imponer a la web como el
centro de desarrollo de aplicaciones: Microsoft .NET
2.1.7.UNA VISIN A LA WEB Y AL FUTURO: HTML, PERL, PHP, PITHON,
JAVA Y OTROS
Internet ha sido el disparador de nuevos lenguajes tales como el HTML que es
el lenguaje de programacin de las pginas WEB para hipertexto. El mismo
constituye una codificacin bastante simple, basada en marcadores (TAGs).
De la misma manera, cuando se hace necesario proveer de funciones
adicionales a un servicio web se recurre a Perl o a Pithon que son lenguajes
que nos permiten escribir scripts para ser alojados en los servidores a efectos
de proveer contadores, estadsticas, rankings, etc.
Por otra parte Java, bajo la direccin de SUN, constituye la idea de la
programacin abierta y universal para las aplicaciones de escritorio, pero
todava los estndares visuales (C, Basic y Delphi), son demasiado poderosos
como para desplazarlos, a pesar de que Java promete tambin ser un lenguaje
de excelentes prestaciones. Las nuevas tecnologas WEB inundan el mercado:
PHP, ASP, XML, DHTML, XHTML, AJAX lo cual enriquecen la forma demanejar la informacin y su presentacin al usuario final.
-
7/30/2019 Historia Lenguajes de Programacin
19/64
2.2. GENERACIONES DE LENGUAJES DE PROGRAMACIN
La evolucin de los lenguajes de programacin se puede dividir en 5 etapas o
generaciones.
1. Primera generacin: lenguaje maquina.
2. Segunda generacin: se crearon los primeros lenguajes ensambladores.
3. Tercera generacin: se crean los primeros lenguajes de alto nivel. Ej. C,
Pascal, Cobol
4. Cuarta generacin. Son los lenguajes capaces de generar cdigo por si solos,
son los llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un
experto en el lenguaje. Aqu tambin se encuentran los lenguajes orientados a
objetos, haciendo posible la reutilizacin d partes del cdigo para otros
programas.
5. Quinta generacin: aqu se encuentran los lenguajes orientados a la
inteligencia artificial.. Ej. PROLOG
2.3. TIPOS DE LENGUAJE DE PROGRAMACIN SEGN SU CAMPO DE
APLICACIN.
Aplicaciones cientficas.
En este tipo de aplicaciones predominan las operaciones numricas o
matriciales propias de algoritmos matemticos. Lenguajes adecuados son
FORTRAN y PASCAL
Aplicaciones en procesamiento de datos.
En estas aplicaciones son frecuentes las operaciones de creacin,mantenimiento y consulta sobre ficheros y bases de datos. Dentro de este
campo estaran aplicaciones de gestin empresarial, como programas de
nominas, contabilidad facturacin, control de inventario, etc. Lenguajes aptos
para este tipo de aplicaciones son COBOL y SQL.
Aplicaciones de tratamiento de textos.
Estas aplicaciones estn asociadas al manejo de textos en lenguaje natural. Unlenguaje muy adecuado para este tipo de aplicaciones es el C.
-
7/30/2019 Historia Lenguajes de Programacin
20/64
Aplicaciones en inteligencia artificial.
Dentro de este campo, destacan las aplicaciones en sistemas expertos, juegos,
visin artificial, robtica. Los lenguajes ms populares dentro del campo de la
inteligencia artificial son LISP y PROLOG
Aplicaciones de programacin de sistemas.
En este campo se incluiran la programacin de software de interfaz entre el
usuario y el hardware, como son los mdulos de un sistema operativo y los
traductores. Tradicionalmente para estas aplicaciones se utilizaba el
Ensamblador, no obstante en la actualidad se muestran muy adecuados los
lenguajes ADA, MODULA-2 y C.
Lenguajes de Internet.
HTML, JAVA, Perl, PHP, etc
2.4. TIPOS DE LENGUAJE DE PROGRAMACIN EN FUNCIN AL ESTILO
DE PROGRAMAR
Lenguajes imperativos Lenguajes funcionales
Lenguajes lgicos (declarativos)
Lenguajes orientados a objetos
Lenguajes con concurrencia
2.5. LENGUAJES IMPERATIVOS
En este tipo de lenguajes, cuyo origen est ligado a la propia arquitectura de von
Neumann, la arquitectura consta de una secuencia de celdas, llamadas memoria,
en la cual se pueden guardar en forma codificada, lo mismo datos que
instrucciones; y de un procesador, el cual es capaz de ejecutar de manera
secuencial una serie de operaciones, principalmente aritmticas y booleanas,
llamadas comandos. En general, un lenguaje imperativo ofrece al programador
conceptos que se traducen de forma natural al modelo de la mquina.Los
-
7/30/2019 Historia Lenguajes de Programacin
21/64
lenguajes imperativos ms destacados de la historia han sido: FORTRAN, Algol,
Pascal, C, Modula-2, Ada
El programador, al utilizar un lenguaje imperativo, por lo general tiene que
traducir la solucin abstracta del problema a trminos muy primitivos, cercanos a
la mquina. La distancia entre el nivel del razonamiento humano y lo expresable
por los lenguajes imperativos causa que sus programas sean ms "comprensibles"
para la mquina que para el hombre. Esta desventaja para nosotros, reflejada en la
dificultad que tenemos al construir programas en un lenguaje imperativo, se
vuelve una ventaja en el momento de la generacin del cdigo. El programa est
expresado en trminos tan cercanos a la mquina, que el cdigo generado es
relativamente parecido al programa original, lo que permite cierta eficiencia en la
ejecucin.
Ejemplo:
Este sera el cdigo de un programa que determina el factorial de un nmero en un
lenguaje imperativo inventado:
procedimiento factorial(entero n){
entero resultado = 1;
mientras (n > 0) {
resultado = resultado * n;
n = n - 1;
}
devuelve resultado;
}
Este procedimiento (o funcin) recibe un nmero entero n. Declara una variable
resultado que ser el resultado final a devolver. Inicialmente, tiene como valor el1. Despus llega una estructura de control denominada bucle, que se ejecuta
mientras la condicin expresada entre los parntesis (n > 0) sea cierta. Dentro del
bucle se multiplica la variable resultado por n y el valor se deja de nuevo en
resultado. La siguiente sentencia (n = n - 1) es necesaria para ir haciendo el
factorial, as como para salir en algn momento del bucle. Por ltimo, tras salir del
bucle ya podemos devolver el valor final, que estar en la variable resultado.
Ntese que, si en un principio, la variable n es 0, no se entrar en el bucle al no ser
-
7/30/2019 Historia Lenguajes de Programacin
22/64
cierta la condicin, por lo que pasara directamente a devolver la variable
resultado, que tiene valor inicial 1 (0! = 1).
2.6. LENGUAJES FUNCIONALES
2.6.1.CONCEPTO MATEMTICO DE FUNCIN.
Puede ser definida como una correspondencia entre dos variables, una
llamada variable dependiente y otra llamada variable dependiente. Veamos la
siguiente notacin:
y = f(x)
Donde:y: Es la variable dependiente de la funcin. Se le llama dependiente porque
para que pueda tomar un valor, depende de los valores que pueda tomar la
variable x. Tambin podemos decir que y esta en funcin de x.
x: Es la variable independiente de la funcin. Se dice que es independiente ya
que puede tomar los valores que quiera y no hay nada que se lo impida; o sea,
tiene independencia.
f: Se puede decir que es el procedimiento o ecuacin que tomar a x para
devolverle un valor a y.
Veamos una funcin muy comn:
y = x2 + x
La funcin anterior tiene a y como variable dependiente y a x como variable
independiente, y el procedimiento es elevar a x (variable independiente) al
cuadrado y sumarle x. Por cada valor que tome x, a y le corresponder otro.
Tambin podemos tener una funcin con ms de una variable dependiente...
y = x + z 1 / (w + 3)
En el sistema anterior podemos encontrar que la variable dependiente (en este
caso y) esta en funcin de 3 variables independientes (en este caso x, z, w).
Generalmente en las matemticas las variables dependientes estn
representadas por la letra y, aunque tambin las podemos representar con letras
como z, w, x, g, etc. siempre y cuando sean diferentes de las variables
-
7/30/2019 Historia Lenguajes de Programacin
23/64
independientes; as mismo, la o las variables independientes se pueden
representar de la misma forma, teniendo en cuenta que no deben ser iguales a
las dependientes.
2.6.2.CONCEPTO DE LENGUAJES FUNCIONALES.
Los matemticos desde hace un buen tiempo estn resolviendo problemas
usando el concepto de funcin. Una funcin convierte ciertos datos en
resultados. Si supiramos cmo evaluar una funcin, usando la computadora,
podramos resolver automticamente muchos problemas. As pensaron algunos
matemticos, que no le tenan miedo a la mquina, e inventaron los lenguajes
de programacin funcionales. Adems, aprovecharon la posibilidad que tienen
las funciones para manipular datos simblicos, y no solamente numricos, y la
propiedad de las funciones que les permite componer, creando de esta manera,
la oportunidad para resolver problemas complejos a partir de las soluciones a
otros ms sencillos. Tambin se incluy la posibilidad de definir funciones
recursivamente.
Un lenguaje funcional ofrece conceptos que son muy entendibles y
relativamente fciles de manejar para todos los que no se durmieron en las
clases de matemticas. El lenguaje funcional ms antiguo, y seguramente el
ms popular hasta la fecha, es LISP, diseado por McCarthy en la segunda
mitad de los aos 50. Su rea de aplicacin es principalmente la Inteligencia
Artificial. En la dcada de los 80 hubo una nueva ola de inters por los
lenguajes funcionales, aadiendo la tipificacin y algunos conceptos modernos
de modularizacin y polimorfismo, como es el caso del lenguaje ML.
Programar en un lenguaje funcional significa construir funciones a partir de las
ya existentes. Por lo tanto es importante conocer y comprender bien lasfunciones que conforman la base del lenguaje, as como las que ya fueron
definidas previamente. De esta manera se pueden ir construyendo aplicaciones
cada vez ms complejas. La desventaja de este modelo es que resulta bastante
alejado del modelo de la mquina de Von Neumann y, por lo tanto, la
eficiencia de ejecucin de los intrpretes de lenguajes funcionales no es
comparable con la ejecucin de los programas imperativos precompilados.
Para remediar la deficiencia, se est buscando utilizar arquitecturas paralelas
-
7/30/2019 Historia Lenguajes de Programacin
24/64
que mejoren el desempeo de los programas funcionales, sin que hasta la
fecha estos intentos tengan un impacto real importante.
2.6.3.CATEGORAS DE LENGUAJES FUNCIONALES.
Existen dos categoras de lenguajes funcionales: los funcionales puros y los
hbridos, La diferencia entre ambos estriba en que los lenguajes funcionales
hbridos son menos dogmticos que los puros, al admitir conceptos tomados de
los lenguajes imperativos, como las secuencias de instrucciones o la
asignacin de variables. En contraste, los lenguajes funcionales puros tienen
una mayor potencia expresiva, conservando a la vez su transparencia
referencial, algo que no se cumple siempre con un lenguaje funcional hbrido.
Entre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los
lenguajes funcionales hbridos ms conocidos son Lisp, Scheme, Ocaml y
Standard ML (estos dos ltimos, descendientes del lenguaje ML).
2.6.4.PROBLEMAS DEL MODELO IMPERATIVO
Los programas escritos en lenguajes de programacin tradicionales
(imperativo) como Pascal, C, ADA, etc. forman una abstraccin de la mquina
de Von-Neumann caracterizada por:
Memoria Principal para almacenamiento de datos y cdigo mquina.
Unidad Central de Proceso con una serie de registros de almacenamiento
temporal y un conjunto instrucciones de clculo aritmtico, modificacin
de registros y acceso a la Memoria Principal.
Los programas imperativos estn formados por una serie de datos globales y
un conjunto de instrucciones cdigo. Estos dos elementos forman unaabstraccin de los datos y cdigo de la memoria principal.
El programador trabaja en un nivel cercano a la mquina lo que le permite
generar programas eficientes. Con esta proximidad aparece, sin embargo, una
dependencia entre el algoritmo y la arquitectura que impide, por ejemplo,
utilizar algoritmos programados para arquitecturas secuenciales en
arquitecturas paralelas.
Los algoritmos escritos en lenguajes imperativos se expresan mediante unasecuencia de instrucciones que modifican el estado de un programa accediendo
-
7/30/2019 Historia Lenguajes de Programacin
25/64
a los datos globales de la memoria. En este punto es donde empiezan los
problemas:
Ejemplo
Program prueba;
var flag:boolean;
function f (n: integer):integer;
begin
flag:=not flag;
if flag then f:=n;
else f:=2*n;
end;
........
--Programa principal
begin
flag:=true;
......
write(f(1)); retorna 2
write(f(1)); retorna 1
.......
write(f(1) + f(2)); retorna 4
write(f(2) + f(1)); retorna 5
En el primer caso la expresin f(1) retorna valores diferentes dependiendo de
la secuencia de ejecucin y en el segundo no se cumplen propiedades
matemticas simples tales como la conmutatividad. Estos ejemplos ponen en
evidencia que ciertas caractersticas de los lenguajes imperativos tales como la
asignacin pueden traer consigo efectos laterales inesperados que oscurecen la
semntica del programa; en consecuencia se hace difcil demostrar que los
programas cumplen con los requerimientos especificados y que estn libres de
errores.
Este y otros problemas son inherentes al modelo computacional utilizado, por
ende una solucin factible de ser aplicada puede ser cambiar el modelo
-
7/30/2019 Historia Lenguajes de Programacin
26/64
computacional. Entre otras alternativas se encuentran el modelo funcional o
aplicativo cuyo objetivo es describir los problemas mediante funciones
matemticas sin efectos laterales, y el modelo lgico o declarativo que
describe los problemas mediante relaciones entre objetos o entidades.
2.7. LENGUAJES LGICOS (DECLARATIVOS)
Otra forma de razonar para resolver problemas en matemticas se fundamenta en
la lgica de primer orden. El conocimiento bsico de las matemticas se puede
representar en la lgica en forma de axiomas, a los cuales se aaden reglas
formales para deducir cosas verdaderas (teoremas) a partir de los axiomas. Gracias
al trabajo de algunos matemticos, de finales de siglo pasado y principios de ste,se encontr la manera de automatizar computacionalmente el razonamiento lgico
-particularmente para un subconjunto significativo de la lgica de primer orden-
que permiti que la lgica matemtica diera origen a otro tipo de lenguajes de
programacin, conocidos como lenguajes lgicos. Tambin se conoce a estos
lenguajes, y a los funcionales, como lenguajes declarativos, porque el
programador, parar solucionar un problema, todo lo que tiene que hacer es
describirlo va axiomas y reglas de deduccin en el caso de la programacin lgicay va funciones en el caso de la programacin funcional.
En los lenguajes lgicos se utiliza el formalismo de la lgica para representar el
conocimiento sobre un problema y para hacer preguntas que, si se demuestra que
se pueden deducir a partir del conocimiento dado en forma de axiomas y de las
reglas de deduccin estipuladas, se vuelven teoremas. As se encuentran
soluciones a problemas formulados como preguntas. Con base en la informacin
expresada dentro de la lgica de primer orden, se formulan las preguntas sobre eldominio del problema y el intrprete del lenguaje lgico trata de encontrar la
respuesta automticamente. El conocimiento sobre el problema se expresa en
forma de predicados (axiomas) que establecen relaciones sobre los smbolos que
representan los datos del dominio del problema.
En el caso de la programacin lgica, el trabajo del programador se restringe a la
buena descripcin del problema en forma de hechos y reglas. A partir de sta se
pueden encontrar muchas soluciones dependiendo de como se formulen las
preguntas (metas), que tienen sentido para el problema. Si el programa est bien
-
7/30/2019 Historia Lenguajes de Programacin
27/64
definido, el sistema encuentra automticamente las respuestas a las preguntas
formuladas. En este caso ya no es necesario definir el algoritmo de solucin, como
en la programacin imperativa, en cambio, lo fundamental aqu es expresar bien el
conocimiento sobre el problema mismo. En programacin lgica, al igual que en
programacin funcional, el programa, en este caso los hechos y las reglas, estn
muy alejados del modelo von Neumann que posee la mquina en la que tienen que
ser interpretados; por lo tanto, la eficiencia de la ejecucin no puede ser
comparable con la de un programa equivalente escrito en un lenguaje imperativo.
Sin embargo, para cierto tipo de problemas, la formulacin del programa mismo
puede ser mucho ms sencilla y natural (para un programador experimentado, por
supuesto).
PROLOG
Prolog, proveniente del francs Programation et Logique, sus orgenes se
remotan a los inicios de la dcada de los 70 con los trabajos del grupo de A.
Colmerauer en Marsella, Francia. Es un lenguaje de programacin lgico e
interpretado, bastante popular en el medio de investigacin en Inteligencia
Artificial.
Historia
Se trata de un lenguaje de programacin ideado a principios de los aos 70
en la universidad de Aix-Marseille por los profesores Alain Colmerauer y
Phillipe Roussel. Inicialmente se trataba de un lenguaje totalmente
interpretado hasta que, a mediados de los 70, David H.D. Warren
desarroll un compilador capaz de traducir Prolog en un conjunto de
instrucciones de una mquina abstracta denominada Warren AbstractMachine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje
semi-interpretado.
Prolog se enmarca en el paradigma de los lenguajes lgicos, lo que lo
diferencia enormemente de otros lenguajes ms populares tales como
Fortran, Pascal, C.
-
7/30/2019 Historia Lenguajes de Programacin
28/64
Retroseguimiento
En todos los mencionados, las instrucciones se ejecutan normalmente en
orden secuencial, es decir, una a continuacin de otra, en el mismo orden
en que estn escritas, que slo vara cuando se alcanza una instruccin de
control (un bucle, una instruccin condicional o una transferencia).
Los programas en Prolog se componen de clusulas de Horn que
constituyen reglas del tipo "modus ponendo ponens", es decir, "Si es
verdad el antecedente, entonces es verdad el consecuente". No obstante, la
forma de escribir las clusulas de Horn es al contrario de lo habitual.
Primero se escribe el consecuente y luego el antecedente. El antecedente
puede ser una conjuncin de condiciones que se denomina secuencia de
objetivos. Cada objetivo se separa con una coma y puede considerarse
similar a una instruccin o llamada a procedimiento de los lenguajes
imperativos. En Prolog no existen instrucciones de control. Su ejecucin se
basa en dos conceptos: la unificacin y el backtracking.
Gracias a la unificacin, cada objetivo determina un subconjunto de
clusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina
punto de eleccin. Prolog selecciona el primer punto de eleccin y sigue
ejecutando el programa hasta determinar si el objetivo es verdadero o
falso.
En caso de ser falso entra en juego el 'backtracking', que consiste en
deshacer todo lo ejecutado situando el programa en el mismo estado en el
que estaba justo antes de llegar al punto de eleccin. Entonces se toma el
siguiente punto de eleccin que estaba pendiente y se repite de nuevo el
proceso. Todos los objetivos terminan su ejecucin bien en xito("verdadero"), bien en fallo ("falso").
Expresiones
Prolog cuenta con operadores para la unificacin y comparacin sea con
evaluacin o sea simblica como lo siguiente:
X is Y %unificacin con evaluacin.
X = Y %unificacin simblica X=:=Y %comparacin con evaluacin
-
7/30/2019 Historia Lenguajes de Programacin
29/64
X==Y %comparacin simblica.
Listas
La representacin de hechos simples no es lo comn en la clasificacin de
elementos, sino que se agrupan los elementos de un mismo tipo en una
lista.
Ejemplo:
% Si queremos hallar la longitud de una lista.
% La longitud de una lista vacia es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.
longitud([],0).
longitud([H|T],N):-longitud(T,N0), N is N0 + 1.
?- longitud([a,b,c],L).
3
?- longitud([a,b,c],4).
No
% Si queremos determinar si un elemento es pertenece a una lista.
% El elemento pertenece a la lista si coincide con la cabeza de la lista.
% El elemento pertenece a la lista si es se encuentra en la cola de la lista.
pertenece(X,[X|_]).
pertenece(X,[_|R]):- pertenece(X,R).
?- pertenece(b,[a,b,c]).
Yes
?- pertenece(b,[a,[b,c]]).
No?- pertenece([b,c],[a,[b,c]]).
Yes
% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista
% como parte de la respuesta y continuamos eliminando X de la cola T.
elimina (X,[X|T],T).elimina (X,[H|T],[H|T1]):- elimina (X,T,T1).
-
7/30/2019 Historia Lenguajes de Programacin
30/64
?- elimina(1,[1,2,3,4],R).
R = [2,3,4]
?- elimina(1,R,[2,3]).
R = [1, 2, 3]
R = [2, 1, 3]
R = [2, 3, 1]
% Si queremos calcular la inversa de una lista.
% La inversa de una lista vacia es una lista vacia.
% La inversa de H|T es la inversa de T concatenada con H.
inversa([],[]).
inversa([H|T],L):- inversa(T,R), concatenar(R,[H],L).
?- inversa([a,b,c,d],[d,c,b,a]).
Yes
2.8. LENGUAJES ORIENTADOS A OBJETOS
A mediados de los aos 60 se empez a vislumbrar el uso de las computadoras
para la simulacin de problemas del mundo real. Pero el mundo real est lleno de
objetos, en la mayora de los casos complejos, los cuales difcilmente se traducena los tipos de datos primitivos de los lenguajes imperativos. As es que a dos
noruegos, Dahl y Nygaard, se les ocurri el concepto de objeto y sus colecciones,
llamadas clases de objetos, que permitieron introducir abstracciones de datos a los
lenguajes de programacin. La posibilidad de reutilizacin del cdigo y sus
indispensables modificaciones, se reflejaron en la idea de las jerarquas de
herencia de clases. A ellos tambin les debemos el concepto de polimorfismo
introducido va procedimientos virtuales. Todos estos conceptos fueronpresentados en el lenguaje Simula 67, desde el ao 1967. Aunque pensado como
lenguaje de propsito general, Simula tuvo su mayor xito en las aplicaciones de
simulacin discreta, gracias a la clase SIMULATION que facilitaba
considerablemente la programacin.
La comunidad informtica ha tardado demasiado en entender la utilidad de los
conceptos bsicos de Simula 67, que hoy identificamos como conceptos del
modelo de objetos. Tuvimos que esperar hasta los aos 80 para vivir una
verdadera ola de propuestas de lenguajes de programacin con conceptos de
-
7/30/2019 Historia Lenguajes de Programacin
31/64
objetos encabezada porSmalltalk, C++, Eiffel, Modula-3, Ada 95 y terminando
con Java. La moda de objetos se ha extendido de los lenguajes de programacin a
la Ingeniera de Software
La reutilizacin de clases previamente probadas en distintos sistemas tambin es
otro punto a favor. Sin embargo, el modelo de objetos, a la hora de ser interpretado
en la arquitectura von Neumann conlleva un excesivo manejo dinmico de
memoria debido a la constante creacin de objetos, as como a una carga de
cdigo fuerte causada por la constante invocacin de mtodos. Por lo tanto, los
programas en lenguajes orientados a objetos siempre pierden en eficiencia, en
tiempo y memoria, contra los programas equivalentes en lenguajes imperativos.
Para consolarnos, los expertos dicen que les ganan en la comprensin de cdigo.
Caractersticas fundamentales de la POO:1. Encapsulamiento: Es la ocultacin de informacin. Significa mantener la
informacin dentro del objeto y mantenerlo como una caja negra. Puede
ser accedida por mtodos.
2. Abstraccin: Es la capacidad de aislar y encapsular la informacin del
diseo y la ejecucin. Es la capacidad para identificar atributos y mtodos.
Herencia: Es la propiedad que permite a los objetos crearse a partir deotros objetos.
3. Polimorfismo: Es la capacidad de que diferentes objetos reaccionen de
distinta forma a un mismo mensaje.
2.9. LENGUAJES CON CONCURRENCIA
La necesidad de ofrecer concurrencia en el acceso a los recursos computacionales
se remonta a los primeros sistemas operativos. Mientras que un programa
realizaba una operacin de entrada o salida otro podra gozar del tiempo del
procesador para sumar dos nmeros, por ejemplo. Aprovechar al mximo los
recursos computacionales fue una necesidad apremiante, sobre todo en la poca en
que las computadoras eran caras y escasas; el sistema operativo tena que ofrecer
la ejecucin concurrente y segura de programas de varios usuarios, que desde
distintas terminales utilizaban un solo procesador, y as surgi la necesidad de
-
7/30/2019 Historia Lenguajes de Programacin
32/64
introducir algunos conceptos de programacin concurrente para programar los
sistemas operativos.
Posteriormente, cuando los procesadores cambiaron de tamao y de precio, se
abri la posibilidad de contar con varios procesadores en una mquina y ofrecer el
procesamiento en paralelo, es decir, procesar varios programas al mismo tiempo.
Esto dio el impulso a la creacin de lenguajes que permitan expresar el
paralelismo. Finalmente, llegaron las redes de computadoras, que tambin ofrecen
la posibilidad de ejecucin en paralelo, pero con procesadores distantes, lo cual
conocemos como la programacin distribuida.
Histricamente encontramos en la literatura soluciones conceptuales y
mecanismos tales como: semforos, regiones crticas, monitores, envo de
mensajes (CSP), llamadas a procedimientos remotos (RPC), que posteriormente se
incluyeron como partes de los lenguajes de programacin en Concurrent Pascal,
Modula, Ada, OCCAM, y ltimamente en Java.
Uno de los ejemplos ms importantes es el modelo de envo de mensajes de CSP
de Hoare, para las arquitecturas paralelas y distribuidas, el cual no solamente
fructific en una propuesta del lenguaje de programacin OCCAM, sino dio
origen a una nueva familia de procesadores, llamados "transputers", que
fcilmente se componen en una arquitectura paralela.
Es difcil evaluar las propuestas existentes de lenguajes para la programacin
concurrente, paralela y distribuida. Primero, porque los programadores estn
acostumbrados a la programacin secuencial y cualquier uso de estos mecanismos
les dificulta la construccin y el anlisis de programas. Por otro lado, este tipo de
conceptos en el pasado fue manejado principalmente a nivel de sistemas
operativos, protocolos de comunicacin, etctera, donde la eficiencia era crucial, y
por lo tanto no se utilizaban lenguajes de alto nivel para la programacin. Hoy enda, la programacin de sistemas complejos tiene que incluir las partes de
comunicaciones, programacin distribuida y concurrencia. Esto lo saben los
creadores de los lenguajes ms recientes, que integran conceptos para manejar: los
hilos de control, comunicacin, sincronizacin y no determinismo; el hardware y
las aplicaciones se los exigen.
-
7/30/2019 Historia Lenguajes de Programacin
33/64
2.10.EVOLUCIN DE LOS LENGUAJES DE PROGRAMACIN
DECLARATIVOS
Grfico N 1: Evolucin de los lenguajes de programacin Declarativos
-
7/30/2019 Historia Lenguajes de Programacin
34/64
2.11.EVOLUCIN DE LOS LENGUAJES DE PROGRAMACIN ORIENTADO
A OBJETOS E IMPERATIVOS
Grfico N 2: Evolucin de los lenguajes de programacin OO e Imperativos
-
7/30/2019 Historia Lenguajes de Programacin
35/64
CAPTULO III: CONCEPTOS EN LOS LENGUAJES DE
PROGRAMACIN
3.1. QU ES LO QUE CONSTITUYE UN BUEN LENGUAJE?
3.1.1.ATRIBUTOS DE UN BUEN LENGUAJE
Claridad, sencillez y unidad (legibilidad): La sintaxis del lenguaje afecta
la facilidad con la que un programa se puede escribir, por a prueba, y ms
tarde entender y modificar.
Ortogonalidad: Capacidad para combinar varias caractersticas de un
lenguaje en todas las combinaciones posibles, de manera que todas ellastengan significado.
Naturalidad para la aplicacin: La sintaxis del programa debe permitir
que la estructura del programa refleje la estructura lgica subyacente.
Apoyo para la abstraccin: Una parte importante de la tarea del
programador es proyectar las abstracciones adecuadas para la solucin del
problema y luego implementar esas abstracciones empleando las
capacidades ms primitivas que provee el lenguaje de programacinmismo.
Facilidad para verificar programas: La sencillez de la estructura
semntica y sintctica ayuda a simplificar la verificacin de programas.
Entorno de programacin: Facilita el trabajo con un lenguaje
tcnicamente dbil en comparacin con un lenguaje ms fuerte con poco
apoyo externo.
Portabilidad de programas Costo de uso:
1. Costo de ejecucin del programa.
2. Costo de traduccin de programas.
3. Costo de creacin, prueba y uso de programas.
4. Costo de mantenimiento de los programas: costo total del ciclo de vida.
-
7/30/2019 Historia Lenguajes de Programacin
36/64
3.1.2.ESTANDARIZACIN DE LOS LENGUAJES
Los estndares son en general de dos clases:
Estndares patentados: Son las definiciones elaboradas por la
compaa que desarroll el lenguaje y que es su propietaria.
Estndares de consenso: Se trata de documentos elaborados por
organizaciones con base en un acuerdo entre los participantes pertinentes.
Mtodo principal para asegurar la uniformidad entre varias
implementaciones de un lenguaje. Ejemplo: ANSI, IEEE, ISO, etc..
3.2. SINTAXIS DE LENGUAJES DE PROGRAMACIN
La sintaxis suministra informacin significativa que se necesita para entender un
programa y proporciona informacin imprescindible para la traduccin del
programa fuente a un programa objeto.
Se necesita algo ms que slo estructuras sintcticas para la plena descripcin de
un lenguaje de programacin. Otros atributos bajo el trmino general de
semntica, como el uso de declaraciones, operaciones, control de secuencia y
entornos de refinamiento, afectan a una variable y no siempre estn determinadospor reglas de sintaxis.
CRITERIOS GENERALES DE SINTAXIS
El propsito primordial de la sintaxis es proveer una notacin para la
comunicacin entre el programador y el procesador de lenguajes de programacin.
Los detalles de la sintaxis se eligen en gran medida con base en criterios
secundarios, como:
Legibilidad: Un programa es legible si la estructura subyacente del algoritmo
y los datos que el programa representa quedan de manifiesto al inspeccionar el
texto del programa.
Facilidad de escritura: Suele hallarse en conflicto con las caractersticas que
facilitan su lectura. Este atributo mejora a travs del uso de estructuras
sintcticas concisas y regulares.
-
7/30/2019 Historia Lenguajes de Programacin
37/64
Una sintaxis es redundante si comunica el mismo elemento de informacin en ms
de una forma. Cierta redundancia es til en la sintaxis de lenguajes de
programacin porque facilita la lectura del programa y tambin permite revisar en
busca de errores durante la traduccin.
Facilidad de verificacin: Tiene relacin con la legibilidad y facilidad de
escritura. Se necesitan tcnicas que permitan comprobar que el programa es
matemticamente correcto.
Facilidad de traduccin: Los programas deben ser fciles de traducir a una
forma ejecutable. Est relacionado con las necesidades del traductor que
procesa el programa escrito.
La traduccin de los programas se dificulta conforme aumenta el nmero
de construcciones sintcticas especiales.
Carencia de ambigedad: Una construccin ambigua permite dos o ms
interpretaciones distintas. El problema de ambigedad surge por lo comn no
en la estructura de elementos individuales del programa, sino en la
interaccin entre diferentes estructuras (Ej. Condicionales).
3.3. TIPOS DE DATOS
Numricos: Entero, Real.
Booleano.
Carcter.
Definidos por el usuario: tipos especificados por el usuario como limitaciones
de los bsicos.
Enumerados, subrangos, modulares
Arrays: son tipos con tamao fijo y todos los elementos del mismo tipo.
String est definido e muchos lenguajes como un array de caracteres.
Registros: Es una estructura de datos formada por un numero fijo de
componentes de distinto tipo.
Punteros: almacena la direccin de memoria de otro objeto de datos.
Referencia: no se pueden manejar directamente, lo hace el compilador.
Tipo funcin: se considera un tipo por poderse incluir en una expresin, y
suele ir acompaado de su descriptor.
-
7/30/2019 Historia Lenguajes de Programacin
38/64
3.4. ABSTRACCIN
La abstraccin nos permite simplificar el anlisis y resolucin de un problema
separando las caractersticas que son relevantes de aquellas que no lo son. La
relevancia depender fuertemente del contexto. Un ejemplo tpico de abstraccin
es una jerarqua de objetos determinada por sus caractersticas comunes.
Aunque la abstraccin es un concepto general aplicable a cualquier campo
nosotros estamos interesados en la abstraccin que proporciona un lenguaje de
programacin. En este sentido la aportacin ms importante ha sido el desarrollo
de los lenguajes de alto nivel, stos nos permiten utilizar ciertas construcciones de
alto nivel en lugar de una secuencia de instrucciones mquina. An as, el nivel de
abstraccin proporcionado por un lenguaje de programacin resulta insuficiente.Podemos aumentar el nivel de abstraccin haciendo que el lenguaje de
programacin incluya mecanismos que permitan construir al usuario sus propias
abstracciones. El mecanismo ms comn para tal fin es el uso de funciones y
procedimientos, aunque existen otros mecanismos.
Los lenguajes de programacin orientados a objetos ofrecen un cada vez ms
amplio abanico de estructuras de datos organizadas jerrquicamente (listas, pilas,
colas, etc.) junto con primitivas para manejarlas agrupadas en lo quehabitualmente se conoce como clase, adems, el usuario puede definir nuevas
clases
3.5. ABSTRACCIN EN PROGRAMACIN
Cuando la computacin estaba en su infancia, la mayora de los programas se
escriban en ensamblador por un programador, y no se consideraran como grandesprogramas segn los estndares de hoy en da. An as, en la medida en que los
programas se hicieron ms complejos, los programadores encontraron ms
dificultades para recordar toda la informacin que necesitaban para desarrollar o
eliminar errores de sus programas.
Aunque la introduccin de lenguajes de alto nivel resolvi algunas dificultades, al
mismo tiempo increment las expectativas de la gente acerca de lo que podra
hacer una computadora, de tal forma que slo provoc la aparicin de un mayor
nmero de problemas. As, a medida que se intentaban resolver problemas ms
-
7/30/2019 Historia Lenguajes de Programacin
39/64
complejos por medio de una computadora, mayor era la tarea que deba desarrollar
el programador, rebasando la capacidad incluso de los mejores programadores. En
consecuencia, comenzaron a proliferar equipos de programadores que trabajaban
conjuntamente para emprender grandes tareas de programacin.
Se observ entonces un problema que an hoy no se ha abordado de forma
completamente satisfactoria: los sistemas de software son sistemas complejos con
un alto grado de interconexin. La interconexin es la dependencia de una parte
del cdigo de otra seccin de cdigo.
Surgieron as diversas tcnicas y mecanismos para tratar de reducir el problema de
la complejidad. La abstraccin es uno de estos mecanismos y es posiblemente el
ms importante de todos. El mecanismo de abstraccin permite descomponer de
forma productiva un problema mediante el cambio del nivel de detalle a
considerar, pero es algo intangible. Surge por tanto la necesidad de describirla de
alguna forma, la especificacin es esta descripcin. La abstraccin funcional; es
decir, la idea de crear procedimientos y funciones e invocarlos mediante un
nombre, fue uno de los primeros mecanismos de abstraccin que se usaron
ampliamente en los lenguajes de programacin. Los procedimientos permitan que
las tareas que se ejecutaban varias veces, fueran agrupadas en un lugar para
reutilizarlas, en vez de duplicar el cdigo una y otra vez. Es este tipo de
abstraccin lo importante es qu hace la funcin y no importa cmo lo hace. El
usuario del procedimiento solo necesita conocer la especificacin de la abstraccin
y puede ignorar el resto de detalles.
3.6. CLASES DE ABSTRACCIN
3.6.1.ABSTRACCIN DE CONTROLHace referencia a los mecanismos necesarios para representar el flujo de
control de un programa, evitando detalles de bajo nivel. Se subdivide en: nivel
de sentencias bsicas y a nivel de subprogramas o unidades de programa.
Sentencias condicionales: If/else, alternativa mltiple (swith).
Sentencias iterativas: For, While y repeat.
-
7/30/2019 Historia Lenguajes de Programacin
40/64
Abstraccin procedimental
Subprograma: conjunto de lneas de cdigo con cierta independencia del
resto.
Procedimientos: subprogramas que tienen de 0 a n parmetros, sin tipo,
no pueden ser usados en expresiones y pueden devolver de 0 a n resultados
distintos.
Funciones: pueden tener de 0 a n argumentos de entrada, devuelve solo 1
resultado siempre. Tiene tipo y se puede usar en una expresin.
Paso de parmetros:
Formas de paso de parmetros:
Por referencia: se pasa la direccin de memoria del parmetro (E/S).
Por copia:
Copia por valor: se crea una var temporal copindole el valor del
parmetro.(E)
Copia por resultado: se crea una var local, y al acabar se devuelve el
resultado (S)
Copia por valor-resultado: se crea una var local pasndole el valor, con
la que se trabaja, y al acabar se devuelve el resultado
Formas de asignar los argumentos:
Por posicin: se asignan los parmetros formales con los reales por
orden.
Por nombre: en la llamada se aade el nombre del parmetro formal.
Por defecto: toma un valor por defecto especificado en compilacin si
no se le da ninguno.
Ejemplo:
Void ordenar (int a[],int n) el usuario no necesita conocer los detalles de
cmo se realiza el ordenamiento, solo debe suministrar un arreglo y su tamao
y recibir el arreglo ordenado (en un orden predeterminado como ascendente)
-
7/30/2019 Historia Lenguajes de Programacin
41/64
3.6.2.ABSTRACCIN DE DATOS.
Una abstraccin de datos (tipo de dato o tipo abstracto de dato) es un nuevo
tipo de dato ms un conjunto de operaciones que permiten manipular los
objetos de dicho tipo. En esta definicin juega un papel importante el uso de la
palabra objeto en lugar de variable. La diferencia entre ambos conceptos se
explicar ms adelante.
La correcta utilizacin de los tipos abstractos de datos (TADs en lo sucesivo)
en el diseo de programas da lugar a programas de gran modularidad y
calidad:
Son ms legibles
Son ms fciles de interpretar
Son ms fciles de modificar
3.7. TIPOS ABSTRACTOS DE DATOS (TADS)
Es una estructura de datos junto a las instrucciones para manejarlo, haciendo
invisible ciertas partes al usuario programador. Permite la asociacin de una
representacin con sus operaciones concretas en una unidad adecuada de lenguaje
que incorpora los nuevos tipos y el ocultamiento de la representacin del nuevotipo a las unidades que lo usan.
Tipos genricos, genericidad: consiste en que las entidades de programa puedan
trabajar con independencia de los tipos de datos concretos. Para usarse hay que
instanciarlos.
3.8. LENGUAJES DE PROGRAMACIN Y TADS
La abstraccin de datos es una tcnica de diseo de programas que promete un
alto grado de modularidad y un desarrollo independiente de la implementacin de
dicha abstraccin y de la aplicacin del programa. Por tratarse de una tcnica de
diseo, su utilizacin es en su mayor parte independiente del lenguaje de
programacin, sin embargo, el uso e implementacin de TADs con lenguajes de
programacin que no los soportan convenientemente puede dar lugar a
deficiencias en algunos de los aspectos siguientes:
-
7/30/2019 Historia Lenguajes de Programacin
42/64
Ocultacin de la representacin. Los lenguajes que no soportan TADs no
pueden chequear el buen uso de la abstraccin de datos, dada la imposibilidad
de ocultar a los usuarios de la abstraccin la representacin de los objetos
Inicializacin de las estructuras de datos. Los lenguajes que no soportan
TADs no disponen de un procedimiento automtico de inicializacin de las
estructuras de datos que se utilizan para representar a los objetos del TAD.
Esto supone que al principio de los programas que utilicen un TAD debe
invocarse a una accin para inicializar convenientemente dichas estructuras
(operacin no relacionada con los objetos
Compilacin independiente. En los lenguajes que soportan TADs, el cdigo
de estos se puede separar del cdigo de los programas de aplicacin y
compilarlos independientemente. En todo caso, esta facilidad se tiene en
cualquier lenguaje que soporte la compilacin independiente.
Parametrizacin de tipos. En los lenguajes que no soportan TADs no se
puede parametrizar una definicin de tipo con otro tipo; es decir, no se pueden
realizar abstracciones (funcionales o de datos) de tipos desconocidos.
Abstracciones polimrficas. En los lenguajes que no soportan TADs no se
pueden construir abstracciones que puedan ser utilizadas por objetos de
diferentes tipos.
Los tipos definidos por el usuariono se comportan como los predefinidos
del lenguaje. As, por ejemplo, un objeto de tipo Racional no se crea por
completo al declararlo siendo necesario realizar una llamada posterior a la
operacin Crear_Racional para inicializarlo convenientemente.
Esta ltima deficiencia provoca que en un lenguaje de programacin que no
soporte TADs puedan existir objetos cuya representacin no sea vlida sin que ellosea detectado por el compilador. Esto obliga al usuario a utilizar escrupulosamente
el TAD, o bien, al desarrollador de la abstraccin de datos a realizar
implementaciones de ste que tuvieran en cuenta ste hecho.
-
7/30/2019 Historia Lenguajes de Programacin
43/64
3.9. LENGUAJES DE PROGRAMACIN QUE DEBERAS APRENDER
3.9.1.PHP
PHP usa una mezcla entre interpretacin y compilacin para intentar ofrecer a
los programadores la mejor mezcla entre rendimiento y flexibilidad.
PHP compila para tu codigo una serie de instrucciones (llamadas opcodes)
siempre que estas son accedidas. Estas instrucciones son entonces ejecutadas
una por una hasta que el script termina. Esto es diferente a la manera
convencional de compilacion de lenguajes como C++ donde el cdigo es
compilado a cdigo ejecutable que es despues ejecutado. Php es recompilado
cada vez que se solicita un script. Una ventaja importante de interpretar el
cdigo es que toda la memoria usada por tu cdigo es manejada por PHP, y el
lenguaje automticamente vaca esta memoria cuando el script finaliza. Esto
significa que tu no tienes que preocuparte de las conexiones a la base de datos,
porque PHP lo har por ti.
Por qu deberas aprenderlo?
Es uno de los lenguajes de programacin ms populares, la gran fluidez y
rapidez de sus scripts y su prometedor futuro, desarrollar aplicaciones Webs
utilizando lenguajes como C o COBOL son cosas del pasado.
3.9.2.C#
C# es un lenguaje de propsito general orientado a objetos creado por
Microsoft para su plataforma .NET.
Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la
plataforma .NET el cual es similar al de Java aunque incluye mejoras
derivadas de otros lenguajes. C# fue diseado para combinar el control a bajonivel de lenguajes como C y la velocidad de programacin de lenguajes como
Visual Basic.
Por qu deberas aprenderlo?
Es una parte esencial de la plataforma .Net, C# combina los mejores elementos
de mltiples lenguajes de amplia difusin como C++, Java, Visual Basic o
Delphi. De hecho, su creador Anders Heljsberg fue tambin el creador de
muchos otros lenguajes y entornos como Turbo Pascal, Delphi o Visual J++.La idea principal detrs del lenguaje es combinar la potencia de lenguajes
-
7/30/2019 Historia Lenguajes de Programacin
44/64
como C++ con la sencillez de lenguajes como Visual Basic, y que adems la
migracin a este lenguaje por los programadores de C/C++/Java sea lo ms
inmediata posible.
3.9.3.AJAX
AJAX no es un lenguaje exactamente su nombre viene dado por el acrnimo
de Asynchronous JavaScript And XML y es posiblemente la mayor novedad
en cuanto a programacin web en estos ltimos aos.
El corazn de Ajax es el objeto XMLHttpRequest que nos permite realizar una
conexin al servidor y al enviarle una peticin y recibir la respuesta que
procesaremos en nuestro cdigo Javascript, estamos hablando del verdadero
motor de Ajax, por ejemplo gracias a este objeto podemos desde una pgina
HTML leer datos de una web o enviar datos de un formulario sin necesidad de
recargar la pgina.
Por qu deberas aprenderlo?
La demanda de AJAX no slo es ampla sino que de calidad debido a la
dificultad de aprendizaje que conlleva, si la herramienta de Microsoft, Atlas,
destinada a la realizacin de aplicaciones AJAX tiene xito puede supone un
aumento en la demanda de esta tecnologa.
3.9.4.JAVASCRIPT
Se trata de un lenguaje de programacin del lado del cliente, porque es el
navegador el que soporta la carga de procesamiento. Gracias a su
compatibilidad con la mayora de los navegadores modernos, es el lenguaje de
programacin del lado del cliente ms utilizado.
Por qu deberas aprenderlo?La razn de mayor peso es que es utilizado por millones de pginas webs para
validar formularios, crear cookies, detectar navegadores y mejorar el diseo,
su fcil aprendizaje lo hace un lenguaje muy demandado.
http://www.tufuncion.com/ajaxhttp://www.tufuncion.com/ajaxhttp://www.tufuncion.com/ajaxhttp://www.tufuncion.com/ajax -
7/30/2019 Historia Lenguajes de Programacin
45/64
3.9.5.PERL
Perl es la alternativa ms popular a PHP, seguramente porque es el lenguaje
ms antiguo tambien dentro de las alternativas. En internet nos encontramos
numerosos recursos que utilizan Perl, muchos de las aplicaciones "open
source" requieren tener Perl instalado correctamente. Perl tiene una ventaja y
es que es muy flexible, y tambien tiene un gran cantidad de modulos ya
escritos.
Bien escritos los scripts en Perl se asemejan bastante a PHP. La principal causa
de la suca apariencia de Perl es por la aficin de sus desarrolladores a la
escritura en "una lnea" empaquetanto numerosas funcionalidades en una sola
lnea de cdigo.
Por qu deberas aprenderlo?
La potenca de Perl a la hora de procesar grandes cantidades de datos lo hace
realmente popular a la hora de desarrollar aplicaciones del lado del servidor,
aprender Perl o Php es bsico a la hora de desarrollar aplicaciones Web.
3.9.6.C
Es un lenguaje de "medio nivel" pero con numerosas caractersticas de bajo
nivel. Dispone de las estructuras tpicas de los lenguajes de alto nivel pero, a
su vez, dispone de construcciones del lenguaje que permiten un control a muy
bajo nivel.
Por qu deberas aprenderlo?
Aprender C es bsico mientras aprendes C estas aprendiendo conceptos
bsicos de lenguajes cmo Java o C#, adems no slo es mas sencillo que
estos ltimos sino que comporten gran parte de su sintaxis.
3.9.7.RUBY Y RUBY ON RAILS
Ruby on Rails, tambin conocido como RoR o Rails es un framework de
aplicaciones web de cdigo abierto escrito en el lenguaje de programacin
Ruby. Ruby apareci en el ao 1995 y creo que su principal problema haba
sido la falta de documentacin en otro idioma que no sea japons. Eso se ha
ido solucionando y crece la popularidad del lenguaje. Su aplicacin insignia,
por decirlo de algn modo parece ser RoR. Su mecanismo de gem parece alCPAN de Perl y al Pear de PHP
-
7/30/2019 Historia Lenguajes de Programacin
46/64
Por qu deberas aprenderlo?
Simple y funcional, el uso de Active Record de forma eficiente simplifica y
agiliza el desarrollo de forma notable. Al minimizar el trabajo con la base de
datos (escribiendo triggers y procedimientos almacenados) y emplear un nico
lenguaje para todo el desarrollo, se consigue acortar los tiempos de desarrollo
(time2market).
3.9.8.ASP
Active Server Pages (ASP) y ASP.NET es un intento de Microsoft para
introducirse en el mercado del desarrollo Web, y viene a ser como su estandar
para su servidor Web, IIS. ASP ha sido atacado por la comunidad open source
desde que este apareci, y dan numerosas razones para ello:
El propietario, una nica plataforma, la lentitud...
ASP ha sido implementado en otras plataformas y que cuando esta
funcionando bajo su servidor predeterminado IIS es relativamente rpido.
Por qu deberas aprenderlo?
Simplemente porqu en algunas ocasiones no tienes otra opcin debido a la
popularidad que ha alcanzado.
-
7/30/2019 Historia Lenguajes de Programacin
47/64
CAPTULO IV: LENGUAJES DE BAJO, MEDIO Y ALTO
NIVEL
4.1. INTRODUCCIN
El ordenador slo entiende un lenguaje conocido como cdigo binario o cdigo
mquina, consistente en ceros y unos. Es decir, slo utiliza 0 y 1 para codificar
cualquier accin.
Los lenguajes ms prximos a la arquitectura hardware se denominan lenguajes de
bajo nivel y los que se encuentran ms cercanos a los programadores y usuarios se
denominan lenguajes de alto nivel.
4.2. LENGUAJES DE BAJO NIVEL
Vistos a muy bajo nivel, los microprocesadores procesan exclusivamente seales
electrnicas binarias. Dar una instruccin a un microprocesador supone en
realidad enviar series de unos y ceros espaciadas en el tiempo de una forma
determinada. Esta secuencia de seales se denomina cdigo mquina. El cdigo
representa normalmente datos y nmeros e instrucciones para manipularlos. Un
modo ms fcil de comprender el cdigo mquina es dando a cada instruccin un
mnemnico, como por ejemplo STORE, ADD o JUMP. Esta abstraccin da como
resultado el ensamblador, un lenguaje de muy bajo nivel que es especfico de cada
microprocesador.
Los lenguajes de bajo nivel permiten crear programas muy rpidos, pero que son a
menudo difciles de aprender. Ms importante es el hecho de que los programas
escritos en un bajo nivel son totalmente dependientes de la mquina o de cada
procesador. Si se lleva el programa a otra mquina se debe reescribir el programa
desde el principio. Al estar prcticamente diseados a medida del hardware,
aprovechan al mximo las caractersticas del mismo.
Dentro de este grupo se encuentran:
LENGUAJE MQUINA.
ENSAMBLADOR.
-
7/30/2019 Historia Lenguajes de Programacin
48/64
-
7/30/2019 Historia Lenguajes de Programacin
49/64
Los lenguajes que traducen los macroensambladores disponen de
macroinstrucciones cuya traduccin da lugar a varias instrucciones mquina
y no a una sola.
Dado que el lenguaje ensamblador esta fuertemente condicionado por la
arquitectura del ordenador que soporta, los programadores no suelen escribir
programas de tamao considerable en ensamblador. Mas bien usan este
lenguaje para afinar partes importantes de programas escritos en lenguajes
de ms alto nivel.
Hay un distinto Lenguaje de Mquina (y, por consiguiente, un distinto
Lenguaje Ensamblador) para cada CPU. Por ejemplo, podemos mencionar
tres lenguajes comple