Sunteți pe pagina 1din 17

Entornos de Desarrollo 1 DAW

TEMA 1: LENGUAJES DE PROGRAMACIN

ndicedecontenido
1.1 Conceptos bsicos..........................................................................................................................1
Ordenador digital.............................................................................................................................1
Programa de ordenador....................................................................................................................2
Algoritmo.........................................................................................................................................2
Lenguaje de programacin...............................................................................................................3
La crisis del software.......................................................................................................................3
Evolucin histrica de los lenguajes de programacin....................................................................3
1.2 Tipos de lenguajes de programacin..............................................................................................8
Lenguajes segn su nivel de abstraccin.........................................................................................8
Ensambladores, compiladores e intrpretes...................................................................................11
Los tipos de datos .........................................................................................................................13
La arquitectura Von Neumann: cmo diablos ejecuta un ordenador el cdigo mquina? .........14

1.1Conceptosbsicos
Ordenadordigital
Empecemos por definir qu es un ordenador como lo entendemos hoy en da, teniendo en cuenta que
sta slo es una de las muchas definiciones vlidas:
Un ordenador es una mquina digital y sincrnica, con cierta capacidad de clculo
numrico y lgico, controlada por un programa almacenado y con posibilidad de
comunicacin con el mundo exterior
Veamos cada aspecto de la definicin por separado para intentar comprenderla bien:
Mquina digital: el ordenador slo maneja seales elctricas que representan dos estados de
informacin. Estos dos estados, en binario, son el 0 y el 1.
Mquina sincrnica: todas las operaciones se realizan coordinadas por un nico reloj central
que enva pulsos a todos los elementos del ordenador para que operen al mismo tiempo.
Tienen cierta capacidad de clculo: los ordenadores, normalmente, slo son capaces de
realizar operaciones muy simples, ya sean aritmticas (sumas, restas, productos, etc) o lgicas
(comparaciones de nmeros)
Est controlada por un programa almacenado: significa que los ordenadores tienen
guardado internamente un conjunto de instrucciones y las obedecen en el orden establecido por
el programador, que es quien ha escrito esas instrucciones.
Se comunica con el mundo exterior a travs de diferentes dispositivos perifricos de entrada
(como el teclado, el ratn, el escner...) o de salida (monitor, impresora...)

1
Programadeordenador
Segn la definicin anterior, podemos deducir que un programa de ordenador es un conjunto de
instrucciones ordenadas y comprensibles para un ordenador, adems de un conjunto de datos
manipulados por esas instrucciones, de manera que el ordenador realice alguna tarea.
Todos los programas deben tener una funcin especfica, es decir, una tarea que realizar. Por ejemplo,
gestionar las facturas de una empresa (si es un programa de facturacin) o acabar con todo bicho
viviente (si es un videojuego ultraviolento).
Normalmente, el programa deber alcanzar su objetivo en un tiempo finito, es decir, empieza en un
momento dado y termina en otro momento posterior.
Los programas utilizan datos. Un dato es una representacin de algn objeto del mundo real
relacionado con la tarea que trata de realizar el programa. Representar los datos en un ordenador suele
ser complicado porque, debido a su naturaleza digital, todos los datos deben tener forma binaria,
cuando est claro que el mundo real no es binario en absoluto. Por lo tanto, para representar objetos
reales en un programa es necesario transformarlos el objetos binarios. stos objetos binarios son los
que llamamos datos.
Por ejemplo, en el programa que gestiona las facturas de una empresa, uno de los muchos objetos del
mundo real que se han de manejar es el nombre de los clientes. Cmo representar un nombre
compuesto por letras en un ordenador que slo admite cdigo binario, es decir, ceros y unos? Este es
uno de los problemas a los que se enfrenta el programador. Y la cosa se complica con objetos ms
complejos, como imgenes, sonidos, etc.
Resumiendo: los ordenadores son herramientas muy potentes que pueden resolver problemas muy
diversos, pero es necesario programarlas, es decir, proporcionarles las instrucciones y los datos
adecuados. Y eso es lo que vamos a aprender a hacer en este curso.

Algoritmo
Para realizar un programa es necesario idear previamente un algoritmo. Esto es importante hasta el
extremo de que, sin algoritmo, no existira el programa.
Un algoritmo es una secuencia ordenada de pasos que conducen a la solucin de un problema.
Los algoritmos tienen tres caractersticas fundamentales:
1) Son precisos, es decir, deben indicar el orden de realizacin de los pasos.
2) Estn bien definidos, es decir, si se sigue el algoritmo dos veces usando los mismos datos, debe
proporcionar la misma solucin.
3) Son finitos, esto es, deben completarse en un nmero determinado de pasos.
Por ejemplo, vamos a disear un algoritmo simple que determine si un nmero N es par o impar:
1. Inicio
2. Si N es divisible entre 2, entonces ES PAR
3. Si N no es divisible entre 2, entonces NO ES PAR
4. Fin
Si te fijas bien, este algoritmo cumple las tres condiciones enumeradas anteriormente (precisin,
definicin y finitud) y resuelve el problema planteado. Lgicamente, al ordenador no le podemos dar
estas instrucciones tal y como las hemos escrito, sino que habr que expresarlo en un lenguaje de
programacin, pero esto es algo que trataremos ms adelante.

2
Lenguajedeprogramacin
Podemos definir un lenguaje de programacin como un conjunto de smbolos que se combinan de
acuerdo con una sintaxis bien definida para posibilitar la transmisin de instrucciones a la CPU.
Dicho de otro modo: el lenguaje de programacin es el cdigo en el que podemos transmitir al
ordenador las rdenes de un programa. Hasta ahora hemos usado pseudocdigo (y, en menor medida,
diagramas de flujo) para escribir esas rdenes. Ahora llega el momento de traducir ese pseudocdigo
en un cdigo real, el lenguaje de programacin, comprensible por la mquina.
Lenguajes de programacin hay muchos, cada uno con sus ventajas e inconvenientes. Conviene, por
tanto, clasificarlos en categoras. Nosotros haremos dos clasificaciones:
La primera, atendiendo al nivel de abstraccin del lenguaje, distinguir entre lenguajes de
bajo nivel y de alto nivel.
La segunda, segn el proceso de traduccin a cdigo mquina, distinguir entre lenguajes
interpretados, compilados y ensamblados.

