Documente Academic
Documente Profesional
Documente Cultură
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.
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.
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.
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.
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.
9
Ejemplos de lenguajes de alto nivel son: Basic, Cobol, Fortran, Pascal, Ada, Modula-2, C, etc.
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.
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.
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.
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.
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