Introducción a la Programación con Orientación a Objetos Camelia Muñoz Caro Alfonso Niño Ramos Aurora Vizcaíno Barceló INTRODUCCIÓN A LA PROGRAMACIÓN CON ORIENTACIÓN A OBJETOS INTRODUCCIÓN A LA PROGRAMACIÓN CON ORIENTACIÓN A OBJETOS Camelia Muñoz Caro Alfonso Niño Ramos Aurora Vizcaíno Barceló Universidad de Castilla-La Mancha Madrid • México • Santafé de Bogotá • Buenos Aires • Caracas • Lima • Montevideo • San Juan • San José Santiago • São Paulo • White Plains Datos de catalogación bibliográfica MUÑOZ CARO, C.; NIÑO RAMOS, A.; VIZCAÍNO BARCELÓ, A. Introducción a la programación con orientación a objetos PEARSON EDUCACIÓN, S.A., Madrid, 2002 ISBN: 84-205-3440-4 MATERIA: Informática 681.3 Formato: 195 3 250 mm Páginas: 408 Todos los derechos reservados. Queda prohibida, salvo excepción prevista en la Ley, cualquier forma de reproducción, distribución, comunicación pública y transformación de esta obra sin contar con autorización de los titulares de propiedad intelectual. La infracción de los derechos mencionados puede ser constitutiva de delito contra la propiedad intelectual (arts. 270 y sgts. Código Penal). DERECHOS RESERVADOS © 2002 respecto a la primera edición en español por: PEARSON EDUCACIÓN, S.A. Núñez de Balboa, 120 28006 Madrid MUÑOZ CARO, C.; NIÑO RAMOS, A.; VIZCAÍNO BARCELÓ, A. Introducción a la programación con orientación a objetos ISBN: 84-205-3440-4 ISBN eBook: 978-84-8322-584-4 PRENTICE HALL es un sello editorial autorizado de PEARSON EDUCACIÓN, S.A. Edición en español: Equipo editorial: Editor: David Fayerman Aragón Técnico editorial: Ana Isabel García Equipo de producción: Director: José A. Clares Técnico: Diego Marín Diseño de cubierta: Equipo de diseño de Pearson Educación, S.A. Composición: JOSUR TRATAMIENTOS DE TEXTOS, S.L. Powered by Publidisa IMPRESO EN ESPAÑA - PRINTED IN SPAIN Este libro ha sido impreso con papel y tintas ecológicos 1 Sistemas basados en computador Sumario 1.1. Introducción 1.2. Concepto de computación 1.2.1. Definición de computación 1.2.2. Dispositivos de computación 1.3. Concepto de Informática 1.3.1. Definición de informática 1.3.2. Datos e información 1.3.3. Representación de la información 1.3.4. Sistemas informáticos 1.3.5. Consideraciones sobre el software 1.4. Arquitectura clásica o de von Neumann de un computador 1.5. Redes de computadores 1.5.1. Generalidades 1.5.2. Internet 1.5.3. La World-Wide-Web (WWW) 2 Introducción a la programación con orientación a objetos 1.1. INTRODUCCIÓN Este tema pretende proporcionar una visión global de los sistemas basados en computador 1 y de la informática como disciplina. Desde la perspectiva de un texto introductorio como es éste, presentaremos el concepto de computación, así como una pequeña semblanza cronológica, histórica, de las técnicas de computación que han desembocado en el ordenador moderno. A partir de aquí presentaremos el concepto de informática, como campo de conocimiento, y de sistema basado en computador. En el cuarto apartado se considera la estructura y funcionamiento genérico de los computadores modernos. Por su interés actual y su relación con el lenguaje que se utilizará para la implementación de los ejemplos (lenguaje Java) se presenta el tema de las redes de computadores y de Internet. 1.2. CONCEPTO DE COMPUTACIÓN En este apartado vamos a definir el concepto de computación y a presentar el desarrollo de las técnicas y dispositivos de computación que han conducido al ordenador moderno. 1.2.1. DEFINICIÓN DE COMPUTACIÓN Como definición clásica de computación tenemos la dada por el Merriam-Websters’s Collegiate Dictionary en su décima edición que define computación como el acto y acción de computar, donde computar equivale a determinar, especialmente por medios matemáticos. En el mundo anglosajón, originalmente un “computer” era una persona que realizaba cálculos para resolver un problema. Sólo hacia 1945 el nombre se empieza a aplicar a la maquinaria que realiza dicha tarea (Ceruzzi, 1999). Los computadores (ordenadores) actuales son todavía capaces de computar (resolver problemas por medios matemáticos), especialmente en el campo científico-técnico donde ésta es su misión principal. Sin embargo, la tremenda repercusión del ordenador en la vida actual no proviene sólo de su capacidad de cómputo, sino de su capacidad para almacenar y recuperar datos, para manejar redes de comunicaciones, para procesar texto, etc. Es decir, de su capacidad para procesar información. Ésta es la causa de la gran importancia del computador en la vida actual. Para la mayoría de la gente el computador representa una forma eficiente de gestionar información, sea en forma de texto, cartas enviadas por correo electrónico, informes generados automáticamente o transacciones de todo tipo. Para la mayor parte de la población la realización de cálculos es lo “menos importante” que un computador realiza. Sin embargo, los computadores se desarrollaron con el principal objetivo de realizar cálculos, aunque la potencia final y los usos del ingenio habrían sido impensables para muchos de los que a lo largo del tiempo participaron en la tarea. Resulta interesante presentar el desarrollo histórico de los medios de computación y el desarrollo del computador moderno. Esta presentación implícitamente lleva aparejado el desarrollo del concepto de programación como técnica para describir al computador, en términos inteligibles para él, las tareas que se desea que realice. 1.2.2. DISPOSITIVOS DE COMPUTACIÓN Los dispositivos originales de computación eran dispositivos de ayuda para la realización de cálculos aritméticos (computación en sentido etimológico), que poco a poco incrementaron sus posibilidades hasta llegar al concepto moderno de computador. Veamos brevemente la evolución histórica. 1 Según el Diccionario de la Lengua de la Real Academia Española los términos computador, ordenador y computadora se pueden utilizar indistintamente. A lo largo de este libro así se usarán. Sistemas basados en computador 3 Sistemas de numeración El punto de partida para cualquier técnica de computación es la preexistencia de un sistema de numeración. Esto no es en absoluto trivial, hoy por hoy la educación elemental enseña a los niños a contar usando un sistema de notación decimal, y la técnica parece algo consustancial con la existencia humana. Sin embargo, el concepto de número como una abstracción de las entidades numeradas es un paso fundamental en la evolución cultural del hombre. Que no siempre esto ha sido así se puede todavía observar en algunos lenguajes tribales donde se usan distintos nombres para las cantidades dependiendo de la naturaleza de lo numerado. Desde este punto de vista no es lo mismo cuatro piedras que cuatro naranjas y el paso de abstracción fundamental es la consideración de que en ambos casos tenemos cuatro elementos. Una vez que se dispone de un sistema de numeración el siguiente paso es su uso para contar elementos. Dispositivos de cómputo antiguos Una vez establecido un sistema de numeración, la raza humana ideó dispositivos de ayuda para la realización de tareas aritméticas. En los primeros tiempos de la historia humana, para las tareas más sencillas no era necesaria una habilidad aritmética más allá de sumas y restas simples o de multiplicaciones sencillas. Al aumentar la complejidad de la vida en común, se incrementa la complejidad de los cálculos aritméticos necesarios para los tratos comerciales, los impuestos, la creación de calendarios o las operaciones militares. Para agilizar la realización de estos “cómputos” la primera ayuda es la de los dedos, para simbolizar cantidades e incluso realizar operaciones. Los dedos pueden usarse de la forma más simple para indicar una cantidad mostrando el número de dedos equivalentes. Sin embargo, también pueden usarse de forma simbólica para representar cantidades arbitrarias con combinaciones distintas de dedos mostrados u ocultados. Una primera necesidad en la antigüedad fue la de disponer de un medio de representar cantidades que fuera conocido por todos los pueblos (al menos en el entorno euro-asiático-africano clásico). Esta técnica se usaba fundamentalmente para el intercambio comercial entre pueblos cuyas lenguas podían ser desconocidas entre sí. En la antigüedad clásica existió este sistema que usaba los dedos (de las dos manos) para representar simbólicamente cantidades hasta de 9999 elementos y que estaba extendido por el norte de África, Oriente Medio y Europa. Herodoto y otros autores más modernos como Cicerón o Marco Fabio Quintiliano lo mencionan. Con los dedos se pueden aplicar técnicas de cálculo más complejas que la simple enumeración de elementos. Por ejemplo, en Europa existieron hasta épocas relativamente recientes, técnicas de multiplicación que usaban las manos para realizar los cálculos. Sin embargo, el medio mecánico más antiguo de realización de cálculos parece ser el ábaco (en sus diferentes versiones). El ábaco es, en esencia, una tabla de conteo que puede ser tan simple como una serie de piedras colocadas sobre el suelo. Su estructura típica es la de un marco de madera con una serie de alambres donde se ensartan varias cuentas, véase la Figura 1.1. Esta herramienta, a pesar de su simplicidad, es una gran ayuda de computación si se usa adecuadamente. Actualmente se asocia el ábaco con Oriente pero se usó en Europa desde la antigüedad clásica hasta hará unos 250 años. La potencia del ábaco reside en que no es una simple tabla de anotaciones; además se pueden realizar operaciones aritméticas con él. De hecho, la capacidad de cálculo con un ábaco es muy alta. Un ejemplo de su eficacia es el siguiente: en 1946 en un concurso de velocidad y precisión de cálculo, Kiyoshi Matsuzake del Ministerio de Administración Postal Japonés derrotó con un ábaco, en cuatro de cinco ocasiones, al soldado Thomas Nathan Wood del ejército americano de ocupación que era el operador más experto de máquina mecánica de calcular de la marina de los EE.UU. 4 Introducción a la programación con orientación a objetos Figura 1.1. Ábaco En la evolución hacia el computador moderno, merece mención especial el escocés John Napier, barón de Merchiston, quien inventó los logaritmos en el siglo XVII 2. Como herramienta de cálculo los logaritmos permiten transformar las multiplicaciones en sumas y las divisiones en restas. Los logaritmos presentan una tremenda utilidad práctica, pero el problema del barón era la creación de las tablas de logaritmos necesarias para su uso. En la historia de los medios de computación el barón es importante por haber diseñado varios instrumentos de cómputo. Entre ellos el denominado rabdologia, popularmente conocido como “huesos” de Napier, que él usaba para calcular sus tablas. Estos “huesos” eran una serie de barras cuadrangulares que en esencia representaban la tabla de multiplicar y que permitían realizar esta operación. El apelativo de “huesos” deriva del aspecto que presentaban y del material del que muchas veces estaban hechos. Otros dispositivos de cálculo de Napier fueron el Prontuario de Multiplicación (una versión más elaborada de los “huesos”) y el dispositivo de Aritmética Local, un tablero de ajedrez modificado para ser usado como una especie de ábaco que trabajaba en sistema binario. Napier publicó un libro describiendo el manejo de la rabdologia. El libro titulado Rabdologia muestra también una de las primeras menciones del punto 3 decimal. Los huesos de Napier se difundieron con rapidez por Europa. Sin embargo, en la historia de la computación la invención de los logaritmos dio nacimiento al que probablemente haya sido el dispositivo de cómputo más usado desde el siglo XVII hasta la última mitad del siglo XX: la regla de cálculo. El origen de la regla de cálculo es el siguiente. Tras conocer la invención de los logaritmos por Napier, Henry Briggs, Profesor de Geometría del Gresham College en Londres, comenzó a trabajar en el tema, introduciendo los logaritmos en base 10 y creando nuevas tablas de logaritmos para los números enteros. Edmund Gunter, Profesor de astronomía y matemáticas también en el Gresham College, conoció por Briggs la existencia de los logaritmos. Gunter estaba interesado en problemas de astronomía y navegación, lo que implicaba el uso de funciones trigonométricas. Dado que las tablas de logaritmos de Briggs eran para números enteros, no presentaban mucha utilidad para Gunter, quien decidió abordar el cálculo de tablas de logaritmos para senos y tangentes. Gunter había trabajado en la popularización y desarrollo del compás de sector, un instrumento de cálculo 2 El apellido Napier se escribía de varias formas en la época: Napier, Napeir, Napair, Nepier y algunas formas más, y de él toman el nombre los logaritmos en base e, los logaritmos neperianos. 3 Entre los anglosajones los decimales se indican con punto, no con coma. Sistemas basados en computador 5 Figura 1.2. Regla de cálculo consistente en un par de brazos unidos en un extremo por un pivote en forma de compás y con una serie de escalas calibradas sobre cada uno. Puesto que el logaritmo de un producto es la suma de los logaritmos, Gunter pensó en un sistema parecido al sector que permitiera realizar mecánicamente un producto. Gunter ideó una regla graduada en escala logarítmica con un compás. Para multiplicar dos números x e y se abría el compás la cantidad x, midiendo sobre la regla logarítmica. A continuación se colocaba uno de los brazos del compás apoyado en el punto de la regla correspondiente al valor y. Sin cerrar el compás se colocaba el otro brazo en la dirección creciente de la escala. El proceso equivalía a sumar las dos distancias en la escala (suma de logaritmos), así que el valor que señalaba el brazo final del compás sobre la escala logarítmica era el producto de los dos números. Para hacer un cociente se sustraían las distancias en lugar de sumarse. El dispositivo simplificaba el cálculo de productos y cocientes y también evitaba tener que gastar tiempo buscando en las tablas de logaritmos. La modificación final del dispositivo se debió a William Oughtred quien hoy sería definido como un matemático puro y que se puede considerar el inventor de la versión definitiva de la regla de cálculo. En una visita que realizó en 1610 a Henry Briggs, conoció a Edmund Gunter quien le mostró su instrumento de cálculo logarítmico. Oughtred se dio cuenta de que se podía eliminar la necesidad del compás si se usaban dos reglas graduadas logarítmicamente que se deslizaran una con respecto a la otra. Así, para multiplicar los dos números x e y bastaba con colocar el origen de la segunda escala sobre el punto del valor x en la primera, localizar el valor y en la segunda y mirar cuál era el valor que correspondía en la primera escala. Este sistema de reglas deslizantes en escala logarítmica es la base de todas las reglas de cálculo posteriores 4. Las reglas de cálculo evolucionaron a lo largo del tiempo hasta adquirir forma muy sofisticada, véase la Figura 1.2, representando un instrumento analógico de cómputo de precisión. Hasta la introducción de las calculadoras electrónicas de mano, la regla de cálculo era un instrumento que todo ingeniero o científico usaba en su trabajo cotidiano. Dispositivos mecánicos Aparte de los instrumentos manuales indicados en el apartado anterior, los intentos auténticos de computación automática comienzan con el desarrollo de los distintos modelos de calculadoras mecánicas. Sin embargo, el desarrollo práctico de estas máquinas tuvo que esperar hasta el siglo XVII cuando la 4 Por esta razón, en inglés la regla de cálculo se denomina sliding rule (regla deslizante). 6 Introducción a la programación con orientación a objetos ingeniería mecánica estuvo lo suficientemente desarrollada como para permitir la construcción de los sistemas de engranajes y palancas en los que se basa su funcionamiento. La primera calculadora mecánica (sumadora) con un dispositivo de acarreo para tener en cuenta que se ha conseguido pasar a una posición decimal superior (el “me llevo uno” de la aritmética elemental) se atribuye a Blaise Pascal. Sin embargo, la primera fue realizada por el matemático alemán Wilhelm Schickard a principios del siglo XVII quien comunicó su invención a Kepler, con quien había colaborado. Por la descripción y los diagramas que Schickard remitió a Kepler se sabe que la máquina de Schickard automatizaba el trabajo con una serie de huesos de Napier, realizando mecánicamente las sumas implicadas en la obtención de multiplicaciones. La máquina representaba cada posición decimal con una rueda donde estaban representados los diez dígitos 1-2-3-4-5-6-7-8-9-0. El problema de la máquina era el del acarreo acumulado cuando se pasaba de 9 a 0 en un disco y había que mover el disco de la siguiente posición decimal en una unidad. Esto se realizaba con una rueda dentada (rueda de acarreo) con un diente que hacía avanzar a la rueda a la nueva posición decimal cuando la de la posición anterior daba una vuelta completa. El problema se entiende si imaginamos que tenemos el valor 9999999 y sumamos 1. Habrá un total de 7 discos que tienen que girar a la vez a base de ruedas dentadas con un solo diente (una por posición decimal). Es fácil entender que la rueda de acarreo del primer dígito debe aguantar el esfuerzo necesario para poder girar todos los demás dígitos. En la práctica el sistema no podía aguantar el esfuerzo y se rompía si el número de posiciones decimales era grande. Schickard sólo construyó máquinas con un máximo de seis posiciones decimales. Posteriormente y de forma independiente Pascal desarrolló una serie de ingenios mecánicos similares. La primera máquina fue diseñada cuando Pascal contaba 19 años. Cuando intentó que los artesanos locales construyeran las piezas necesarias, el resultado fue tan catastrófico que decidió él mismo aprender mecánica, e incluso trabajó con un herrero para aprender a manejar el metal y construir las piezas. Pascal construyó unas cincuenta máquinas a lo largo de su vida, en esencia todas máquinas sumadoras. El problema de Pascal para construir máquinas capaces de multiplicar era nuevamente acumular el acarreo sobre varias posiciones decimales. Pascal ideó un sistema de pesos que evitaba el sistema de engranajes de Schickard. El problema era que la máquina sólo podía avanzar sus engranajes en un sentido. En la práctica esto se traducía en que la máquina sólo podía aumentar acarreos, no disminuir o dicho de otra forma, sólo sumaba. Otro interesante diseño es el de la máquina de Leibniz. Habiendo oído hablar de la máquina sumadora de Pascal, Leibniz se interesa por el tema y comienza con el diseño de una máquina multiplicadora. El diseño original no era factible y Leibniz abandona el tema durante varios años. Finalmente, acaba construyendo una máquina multiplicadora operativa gracias a la invención de un elegante sistema de engranajes con dientes de anchura variable (tambor escalonado). Otras calculadoras mecánicas fueron construidas por personajes como el inglés Samuel Morland o el francés René Grillet ambos en el siglo XVII. Comercialmente, la primera calculadora mecánica de utilidad fue el aritmómetro de Thomas de Colmar fabricado en la década de 1820 en Francia y basado en el diseño de tambor escalonado de Leibniz. Sin embargo, el gran paso en la producción comercial de calculadoras mecánicas se da con las máquinas de Baldwin-Odhner. El problema con las calculadoras mecánicas previas era que el sistema de tambor escalonado de Leibniz resultaba un dispositivo pesado y engorroso que implicaba que las máquinas fueran grandes y masivas. A finales del siglo XIX, Frank. S. Baldwin en EE.UU. y W. T. Odhner, un suizo que trabajaba en Rusia, idearon un nuevo diseño para las ruedas dentadas que representaban los dígitos decimales de cada posición decimal. La idea era que el número de dientes en las ruedas fuera variable, correspondiendo el número de dientes al número representado. Estos dientes podían aparecer o desaparecer según se seleccionaba un dígito u otro con una palanca colocada sobre la propia rueda. Estas ruedas dentadas variables se podían construir como discos finos y ligeros, lo que permitía colocar varios de estos discos, representando cada uno un dígito, en unos pocos centímetros de espacio. El resultado era una máquina mucho más compacta y ligera que las existentes hasta entonces, véase la Figura 1.3. A principios del siglo XX estas máquinas se vendían por decenas de miles. Sistemas basados en computador 7 Figura 1.3. La Minerva, una máquina de Baldwin-Odhler de fabricación española Hasta la introducción de las calculadoras electrónicas las máquinas de Baldwin-Odhner se seguían usando en oficinas y laboratorios. Las máquinas de Babbage Los instrumentos mecánicos mencionados en el aparatado anterior no son sino ayudas mecánicas de computación. El primer gran paso hacia lo que es el concepto moderno de computador, lo dio Charles Babbage (1791-1871) con sus trabajos sobre computación automática. El nivel tecnológico de su tiempo no era suficiente para poder llevar a cabo sus diseños, pero las ideas de Babbage eran muy avanzadas para la época. Tanto es así que Babbage se considera uno de los pioneros del desarrollo del computador moderno, al mismo nivel de Konrad Zuse o Howard Aitken que trabajaron en el desarrollo de los primeros modelos de computador en las décadas de 1930-1940. Charles Babbage era matemático y hombre de ciencia en el sentido más general que esta palabra tenía en el siglo XIX. En aquella época, se hacía amplio uso de tablas matemáticas como las de logaritmos, por ejemplo, para reducir el trabajo de cálculo. Dada su formación e intereses, Babbage hacía uso intensivo de las tablas matemáticas y era consciente de la gran cantidad de errores que poseían. La pasión por la precisión de Babbage le llevó a abordar la construcción de tablas matemáticas libres de errores. Para ello incluso diseñó sistemas tipográficos para reducir la probabilidad de la aparición de errores en las tablas. Sin embargo, el problema era siempre el mismo. Una persona calculaba los valores y escribía un borrador de la tabla con la consiguiente posibilidad de error. Luego, el borrador era traducido a mano en tipos de imprenta para imprimir las tablas, con la adicional posibilidad de error. Babagge llegó a la conclusión de que la única forma de evitar los errores humanos era automatizar 8 Introducción a la programación con orientación a objetos todo el proceso. Su idea era la de una máquina capaz de calcular e imprimir sin intervención humana las tablas matemáticas deseadas. En la época, las tablas se calculaban aproximando las funciones a calcular por formas polinómicas y manejando las formas polinómicas con el método de diferencias. Usando el método de diferencias para representar un polinomio se evitaba tener que realizar operaciones de multiplicación y división. Este método puede aún verse explicado en textos de cálculo numérico aplicado al problema de la interpolación de funciones (Demidovich y Maron, 1977; Kopchenova y Maron, 1987). Babbage imaginó su máquina de cálculo de tablas como una Difference Engine, Máquina de Diferencias, que aplicara de forma automática el método de diferencias. Babbage construyó un pequeño prototipo y solicitó ayuda oficial para la construcción del diseño completo. El problema era que la tecnología mecánica no estaba suficientemente avanzada en aquel entonces para la construcción de algunas partes de la máquina. El mismo Babbage colaboró en el desarrollo de nuevas herramientas de fabricación mecánica que permitieran construir las piezas de la máquina. Este trabajo adicional y las demoras oficiales en la provisión de fondos hicieron que el trabajo se parara numerosas veces y que finalmente la máquina no acabara de construirse. Durante uno de estos períodos de inactividad Babbage trabajaba en un rediseño de la máquina y se le ocurrió que el resultado de las computaciones de la máquina pudiera volver a ser introducido como dato en la propia máquina. Babbage se dio cuenta de que ese diseño circular dotaba a la máquina de una potencia de cómputo mucho mayor que la del modelo inicial. Un diseño tal permitía el manejo de funciones que no tenían solución analítica. Babbage denominó la nueva máquina Analytical Engine (Máquina Analítica) y al respecto de la misma escribió en una carta en mayo de 1835 (Williams, 2000): ... durante seis meses he estado dedicado a los diseños de una nueva máquina de cálculo de mucha mayor potencia que la primera. Yo mismo estoy asombrado de la potencia de que he podido dotar a esta máquina; hace un año no hubiera creído que este resultado fuera posible. La máquina analítica constaba de tres partes que Babbage denominó: The store (El almacén) The mill (La fábrica o taller) The control barrell (El cilindro o tambor de control) El almacén era una memoria mecánica, el taller una unidad aritmética y el cilindro de control una unidad de control de procesos que contenía el equivalente mecánico de un juego de instrucciones básicas de trabajo. En esencia, el diseño de Babbage respondía a la estructura moderna de un computador. El trabajo de la máquina analítica se realizaba indicándole qué acciones elementales tenía que realizar por medio de una serie de tarjetas perforadas, de forma similar a como entonces se introducían los diseños en las tejedoras mecánicas de Jackard. La máquina, por lo tanto, respondía a un programa de instrucciones externo que leía como entrada. La máquina analítica no llegó a construirse principalmente porque Babbage no consiguió los fondos necesarios. Desde la perspectiva actual, la máquina hubiera supuesto un avance de alcance inimaginable en la época 5. La necesidad de desarrollar el conjunto de instrucciones que compusieran un programa a ser ejecutado por la máquina analítica da carta de nacimiento a la ciencia y el arte de la programación. En este contexto tiene especial interés la colaboración entre Babbage y Ada Augusta, condesa de Love5 Como fabulación de lo que habría ocurrido en caso de construirse la máquina analítica se recomienda la lectura de la novela The Difference Engine (Gibson y Sterling, 1996). Aquí se nos muestra un siglo XIX alternativo, donde Babbage ha podido construir sus máquinas y un imperio británico que ha conjugado la revolución industrial con la revolución informática controlando el mundo con sus computadoras mecánicas movidas a vapor. Sistemas basados en computador 9 lace. Ada era hija del poeta Lord Byron y tenía una sólida formación matemática, algo muy raro en la época para una mujer. En 1843 publicó un trabajo donde se describía la máquina analítica y la manera de programarla. En particular en el trabajo se presentaba el programa que permitía el cálculo de los números de Bernoulli (Kim y Toole, 1999). En su trabajo, Ada mostraba la gran potencia y la flexibilidad que un programa modificable de instrucciones permitía a la máquina. Por estas razones, la condesa de Ada Lovelace es considerada la primera teórica (y práctica) de la programación. El computador moderno A finales de la década de 1930 aparecieron distintos grupos de trabajo interesados en la construcción de máquinas de calcular con algún tipo de sistema automático de control. Estos esfuerzos se abordaron tanto desde el punto de vista mecánico como del electrónico. Respecto a las máquinas mecánicas, destaca el trabajo en Alemania de Konred Zuse. Zuse, ingeniero de formación, conocía el esfuerzo de cómputo necesario para los trabajos técnicos. Se dio cuenta de que el problema fundamental, usando una regla de cálculo o una máquina sumadora mecánica, era el almacenamiento de los resultados intermedios que se van produciendo. A tal efecto es necesario un sistema de memoria para mantener la información. En 1934 Zuse era consciente de que una calculadora automatizada sólo requiere tres unidades funcionales: un control, una memoria y una sección aritmética. Con este diseño básico construye la Z1 (la primera máquina de la serie Z). La Z1 usaba una memoria mecánica codificada en binario y leía la secuencia de instrucciones a realizar de una serie de tarjetas perforadas. Al mismo tiempo en Harvard, Howard Aitken construía otra secuencia de máquinas automáticas, la serie de las Mark. Todos estos esfuerzos se basaban aún en el uso de elementos mecánicos. La gran revolución surgió con el advenimiento de las máquinas electrónicas. Con respecto a las máquinas electrónicas uno de los primeros esfuerzos fue el diseño de la ABC (Atanasoff-Berry Computer). El ABC no llegó a ser operativo, pero su diseño tuvo importancia en el desarrollo de modelos posteriores. En particular, el ABC usaba el sistema binario, lo que simplificaba los circuitos electrónicos usados. La primera computadora electrónica operativa fue la ENIAC (Electronic Numerical Integrator and Computer) que trabajaba en sistema decimal. Todas estas máquinas estaban programadas con algún tipo de instrucciones en tarjetas perforadas o directamente como conexiones (cableado). El siguiente paso se gestó en el equipo de desarrollo del ENIAC y se trata de la invención del concepto de programa almacenado. En este asunto tuvo cierta participación John von Neumann (físico, químico y matemático) aunque no fue el inventor del concepto. Sólo el hecho de que él escribiera el borrador del informe que se presentó a los patrocinadores militares del proyecto ENIAC, y que recogía la idea de problema almacenado en memoria, fue la causa de que se asociara con él dicho concepto y hoy se hable de máquinas de von Neumann. Este nuevo concepto formó parte del diseño de la descendiente del ENIAC, la EDVAC (Electronic Discrete Variable Arithmetic Computer). La EDVAC almacenaba el programa en memoria, con lo que las instrucciones se leían a mucha mayor velocidad que haciéndolo una a una desde una fuente externa como las tarjetas perforadas. 1.3. CONCEPTO DE INFORMÁTICA Como hemos visto, el origen del ordenador o computador se debe a la necesidad de realizar cálculos de forma automática. Sin embargo, el procesamiento numérico no es la única utilidad de un ordenador. La posibilidad de realizar operaciones lógicas le dota de la capacidad de usarse para el procesamiento de información, entendida desde un punto de vista general. El cuerpo de conocimiento que se encarga de todo lo relacionado con el desarrollo y uso de ordenadores para el tratamiento de información (numérica o no) es la informática. Veamos una definición más precisa. 10 Introducción a la programación con orientación a objetos 1.3.1. DEFINICIÓN DE INFORMÁTICA Informática del francés informatique es la designación castellana de Computer Science and Engineering en inglés. Según la Real Academia Española se define como el conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento automático de la información por medio de ordenadores. La siguiente pregunta es obvia: ¿qué se entiende por información? 1.3.2. DATOS E INFORMACIÓN En primer lugar es necesario distinguir con precisión entre los conceptos de datos e información: a) Datos Como tales se entiende el conjunto de símbolos usados para representar un valor numérico, un hecho, una idea o un objeto. Individualmente los datos tienen un significado puntual. Como ejemplo de dato tenemos el número de la seguridad social de un empleado, un número de teléfono, la edad de una persona, etc. b) Información Por tal se entiende un conjunto de datos procesados, organizados, es decir, significativos. La información implica tanto un conjunto de datos como su interrelación. Dependiendo de esta última el mismo conjunto de datos suministra diferente información. Por ejemplo, imaginemos los datos de los trabajadores de una empresa: Nombre Edad Estudios Salario Por separado se trata de un conjunto de datos individuales. Sin embargo, si los organizamos por edad y salario tenemos un informe sobre la distribución del sueldo en función de la edad. Por otro lado, si organizamos por estudios y salario tendremos un informe diferente que nos indica la distribución del salario en función de la formación de los empleados. Como no vamos a tratar específicamente sistemas de gestión de información consideraremos datos e información como sinónimos. 1.3.3. REPRESENTACIÓN DE LA INFORMACIÓN Habiendo definido el concepto de información el problema es cómo representarla para poder manejarla de forma automática. Es posible idear muchas maneras de hacerlo, pero la clasificación básica nos lleva a la distinción entre técnicas analógicas y digitales. Veamos la diferencia. a) Representación analógica Cuando una magnitud física varía para representar la información tenemos una representación analógica. Por ejemplo, el voltaje en función de las variaciones de presión producidas por la voz en un micrófono.