Lacrisisdelsoftware
El hardware siempre ha ido por delante del software. En la dcada de 1960, el hardware alcanz tal
complejidad que empez a distanciarse peligrosamente del software: los programadores no podan
hacer programas que explotaran el potencial de las mquinas porque los programas se haban vuelto
demasiado complejos.
Se investig entonces fuertemente en nuevas tcnicas de desarrollo y se encontraron dos soluciones
complementarias:
La ingeniera del software: aplicar al software los mismos procesos de ingeniera que a
cualquier otro producto industrial, pasando por diferentes fases de desarrollo: concepcin,
anlisis, diseo, pruebas, documentacin, etc.
La programacin estructurada: simplificar, en lugar de complicar, los lenguajes de
programacin, utilizando nicamente tres estructuras de control: secuencial, condicional e
iterativa. C. Bhm y G. Jacopini demostraron matemticamente que con slo esas estructuras
poda traducirse a un lenguaje de programacin cualquier algoritmo que cumpliera estas tres
caractersticas:
Poseer un slo punto de inicio y un slo punto de fin
Tener al menos un camino que parte del inicio y llega hasta el fin pasando por todas las
partes del programa
No tener bucles infinitos

Evolucinhistricadeloslenguajesdeprogramacin
El software ha evolucionado en paralelo con el hardware, por lo que estudiar la evolucin de los
lenguajes equivale a estudiar la evolucin de los ordenadores.
La historia de la informtica suele dividirse en generaciones de ordenadores, caracterizadas por un hito
tecnolgico notable que permite, en el transcurso de pocos aos:
Abaratar los costes de fabricacin de ordenadores.
Disminuir su tamao.
Aumentar su potencia y fiabilidad.
Suele hablarse de 4 5 generaciones de ordenadores, dependiendo del historiador. Algunos aseguran
que ya vivimos inmersos en la sexta generacin.

3
Prehistoria de la informtica (o periodo pre-electrnico)
Dejando del lado el baco y otros artilugios primitivos que ayudaban a realizar clculos, la primera
mquina de calcular mecnica precursora del ordenador digital fue inventada en 1642 por el
matemtico francs Blaise Pascal. Aquel dispositivo utilizaba una serie de ruedas de diez dientes en las
que cada uno de los dientes representaba un dgito del 0 al 9. Las ruedas estaban conectadas de tal
manera que podan sumarse nmeros hacindolas avanzar el nmero de dientes correcto. En 1670 el
gran matemtico alemn Gottfried Wilhelm Leibniz perfeccion esta mquina e invent una que
tambin poda multiplicar.
El inventor francs Joseph Marie Jacquard, al disear un telar automtico, utiliz delgadas placas de
madera perforadas para controlar el tejido utilizado en los diseos complejos. Fue la primera mquina
programada de la historia, ya que se comportaba de forma diferente dependiendo del programa que
se le introduca a travs de la placa de madera perforada.
Durante la dcada de 1880 el estadstico estadounidense Herman Hollerith concibi la idea de utilizar
tarjetas de cartn perforadas, similares a las placas de Jacquard, para procesar datos. Hollerith
consigui compilar la informacin estadstica destinada al censo de poblacin de 1890 de Estados
Unidos mediante la utilizacin de un sistema que haca pasar tarjetas perforadas sobre contactos
elctricos.
Tambin en el siglo XIX el matemtico e inventor britnico Charles Babbage elabor los principios de
la computadora digital moderna. Invent una serie de mquinas programables, como la mquina
diferencial, diseadas para solucionar problemas matemticos complejos. Muchos historiadores
consideran a Babbage y a su socia, la matemtica britnica Ada Lovelace (1815-1852), como a los
verdaderos inventores de la computadora digital moderna y de los lenguajes de programacin. De
hecho, Ada Lovelace es la primera programadora de la historia, ya que ide el lenguaje de
programacin de la mquina analtica y escribi numerosos programas para la misma (que nunca pudo
probar) que usaban instrucciones condicionales y bucles similares a los que utilizamos en la
actualidad.
Ada no pudo probar aquellos programas porque las mquinas ms avanzadas que disearon no se
podan construir con la tecnologa de la poca. La mquina analtica, el ms complejo de sus diseos,
ya tena muchas de las caractersticas de un ordenador moderno. Inclua un flujo de datos de entrada en
forma de paquete de tarjetas perforadas, una memoria para guardar los datos, un procesador para las
operaciones matemticas y una impresora para hacer permanente el registro. La mquina analtica
basada en los diseos de Babbage y Ada Lovelace se construy muchos aos despus de la muerte de
ambos y demostr que funcionaba. En la actualidad, se guardan algunos ejemplares plenamente
operativos en diversos museos del mundo.

Primeros ordenadores electro-mecnicos


Los ordenadores analgicos comenzaron a construirse a principios del siglo XX. Los primeros
modelos realizaban los clculos mediante ejes y engranajes giratorios.
Con estas mquinas se evaluaban las aproximaciones numricas de ecuaciones demasiado difciles
como para poder ser resueltas mediante otros mtodos.
Durante las dos guerras mundiales se utilizaron sistemas informticos analgicos, primero mecnicos y
ms tarde elctricos, para predecir la trayectoria de los torpedos en los submarinos y para el manejo a
distancia de las bombas en la aviacin.
Los primeros ordenadores fueron electromecnicos. Se considera que el primer ordenador fue el Z3
alemn, desarrollado en 1941, aunque fue destruido en 1943. Ese mismo ao se construy el Colossus
Mark I, diseado por los britnicos segn las ideas del padre de la informtica, Alan Turing, para

4
descifrar las comunicaciones encriptadas alemanas durante la segunda guerra mundial. Un ao
despus, en 1944, se construy el Harvard Mark I en la Universidad de Hardvard (EEUU) (No
confundir con el Colossus). Se utiliz para calcular el movimiento parablico de los proyectiles. Se
programa mediante interruptores binarios y lea los datos de entrada a travs de cintas de papel
perforado. Pesaba cinco toneladas, meda 15 metros de largo y tena ms de 750.000 piezas y 800 km
de cable.
Durante los aos 1950 Aiken trabaj activamente con investigadores espaoles del Instituto de
Electricidad y Automtica del CSIC, fundado por el cntabro Leonardo Torres Quevedo, quien haba
construdo varias mquinas calculadoras analgicas basadas en los diseos de Charles Babbage y Ada
Lovelace.

