Download - 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