Ordenadores electrnicos: la Primera Generacin


La utilizacin de los tubos de vaco como elemento electrnico principal dio lugar a la Primera
Generacin de ordenadores completamente electrnicos, sin partes mecnicas. El primero fue
fabricado con esta tecnologa en 1945 fue el ENIAC (Electronic Numerical Integrator and Calculator)
de los estadounidenses Eckert y Mauchly (1907-1980). El ENIAC tambin se us en el clculo de
trayectorias de proyectiles, aunque tena una potencia de clculo muy superior al Mark I.
Acabada la guerra, el ENIAC se reprogram para calcular el nmero pi con unos 2000 decimales, y
para hacer los primeros diseos de la bomba de hidrgeno. Tena 18.000 tubos y pesaba 30.000 kg. Era
300 veces ms rpido que el Mark I y slo costaba 400.000 dlares de la poca, frente a los cinco
millones del Mark I.
Se programaba mediante interruptores y cables que se conectaban y desconectaban. Introducir y
depurar un nuevo programa llevaba semanas o meses de duro trabajo. Los datos se introducan, como
en el Mark I, en cintas de papel perforado. La salida se produca en papel impreso. Meda unos 30
metros de largo y sus 18.000 tubos de vaco desprendan tanto calor que elevaban la temperatura del
local a unos 50 C, y consuma tanta electricidad que, cuando funcionaba, eran frecuentes los apagones
en Filadelfia, la ciudad ms cercana.
En un test de prueba en febrero de 1946 el Eniac resolvi en dos horas un problema de fsica nuclear
que previamente habra requerido 100 aos de trabajo de un hombre. Lo que lo caracterizaba como a
los ordenadores modernos no era simplemente su velocidad de clculo sino el hecho de que
combinando operaciones permita realizar tareas que antes eran imposibles.
Echer y Mauchly crearon una empresa para fabricar ordenadores y all disearon el primer ordenador
electrnico comercial, el UNIVAC (UNIversal Automatic Computer). El aparato tuvo gran xito
comercial: se vendieron 51 ejemplares en todo el mundo! Algunas mquinas UNIVAC estuvieron
funcionando hasta 1970.
En respuesta, la empresa IBM cre una serie de ordenadores excelentes, como el IBM 705 en 1952,
desbancando a UNIVAC mediante una publicidad agresiva. El UNIVAC II sali en 1958, cuando IBM
ya haba tomado el liderato de la industria de la informtica, posicin que mantendra durante dcadas.
En 1945, mientras se construa el ENIAC, se incorpor al equipo de Eckert y Mauchly el prestigioso
matemtico hngaro John Von Neumann (1903-1957), quien propuso una serie de mejoras en el
diseo para solventar los problemas que haban surgido durante la construccin del ENIAC. As dise
un ordenador digital llamado EDVAC. Sus artculos fueron tan precisos que otros se adelantaron y el
primer ordenador tipo Von Neumann fue el EDSAC (Electronic Delay Storage Automatic Calculator)
construido el ao 1949 por Maurice Wilkes en la Universidad de Cambridge. El EDVAC no comenz
a operar hasta 1951, pero fue tal el xito del diseo de Von Neumann que todava se utiliza, con
pequeas variaciones, en la mayora de los ordenadores comerciales actuales.

5
Ordenadores de segunda generacin
Se considera su inicio en 1958 con la sustitucin de los tubos de vaco por los transistores. Los
primeros ordenadores transistorizados fueron dos pequeos modelos de NCR y RCA. Los primeros de
IBM y Sperry Rand fueron el IBM 7070 (1960) y el UNIVAC 1107 (1962), respectivamente. Durante
esta poca aparecieron las unidades de cinta y discos magnticos, y las lectoras de tarjetas perforadas e
impresoras de alta velocidad. Asimismo aparecieron los primeros lenguajes de programacin de alto
nivel, como el Fortran (1954), el Cobol (1959), el Algol (1960) o el LISP (1962).
El segundo ordenador instalado en Espaa, y primero de la segunda generacin lleg en 1959, era un
UNIVAC UCT, contratado por la antigua Junta de Energa Nuclear, actualmente CIEMAT. La era de
la informtica lleg realmente a nuestro pas en 1961, en la Feria de Muestras de Barcelona, donde se
present un IBM 1401. Esta mquina de IBM fue la ms exitosa (hasta entonces) de la historia, pues
vendi unas 12.000 unidades.
La empresa DEC lanz la PDP-1, el primer ordenador de una larga y existosa serie de mquinas
orientadas a los laboratorios y la investigacin.

Ordenadores de tercera generacin


La principal caracterstica de esta generacin fue el uso del circuito integrado, que se incorpor a
mediados de los aos 1960. Destaca la familia IBM 360 y 370, los productos ms famoso de esta
generacin. Algunos de ellos, con ciertas actualizaciones, siguen utilizndose en la actualidad.
Durante esta poca surgieron la multiprogramacin y el tiempo compartido. Tambin tuvo lugar la
denominada "crisis del software". Se intent la creacin de lenguajes que sirviesen tanto para
aplicaciones cientficas como comerciales, como el PL/1 (1964), predecesor del C (1972), y se
estandarizaron los lenguajes ms utilizados: Fortran (1966), Algol (1968) y COBOL (1970). Tambin
datan de esta generacin el BASIC (1964) y el Pascal (1971)
El que probablemente es el lenguaje de programacin ms influyente de la historia, el C, apareci en
1972. Se dise para desarrollar el sistema operativo Unix y todava es usado como lenguaje de
programacin de sistemas, debido al cdigo mquina extraordinariamente eficiente que genera. C es
adecuado para desarrollar software en el que la velocidad de ejecucin sea importante: sistemas
operativos, sistemas en tiempo real, compiladores, software de comunicaciones, etc.
A finales de los 60 surgieron los miniordenadores, precursores de los ordenadores personales (que era
un concepto inexistente en esa poca). Los destinatarios de los miniordenadores fueron grandes y
medianas empresas. Disponan de varias terminales y se organizaban en redes. Destaca la familia PDP
11 de DEC.

Ordenadores de cuarta generacin


El avance tecnolgico que marc el nacimiento de esta generacin fue el microprocesador. Un
microprocesador es un circuito integrado en cuyo interior se aloja una CPU completa (v. La
arquitectura Von Neumann ms adelante). La CPU, al ser la unidad ms compleja de todo el
ordenador, slo puede integrarse en un chip a partir de cierta escala de integracin, por lo que los
ordenadores de la tercera generacin, pese a utilizar chips, distribuan la CPU en varios de ellos.
El Intel 4004 del ao 1971 fue el primero microprocesador. Tena un ancho de palabra de 4 bits y
funcionaba a 0.74 Mhz. Contena 2300 transistores y fue diseado para una calculadora de bolsillo.
El microprocesador pronto hizo aparecer un nuevo concepto de ordenador pequeo y barato: el
ordenador personal. El primer ordenador personal fue el Altair 8800 (1974) de la desaparecida
empresa MITS. Su CPU era un Intel 8080 de 8 bits a 2 Mhz. Una pequea empresa llamada Microsoft
tuvo el acierto de construir un intrprete BASIC para l.

6
Hubo numerosos intentos de crear ordenadores personales en esa poca, incluso en Espaa. El
Kentelec 8, diseado por el cataln Manel Puigb Rocafort y fabricado por Distesa (una divisin de la
editorial Anaya), fue un hito tecnolgico a la par que un fracaso comercial: slo se fabricaron 10
unidades.
Los ordenadores personales ms existosos de aquella poca fueron el TRS 80 de Radio Shack y el
Apple II, fabricado en un garaje (o eso cuenta la leyenda) por dos jvenes llamados Steven Jobs y
Stephen Wozniak, que fundaron una empresa llamada Apple.
A partir de 1980 se produce una eclosin de marcas. Tuvieron gran xito comercial el Sinclair ZX80
de Spectrum, y la familia Amstrad CPC, todos ellos con microprocesador Zilog Z80, o el Commodore
64 y su sucesor, el Commodore Amiga, con microprocesadores de Motorola.
En Agosto de 1981 se present el IBM PC, basado en el microprocesador Intel 8088 (una versin
recortada del Intel 8086 de 16 bits y 4.77 MHz), que dio lugar a la difusin masiva de la informtica
personal y que todava es el estndar de facto en la industria de la informtica personal. Las sucesivas
familias de PC slo han mejorado enormemente su eficiencia tecnolgica sin afectar al diseo bsico
original.
En la dcada de 1970 aparecieron los lenguajes de cuarta generacin como Natural o SQL. En la
dcada siguiente se vivi la fiebre de los lenguajes orientados a objeto, como C++ u ObjectPascal.
Cuando los sistemas operativos con entorno grfico empezaron a popularizarse a finales de los 80,
tambin surgieron con fuerza los lenguajes de programacin visuales (bsicamente, lenguajes
orientados a objeto donde los elementos grficos eran clases predefinidas que podan reutilizarse con
facilidad), como Visual Basic, Visual C++ o C++Builder.

Ordenadores de quinta generacin


En octubre de 1981 el mundo de los ordenadores se vio sacudido por el anuncio hecho en Japn, de
una iniciativa de investigacin y desarrollo orientada a producir una nueva generacin de ordenadores
en la primera dcada de los aos de los 90, a los que se les dio el nombre de ordenadores de quinta
generacin.
Los ordenadores de esta generacin deberan de ser capaces de resolver problemas muy complicados,
algunos de los cuales requieren toda la experiencia, capacidad de razonamiento e inteligencia de las
personas para ser resueltos. Deberan de ser capaces de trabajar con grandes subconjuntos de los
lenguajes naturales y estar asentados en grandes bases de datos de conocimientos. A pesar de su
complejidad los ordenadores de esta generacin podran ser manejados por personas no expertas en
informtica.
Para conseguir estos fines tan ambiciosos estos equipos no tendrn un nico procesador, sino un gran
nmero agrupado en tres subsistemas fundamentales: un sistema inteligente, un mecanismo de
inferencia y una interfaz de usuario inteligente.
Obviamente, el proyecto fracas... pero slo en parte. Alguno objetivos parciales se hicieron realidad.
Por ejemplo, en 1997 el ordenador Deep Blue consigui vencer al campen mundial de ajedrez Gary
Kasparov. La inteligencia artificial ha alcanzado grandes xitos en algunos campos (teora de juegos,
minera de datos, sistemas de apoyo a la toma de decisiones...), pero an no funciona en otros
(reconocimiento de imgenes, reconocimiento del habla...). Los ordenadores multincleo son cada da
ms frecuentes y baratos.
Tambin se han desarrollado los lenguajes de quinta generacin, que son aquellos en los que se
permite describir los requisitos que debe cumplir un programa en lugar de detallar su algoritmo. Son,
an hoy, lenguajes experimentales destinados a la investigacin en los campos de la inteligencia
artificial y los sistemas expertos. Se han basado en los antiguos lenguajes declarativos. Algunos
ejemplos de lenguajes 5GL son Prolog, OPS5 o Mercury.

7
Ordenadores de sexta generacin
Algunos autores aseguran que nos encontramos inmersos en la sexta generacin de ordenadores,
aunque no existe consenso al respecto. Esta generacin se caracterizara por la paralelizacin de
procesos dentro de la misma CPU, el avance de la inteligencia artificial hasta la creacin de cerebros
artificiales, la robtica y la ciberntica, la nanotecnologa y, en el futuro a medio plazo, la sustitucin
de la tecnologa de circuitos integrados basados en semiconductores por circuitos integrados
moleculares o incluso cunticos, en los que la unidad mnima de procesamiento no sera el transistor,
sino molculas orgnicas (mucho ms pequeas) o tomos (inimaginablemente ms pequeos)
Pero una de las caractersticas ms notables de los ordenadores de esta generacin ya es una realidad
incuestionable: la interconexin masiva de millones de ordenadores de todo tipo a lo largo y ancho del
planeta (e incluso fuera de l: en 2010 se envi el primer tweet desde la Estacin Espacial
Internacional). La influencia de Internet y el modo en el que est cambiando nuestro modo de vivir y
relacionarnos es difcil de exagerar y su evolucin e importancia futura, imposible de prever.
El crecimiento imparable de Internet ha provocado la aparicin de numerosos lenguajes que tratan de
explotar sus cualidades. As, Java (1995) es un LOO basado en C++ que permite ejecutar aplicaciones
(applets) en el interior del navegador independientemente de la plataforma. JavaScript (1996) (no
confundir con Java!) permite desarrollar sencillas aplicaciones en el lado del cliente, mientras que con
PHP (1995) se pueden escribir programas en el lado del cliente. Otros lenguajes, como JSP, ASP
(actualmente ASP.NET), Perl, Python o Ruby, tambin permiten desarrollar aplicaciones web. La
mayora de ellos son LOO que tambin pueden funcionar de forma convencional, es decir, permiten
generar aplicaciones ejecutables estndar.

1.2Tiposdelenguajesdeprogramacin
Segn indicamos ms arriba, vamos a clasificar los lenguajes de programacin segn su nivel de
abstraccin (bajo o alto nivel) y segn su forma de traduccin (compiladores o intrpretes)

Lenguajessegnsuniveldeabstraccin
Lenguajes de bajo nivel
Lenguajes de alto nivel
Lenguajes 3GL o imperativos
Lenguajes orientados a objetos
Lenguajes 4GL
Otros: declarativos, funcionales, paralelos, distribuidos, 5GL...

El ordenador, como es sabido, solo puede manejar ceros y unos, es decir, cdigo o lenguaje binario.
Los seres humanos, por el contrario, utilizamos un lenguaje mucho ms complejo, con montones de
smbolos y reglas sintcticas y semnticas, que denominaremos lenguaje natural.
Entre estos dos extremos (lenguaje binario y lenguaje natural) se encuentran los lenguajes de
programacin. Tienen cierto parecido con el lenguaje natural, pero son mucho ms reducidos y
estrictos en su sintaxis y semntica, para acercarse a las limitaciones del lenguaje binario.
Hay lenguajes de programacin muy prximos al lenguaje binario: a stos los llamamos lenguajes de
bajo nivel de abstraccin. Y los hay ms prximos al lenguaje natural: son los lenguajes de alto nivel
de abstraccin.

8
Lenguajes de bajo nivel
Son los lenguajes ms cercanos a la mquina. Los programas directamente escritos en cdigo binario
se dice que estn en lenguaje mquina que, por lo tanto, es el lenguaje de ms bajo nivel que existe.
Las instrucciones del lenguaje mquina realizan tareas muy sencillas, como, por ejemplo, sumar dos
nmeros, detectar qu tecla se ha pulsado en el teclado o escribir algo en la pantalla del ordenador.
Cuando se combinan adecuadamente muchas de estas instrucciones sencillas se obtiene un programa
de ordenador que puede realizar tareas muy complejas.
A pesar de la simplicidad de las instrucciones del lenguaje mquina, la forma de escribirlas es muy
complicada, ya que hay que hacerlo en binario. En los primeros aos de la informtica los ordenadores
se programaban directamente en lenguaje mquina, lo cual converta la tarea de programar en una
verdadera pesadilla. Por ejemplo, una instruccin para sumar dos nmeros en lenguaje mquina puede
tener este aspecto:
110100100101110010100010001001111010010110110
Cuando los ordenadores fueron hacindose ms potentes, pronto se vio que con el lenguaje mquina no
se podran crear programas que aprovechasen esa potencia por la sencilla razn de que era demasiado
difcil programar as: no se poda hacer nada demasiado complicado porque el cerebro humano no est
diseado para pensar en binario.
Surgi entonces la idea de utilizar el propio ordenador como traductor: por qu no escribir una
instruccin como la anterior, que suma dos nmeros, de una forma ms parecida al lenguaje humano y
que luego un pequeo programa de ordenador se encargue de traducir esa instruccin a su
correspondiente ristra de ceros y unos? As apareci el lenguaje ensamblador, cuyas instrucciones son
equivalentes a las del lenguaje mquina, pero se escriben con palabras similares a las del lenguaje
humano. Por ejemplo, para sumar dos nmeros, la instruccin en ensamblador puede ser algo como:
ADD D1, D2
Los lenguajes de bajo nivel se caracterizan por ser dependientes del hardware de la mquina. Es decir:
un programa escrito en lenguaje mquina o en ensamblador para una mquina Pentium IV no
funcionar, por ejemplo, en un Apple Macintosh a menos que sea modificado sustancialmente. Incluso
puede tener serios problemas para funcionar en mquinas de la misma familia pero con el resto del
hardware diferente, o con un sistema operativo distinto.

Lenguajes de alto nivel


Siguiendo el razonamiento anterior (utilizar el propio ordenador como traductor), en los aos sesenta
se empezaron a desarrollar lenguajes cada vez ms complejos, en los que cada instruccin ya no se
corresponda exactamente con una instruccin del lenguaje mquina, sino con varias. Estos son los
lenguajes de alto nivel o, simplemente, L.A.N. (no confundir con "red de rea local")
Lgicamente, la traduccin desde un lenguaje de alto nivel a lenguaje mquina es mucho ms
compleja que desde lenguaje ensamblador, por lo que los traductores se han hecho cada vez ms
complicados.
Una caracterstica muy importante de los lenguajes de alto nivel es que son independientes del
hardware, lo que implica que los programas desarrollados con estos lenguajes pueden ser ejecutados en
ordenadores con hardware totalmente distinto. A esto se le llama portabilidad.
Los programas encargados de traducir el cdigo de alto nivel a cdigo mquina se llaman
compiladores e intrpretes. Son programas muy complejos que generan el cdigo binario equivalente
al cdigo de alto nivel para una mquina concreta. Por lo tanto, el programa de alto nivel, que es
portable de un hardware a otro, debe ser traducido a cdigo mquina en cada tipo de mquina en la que
se pretenda ejecutar.

9
Ejemplos de lenguajes de alto nivel son: Basic, Cobol, Fortran, Pascal, Ada, Modula-2, C, etc.

Comparacin entre los lenguajes de alto y bajo nivel


Lenguajes de bajo nivel Lenguajes de alto nivel
Ventajas Inconvenientes
Son comprensibles directamente por la Necesitan ser traducidos por medio de
mquina (aunque el ensamblador complicados programas (compiladores e
necesita una pequea traduccin) intrpretes)
La traduccin automtica del cdigo de alto
Los programas se ejecutan muy
nivel al cdigo mquina siempre genera
rpidamente (si estn bien escritos,
programas menos eficientes que si se escribieran
claro)
directamente en binario
Ocupan menos espacio en memoria Ocupan ms espacio en memoria
En general, solo pueden acceder al hardware
Permiten controlar directamente el utilizando al sistema operativo como
hardware, por lo que son apropiados para intermediario. Pero, entonces, cmo programar
la programacin de sistemas el sistema operativo, que necesita controlar
directamente el hardware?
Inconvenientes Ventajas
Son completamente dependientes del Son portables, es decir, independientes del
hardware. Un programa escrito para hardware. Un programa escrito en una mquina
determinado tipo de mquina no puede funcionar en otra con hardware distinto,
funcionar en un ordenador con diferente siempre que se vuelva a traducir a binario en la
arquitectura. mquina nueva.
Los programas son ms sencillos, ya que una
Incluso los programas ms sencillos son
sola instruccin puede equivaler a varias
largos y farragosos
instrucciones binarias.
Los programas son difciles de escribir, Los programas son ms fciles de escribir,
depurar y mantener depurar y mantener
Es imposible resolver problemas muy Es posible, aunque difcil, enfrentarse a
complejos problemas muy complejos
Enfrentando las ventajas e inconvenientes de unos y otros, se concluye que, en general, se prefiere usar
lenguajes de alto nivel para el desarrollo de aplicaciones, reservando los de bajo nivel para casos muy
concretos en los que la velocidad de ejecucin o el control del hardware sean vitales. Por ejemplo, los
sistemas operativos ms conocidos, como Windows o Linux, estn programados casi en su totalidad
con lenguajes de alto nivel, reservando un pequeo porcentaje del cdigo a rutinas en ensamblador.
Tambin hay que destacar que no todos los lenguajes de alto nivel son iguales. Los hay de "ms alto
nivel" que otros. C tiene sin duda menor nivel de abstraccin que, por ejemplo, Visual Basic; pero, por
eso mismo, los programas en C son ms rpidos y eficientes que los escritos en Visual Basic, aunque
tambin pueden llegar a ser ms difciles de escribir y depurar.

Categoras dentro de los lenguajes de alto nivel

10
Para terminar con esta clasificacin sobre el mundo de los lenguajes de programacin, mencionaremos
que los lenguajes de alto nivel se suelen subdividir en categoras tales como:
Lenguajes de tercera generacin (o imperativos), en los que el programador escribe una
secuencia de instrucciones que el ordenador debe ejecutar en un orden preestablecido. Son los
lenguajes que nosotros vamos a manejar. Todos los lenguajes "clsicos" pertenecen a esta
categora: C, Basic, Cobol, Fortran, etc.
Lenguajes de cuarta generacin (o 4GL), dirigidos a facilitar la creacin de interfaces con el
usuario y con otras aplicaciones, como las bases de datos.Un ejemplo de estos lenguajes es
SQL.
Lenguajes orientados a objetos, que son una evolucuin de los lenguajes de tercera generacin
y que permiten construir con mayor facilidad y robustez programas modulares complejos.
Ejemplos de lenguajes orientados a objetos son C++ o Java.
Lenguajes declarativos y funcionales, propios de la inteligencia artificial, como Prolog o Lisp.
Otos tipos ms especficos: lenguajes concurrentes, paralelos, distribuidos, etc.
En general, podemos decir que un programador acostumbrado a trabajar con un lenguaje de tercera
generacin puede aprender con poco esfuerzo cualquier otro lenguaje de tercera generacin, y, con
algo ms de trabajo, un lenguaje orientado a objetos. Sin embargo, el "salto" a otros tipos de lenguajes,
como los declarativos, cuesta ms porque la raz misma de estos lenguajes es diferente.

Ensambladores,compiladoreseintrpretes
Cuando programamos en un lenguaje distinto del lenguaje mquina, nuestro cdigo debe ser traducido
a binario para que el ordenador pueda entenderlo y ejecutarlo. Existe un programa especfico
encargado de hacer esa traduccin y que, dependiendo del lenguaje en el que hayamos escrito nuestro
programa, puede ser un ensamblador, un compilador o un intrprete.

Ensambladores
Se llaman ensambladores los programas encargados de traducir los programas escritos en ensamblador
a cdigo binario.
Fjate que tanto el programa traductor como el lenguaje se llaman del mismo modo: ensamblador.
Como el lenguaje ensamblador es muy prximo al binario, estos traductores son programas
relativamente sencillos

ENSAMBLADOR
Programa escrito en
Programa binario
ensamblador

Compiladores
El compilador es un programa que traduce el cdigo de alto nivel a cdigo binario. Es, por tanto,
parecido al ensamblador, pero mucho ms complejo, ya que las diferencias entre los lenguajes de alto
nivel y el cdigo binario son muy grandes.

11
PROGRAMA PROGRAMA
FUENTE OBJETO
COMPILADOR
(escrito en lenguaje
de alto nivel) (en binario)

El programa escrito en lenguaje de alto nivel se denomina programa fuente o cdigo fuente. El
programa traducido a cdigo binario se llama programa objeto o cdigo objeto. Por lo tanto, el
compilador se encarga de convertir el programa fuente en un programa objeto.
Una vez que se ha obtenido el programa objeto ya no es necesario volver a realizar la traduccin (o
compilacin), a menos que se haga alguna modificacin en el programa fuente, en cuyo caso habra
que volver a compilarlo.
El programa objeto, una vez generado, puede ejecutarse en la mquina en la que fue compilado, o en
otra de similares caractersticas (procesador, sistema operativo, etc.). Cuando se usa programacin
modular, puede ser necesario un proceso previo de enlace de los diferentes mdulos, pero de esto ya
hablaremos ms adelante.

Intrpretes
El intrprete es un programa que traduce el cdigo de alto nivel a cdigo binario pero, a diferencia del
compilador, lo hace en tiempo de ejecucin. Es decir, no se hace un proceso previo de traduccin de
todo el programa fuente a binario, sino que se va traduciendo y ejecutando instruccin por instruccin.

Instruccin 1 Instruccin 1 en binario


PROGRAMA
FUENTE Instruccin 2 en binario
Instruccin 2 INTRPRETE
(escrito en lenguaje : :
de alto nivel) : :
Instruccin N Instruccin N en binario

Compiladores frente a intrpretes


El intrprete es notablemente ms lento que el compilador, ya que realiza la traduccin al mismo
tiempo que la ejecucin. Adems, esa traduccin se lleva a cabo siempre que se ejecuta el programa,
mientras que el compilador slo la hace una vez. Por estos motivos, un mismo programa interpretado y
compilado se ejecuta mucho ms despacio en el primer caso.
La ventaja de los intrpretes es que hacen que los programas sean ms portables. As, un programa
compilado en una mquina PC bajo Windows no funcionar en un Macintosh, o en un PC bajo Linux,
a menos que se vuelva a compilar el programa fuente en el nuevo sistema. En cambio, un programa
interpretado funcionar en todas las plataformas, siempre que dispongamos del intrprete en cada una
de ellas.
JavaScript es un ejemplo de lenguaje interpretado. Esto permite que los scripts1 puedan funcionar en
cualquier mquina que disponga de un navegador de Internet capaz de interpretarlos, algo comn en
todos los sistemas actuales. En cambio, C/C++ es un lenguaje compilado, lo que hace que los
programas desarrollados con estos lenguajes se ejecuten ms rpido que sus equivalentes en
JavaScript, aunque obliga a volver a compilarlos si se desea ejecutarlos en una mquina con diferente
hardware o diferente sistema operativo.
1
Los scripts son pequeas aplicaciones insertadas dentro de las pginas web, que confieren a stas gran flexibilidad y dinamismo

12
(De hecho, muchos programas en C no podran escribirse en JavaScript, pero esa es otra historia)

Lenguajes semicompilados
No generan cdigo mquina real sino un cdigo mquina intermedio para una mquina virtual.
El software de mquina virtual permite ejecutar ese cdigo intermedio en cualquier plataforma sin
necesidad de reescribir ni recompilar el programa.
Ofrece una gran portabilidad, y su rendimiento est a medio camino entre los programas compilados e
interpretados.
Java es un lenguaje que puede semicompilarse y luego ejecutarse en cualquier plataforma que tenga
instalada una JVM (Java Virtual Machine)

Lostiposdedatos
En ocasiones, tambin se distinguen los lenguajes segn como manejen los tipos de datos. Se entiende
por tipo de datos el dominio en el que un determinado dato puede tomar un valor. As, determinada
variable puede ser de tipo nmero entero, lo que significa que slo puede contener nmeros sin
decimales, o puede ser de tipo cadena alfanumrica, que significa que puede contener un nmero
indefinido de caracteres alfanumricos.
Distinguir el tipo de dato de cada variable es engorroso para el programador principiante, pero el
necesario para indicar al ordenador cunta memoria es necesario reservar para almacenar los datos del
programa que se pretende ejecutar.
Pues bien, atendiendo a cmo el lenguaje maneja los tipos de datos, podemos distinguir:
Lenguajes con tipado dinmico: una misma variable puede cambiar de tipo a lo largo de la
ejecucin del programa. Ejemplos: Perl, Python, Lisp, JavaScript, PHP.
Lenguajes con tipado esttico: una variable, una vez que es asignada a un tipo de datos, no
puede cambiar de tipo. Es menos flexible que el tipado dinmico, pero tambin ms eficiente.
Ejemplos: C, C++, Java, Basic, Pascal.
Lenguajes dbilmente tipados: no hacen comprobaciones exhaustivas de tipos de datos. As,
permiten manipular los datos de determinado tipo como si fueran de otro tipo. Por ejemplo, un
dato de tipo carcter puede manipularse, si al programador le conviene, como un dato numrico
(ya que en el fondo los caracteres son nmeros). Esto puede provocar resultados extraos si el
programador comete un error, pero proporciona mucha flexibilidad si se usa correctamente.
Lenguajes fuertemente tipados: comprueban exhaustivamente que las variables de cada tipo
slo se usan conforme a lo que ese tipo permite. Por ejemplo, no se permitir realizar una
operacin de suma con caracteres. Son menos flexibles y, adems, ms ineficientes, puesto que
deben realizar comprobaciones de tipo en tiempo de ejecucin, es decir, deben introducir
cdigo mquina adicional para hacer las comprobaciones de tipo. A cambio, suelen generar
programas mucho ms robustos y tolerantes a fallos.
Es habitual confundir el tipado esttico con el tipado fuerte, y el dinmico con el dbil. En realidad,
son categoras complementarias que se pueden mezclar: existen lenguajes con tipado esttico y dbil
(como C) y otros con tipado dinmico y fuerte (como Visual Basic)

13
LaarquitecturaVonNeumann:cmodiablosejecutaunordenadorel
cdigomquina?
Los ordenadores actuales estn basados en la arquitectura Von Neumann, diseada por John Von
Neumann en 1947 para el EDVAC, como vimos ms arriba (v. Ordenadores de primera generacin).
A continuacin veremos de forma muy simplificada cmo funciona esta arquitectura.

Arquitectura Von Neumann


La arquitectura de von Neumann es una familia de arquitecturas de computadoras que utilizan el
mismo dispositivo de almacenamiento (memoria principal) tanto para las instrucciones como para los
datos.
La mayora de computadoras modernas estn basadas en esta arquitectura, aunque pueden incluir otros
dispositivos adicionales (por ejemplo, para gestionar las interrupciones de dispositivos externos como
ratn, teclado, etc).
El nacimiento de la arquitectura Von Neumann surge a raz de una colaboracin en el proyecto ENIAC
del matemtico de orgen hngaro, John Von Neumann. Compaero de Einstein, Goedel y Turing en
Princeton, Von Neumann se interes por el problema de la necesidad de "recablear" la mquina para
cada nueva tarea.
En 1949 haba encontrado y desarrollado la solucin a este problema, consistente en poner la
informacin sobre las operaciones a realizar en la misma memoria utilizada para los datos,
escribindola de la misma forma, es decir en cdigo binario. Su EDVAC fue el modelo de las
computadoras de este tipo construidas a continuacin. Se habla desde entonces de la "arquitectura de
Von Neumann", aunque tambin dise otras formas de construccin.

Unidades funcionales de la arquitectura Von Neumann


Los ordenadores con esta arquitectura constan de cinco partes o unidades funcionales: la unidad
aritmtico-lgica o ALU, la unidad de control (UC), la memoria, los dispositivos de entrada/salida y
los buses que proporcionan los medios de transporte de los datos entre las distintas partes.

Los ordenadores von Neumann utilizan esas partes para realizar el siguiente proceso secuencial
repetidamente:
1) Obtiene la siguiente instruccin desde la memoria en la direccin indicada por el contador de
programa y la guarda en el registro de instruccin.

14
2) Aumenta el contador de programa (un registro de la unidad de control) en la longitud de la
instruccin para apuntar a la siguiente.
3) Descodifica la instruccin mediante la unidad de control. sta se encarga de coordinar el resto de
componentes del ordenador para realizar una funcin determinada.
4) Se ejecuta la instruccin. sta puede cambiar el valor del contador del programa, permitiendo as
operaciones repetitivas. El contador puede cambiar tambin cuando se cumpla una cierta condicin
aritmtica, haciendo que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado
de complejidad, mediante la aritmtica y lgica anteriores.
5) Vuelve al paso N 1.

Justificacin de la arquitectura von Neumann


Los primeros computadores constaban de programas almacenados. Algunos muy simples siguen
utilizando este diseo (por ejemplo, una calculadora es un computador que tiene un programa
almacenado). Puede hacer operaciones matemticas simples, pero no puede ser usada como procesador
de textos o videoconsola.
Cambiar el programa que contenan los dispositivos que usaban esta tecnologa requera reescribir,
reestructurar y/o redisear el dispositivo. La tarea de reprogramar, cuando era posible, era un proceso
laborioso, y a veces implecaba un reestructuramiento fsico del ordenador.
El concepto de programa almacenado cambi todo esto por completo. Se pens en un computador que
en su diseo contena un conjunto de instrucciones que podan ser almacenadas en memoria, o sea, un
programa que detallaba la computacin que se iba a realizar. Cuando el programa cambiase, el
ordenador funcionara de un modo diferente. Una idea que hoy nos parece cotidiana y evidente, pero
que en su momento cambi el curso de la historia.

Ejemplo de funcionamiento de la arquitectura Von Neumann


Supongamos que tenemos la siguiente CPU simplificada, con slo cuatro registros en la UC y un
registro (llamado acumulador por razones obvias que se vern en el ejemplo) en la UAL, y con un
programa de slo 5 lneas cargado en la memoria principal que acaba de ser lanzado para ejecucin.

En estas condiciones, el funcionamiento de esta arquitectura Von Neumann sera el siguiente:

15
Instruccin Leer A

Fase de bsqueda
1. El CP toma el valor 118.
2. El contenido del CP se copia en el RDM.
3. Se realiza una lectura de la memoria. El contenido de la direccin 118 ("LEER A") pasa al RIM.
4. El contenido del RIM se copia al RI.
5. El CP se incrementa en una unidad (ahora valdr 119)

Fase de ejecucin
1. Se decodifica la instruccin que hay en el RI ("LEER A")
2. La UC se pone en contacto con el perifrico implicado (teclado) y espera a que le enve el dato requerido.
3. El dato tecleado se almacena en el RIM.
4. En el RDM se almacena 11F (direccin de memoria donde debe almacenarse el dato A)
5. Se realiza una escritura en memoria.

Instruccin I = 1

Fase de bsqueda
1. El CP tiene el valor 119.
2. El contenido del CP se copia en el RDM.
3. Se realiza una lectura de la memoria. El contenido de la direccin 119 ("I = 1") pasa al RIM.
4. El contenido del RIM se copia al RI.
5. El CP se incrementa en una unidad (ahora valdr 11A)

Fase de ejecucin
1. Se decodifica la instruccin que hay en el RI ("I = 1")
2. Se coloca en el RIM un 1.
3. Se coloca en el RDM el nmero 120 (direccin donde se almacena el valor del dato I)
4. Se ejecuta una escritura en memoria. En la direccin 120 se almacenar un 1.

Instruccin MOSTRAR A * I

Fase de bsqueda
1. El CP tiene el valor 11A.
2. El contenido del CP se copia en el RDM.
3. Se realiza una lectura de la memoria. El contenido de la direccin 11A ("MOSTRAR A * I") pasa al RIM.
4. El contenido del RIM se copia al RI.
5. El CP se incrementa en una unidad (ahora valdr 11B)

Fase de ejecucin
1. Se decodifica la instruccin que hay en el RI ("MOSTRAR A * I")
2. Se envan los datos A e I a la UAL para que realice la multiplicacin. El resultado es colocado por la UAL en el
Acumulador.
3. Se enva el contenido del Acumulador al perifrico de salida (monitor)

Instruccin I = I + 1

Fase de bsqueda
1. El CP tiene el valor 11B.
2. El contenido del CP se copia en el RDM.
3. Se realiza una lectura de la memoria. El contenido de la direccin 11B ("I = I + 1") pasa al RIM.

16
4. El contenido del RIM se copia al RI.
5. El CP se incrementa en una unidad (ahora valdr 11C)

Fase de ejecucin
1. Se decodifica la instruccin que hay en el RI ("I = I + 1")
2. Se coloca en el RDM el nmero 120 (direccin donde se almacena el valor del dato I)
3. Se lanza una lectura de memoria. El valor almacenado en la direccin 120 es transferido al RIM.
4. El valor del RIM es enviado a la UAL y colocado en el acumulador.
5. El valor 1 es enviado a la UAL y sumado al contenido del acumulador. El resultado de la suma tambin se guarda en el
acumulador.
6. El contenido del acumulador se copia al RIM.
7. Se lanza una escritura de memoria. En la direccin 120 se escribe el nuevo valor de I.

Instruccin SI I<10 SALTAR A 11A

Fase de bsqueda
1. El CP tiene el valor 11C.
2. El contenido del CP se copia en el RDM.
3. Se realiza una lectura de la memoria. El contenido de la direccin 11C ("SI I<10 SALTAR A 11A") pasa al RIM.
4. El contenido del RIM se copia al RI.
5. El CP se incrementa y pasa a valer 11D.

Fase de ejecucin
1. Se decodifica la instruccin que hay en el RI ("SI I<10 SALTAR A 11A")
2. En el RDM se escribe el valor 120 (direccin del dato I)
3. Se lanza una lectura de memoria. El valor del dato I es transferido al RIM.
4. Se envan a la UAL los valores I y 10 para que los compare. El resultado se coloca en un registro especial (llamado "de
condicin") que no aparece en la figura.
5. Si el resultado de la comparacin (I<10) es verdadero, se coloca en el CP el valor 11A, para que en la siguiente fase de
bsqueda vuelva a ejecutarse la instruccin almacenada en esa direccin. Si es falso, se deja el CP como est (con el valor 11D)

17

S-ar putea să vă placă și