Logo Studenta

Introducción a la Programación

¡Este material tiene más páginas!

Vista previa del material en texto

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
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
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.
IMPRESO EN ESPAÑA - PRINTED IN SPAIN
Este libro ha sido impreso con papel y tintas ecológicos
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
Datos de catalogación bibliográfica
Powered by Publidisa
ISBN eBook: 978-84-8322-584-4
Sistemas basados 
en computador
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)
Sumario
1
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, presentare-
mos el concepto de computación, así como una pequeña semblanza cronológica, histórica, de las téc-
nicas 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 ejem-
plos (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écni-
cas 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 Dic-
tionary en su décima edición que define computación como el acto y acción de computar, donde com-
putar 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 comunica-
ciones, 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, aun-
que la potencia final y los usos del ingenio habrían sido impensables para muchos de los que a lo lar-
go 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 lle-
va 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.
2 Introducción a la programación con orientación a objetos
1 Según el Diccionario de la Lengua de la Real Academia Española los términos computador, ordenador y computado-
ra se pueden utilizar indistintamente. A lo largo de este libro así se usarán.
Sistemas de numeración
El punto de partida para cualquier técnica de computación es la preexistencia de un sistema de nume-
ració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 huma-
na. 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 depen-
diendo 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 tene-
mos 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 ta-
reas 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ómpu-
tos” la primera ayuda es la de los dedos, para simbolizar cantidades e incluso realizar opera-
ciones.
Los dedos pueden usarse de la forma más simple para indicar una cantidad mostrando el núme-
ro 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 unmedio de representar cantidades que fuera cono-
cido 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 des-
conocidas 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 extendi-
do 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 made-
ra con una serie de alambres donde se ensartan varias cuentas, véase la Figura 1.1. Esta herra-
mienta, 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 has-
ta 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 velo-
cidad 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.
Sistemas basados en computador 3
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 logarit-
mos 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 impor-
tante por haber diseñado varios instrumentos de cómputo. Entre ellos el denominado rabdologia, popu-
larmente 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 per-
mitían realizar esta operación. El apelativo de “huesos” deriva del aspecto que presentaban y del mate-
rial 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 difun-
dieron 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 inven-
ción de los logaritmos por Napier, Henry Briggs, Profesor de Geometría del Gresham College en Lon-
dres, 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 tam-
bién en el Gresham College, conoció por Briggs la existencia de los logaritmos. Gunter estaba intere-
sado 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 utili-
dad para Gunter, quien decidió abordar el cálculo de tablas de logaritmos para senos y tangentes. Gun-
ter había trabajado en la popularización y desarrollo del compás de sector, un instrumento de cálculo
4 Introducción a la programación con orientación a objetos
Figura 1.1. Ábaco
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.
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 equi-
valía a sumar las dos distancias en la escala (suma de logaritmos), así que el valor que señalaba el bra-
zo 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 pro-
ductos 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 evoluciona-
ron 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 com-
putació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
Sistemas basados en computador 5
4 Por esta razón, en inglés la regla de cálculo se denomina sliding rule (regla deslizante).
Figura 1.2. Regla de cálculo
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 pasara una posición decimal superior (el “me llevo uno” de la aritmética ele-
mental) 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áqui-
na de Schickard automatizaba el trabajo con una serie de huesos de Napier, realizando mecánica-
mente 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 rue-
da 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 posicio-
nes 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 simi-
lares. La primera máquina fue diseñada cuando Pascal contaba 19 años. Cuando intentó que los arte-
sanos 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 engrana-
jes 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 suma-
dora de Pascal, Leibniz se interesa por el tema y comienza con el diseño de una máquina multiplica-
dora. 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 siste-
ma 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 sis-
tema 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 repre-
sentaban 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 enton-
ces, véase la Figura 1.3. A principios del siglo XX estas máquinas se vendían por decenas de miles.
6 Introducción a la programación con orientación a objetos
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 tiem-
po no era suficiente para poder llevar a cabo sus diseños, pero las ideas de Babbage eran muy avan-
zadas 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 desarro-
llo 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 loga-
ritmos, 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 valo-
res 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
Sistemas basados en computador 7
Figura 1.3. La Minerva, una máquina de Baldwin-Odhler de fabricación española
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 cal-
cular por formas polinómicas y manejando las formas polinómicas con el método de diferencias. Usan-
do 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 apli-
cado 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 aser introducido como dato en la propia máquina. Babbage se dio cuen-
ta 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. Bab-
bage 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):
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ási-
cas 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 fon-
dos necesarios. Desde la perspectiva actual, la máquina hubiera supuesto un avance de alcance inima-
ginable en la época 5.
La necesidad de desarrollar el conjunto de instrucciones que compusieran un programa a ser eje-
cutado 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 Love-
... 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.
8 Introducción a la programación con orientación a objetos
5 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áti-
ca controlando el mundo con sus computadoras mecánicas movidas a vapor.
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 mane-
ra 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 flexibi-
lidad que un programa modificable de instrucciones permitía a la máquina. Por estas razones, la con-
desa 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 aborda-
ron 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, inge-
niero de formación, conocía el esfuerzo de cómputo necesario para los trabajos técnicos. Se dio cuen-
ta 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 necesa-
rio un sistema de memoria para mantener la información. En 1934 Zuse era consciente de que una cal-
culadora 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áqui-
nas 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 sur-
gió 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 com-
putadora electrónica operativa fue la ENIAC (Electronic Numerical Integrator and Computer) que tra-
bajaba 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 con-
cepto. 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 cau-
sa 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 Varia-
ble Arithmetic Computer). La EDVAC almacenaba el programa en memoria, con lo que las instruc-
ciones 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 ordena-
dor. La posibilidad de realizar operaciones lógicas le dota de la capacidad de usarse para el procesa-
miento 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 informa-
ción (numérica o no) es la informática. Veamos una definición más precisa.
Sistemas basados en computador 9
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 per-
sona, etc.
b) Información
Por tal se entiende un conjunto de datos procesados, organizados, es decir, significativos. La informa-
ció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 traba-
jadores 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. Porotro 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 mane-
jarla 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.
10 Introducción a la programación con orientación a objetos
b) Representación digital
En este caso la información se divide en trozos y cada trozo se representa numéricamente. Lo que se
maneja al final es ese conjunto de números. La cantidad de trozos en que se divide lo que se quiere
representar está relacionada con la calidad de la representación. La Figura 1.4 ilustra este concepto
considerando una cierta magnitud, X, que varía con el tiempo, t.
En el caso de la Figura 1.4 (a) el espaciado entre los puntos tomados sobre el eje de abscisas no es
suficiente para representar el pico central. En el segundo caso, sin embargo, sí recogemos el pico y la
representación es más fiel a la realidad. Cuanto menor sea el intervalo entre puntos más fiable es la
representación, aunque mayor es el número de datos que necesitamos para representar el mismo inter-
valo (temporal en este ejemplo). Lo que al final almacenaríamos para representar la información repre-
sentada por la curva anterior sería el conjunto de valores de ordenada para cada punto tomado sobre
el eje de abscisas.
En los ordenadores modernos toda la información está almacenada digitalmente, desde los núme-
ros al texto pasando por el audio o el vídeo. Esto nos lleva a una cuestión: ¿cómo está representado el
texto en un ordenador?
En un ordenador el texto está representado por un código numérico. Cada carácter (letras mayúscu-
las y minúsculas, signos de puntuación, signos especiales como #, @, &, etc.) tiene asociado un valor
numérico. Estos valores numéricos son arbitrarios y se asigna un valor u otro dependiendo del código
usado. Un código típico y tradicional es el código ASCII (American Standard Code for Information Inter-
change) pero el conjunto de caracteres es muy limitado, sólo el conjunto básico necesitado en inglés, sin
caracteres acentuados, por ejemplo. Existen otros códigos, como el Unicode que puede codificar 216 posi-
bilidades (usa 16 bits), con lo que se pueden representar los caracteres de multitud de lenguajes sin tener
que estar mezclando códigos. Por ejemplo, en Unicode la frase “Hola, Pepe.” queda como:
En el ejemplo anterior cada carácter muestra en la parte inferior el correspondiente código Unico-
de. Obsérvese que el blanco es un carácter con su código (el ordenador lo tiene que almacenar para
saber que está ahí) y que las mayúsculas tienen código distinto de las minúsculas. Al final lo que habría
en el ordenador sería la secuencia anterior de números.
Otro problema es cómo representar los números. Resulta conveniente, por su simplicidad, usar el
sistema de numeración binario donde sólo tenemos 2 dígitos: 0 y 1. Estos dos dígitos se pueden repre-
sentar fácilmente en los circuitos electrónicos, por ejemplo como conducción o no conducción o, en
Sistemas basados en computador 11
Figura 1.4. Ilustración del efecto del incremento de muestras sobre una señal
H
72
o
111
1
108
a
97
,
44 32
P
80
e
101
p
112
e
101
.
46
general, por cualquier método que pueda distinguir entre dos estados. La base dos se maneja con nota-
ción posicional igual que la decimal. Al construir el número se comienza con el 0, luego se pasa al 1
y al agotar la base se coloca un 0 o un 1 a la izquierda, véase la Tabla 1.1.
12 Introducción a la programación con orientación a objetos
Tabla 1.1. Equivalencia decimal-binario
En informática un dígito binario se denomina bit (contracción de binary digit). Otra unidad común
es el conjunto de 8 bits, denominado byte:
1 byte < > 8 bits
Es interesante saber cuál es el mayor valor numérico que se puede representar con un cierto núme-
ro de bits. Puesto que con un bit se pueden representar dos posibilidades, con 2 bits tendremos cuatro
(2 3 2) y en general, con N bits tenemos 2N, véase la Tabla 1.2.
Tabla 1.2. Número de posibilidades en
función del número de bits
Esta secuencia de valores es muy típica, aparece por ejemplo en los valores de la memoria de los
ordenadores (aunque referida a un múltiplo del byte, el kilobyte como veremos más adelante).
1.3.4. SISTEMAS INFORMÁTICOS
Llega ahora el momento de considerar dos conceptos nuevos de importancia, el de sistema y a partir
de él, el de sistema informático (o sistema basado en computador). Comencemos por la definición de
sistema.
Decimal Binario
0 0
1 1
2 10
3 11
Bits Posibilidades
0 2051
1 2152
2 2254
3 2358
4 24516
5 25532
6 26564
7 275128
8 (1 byte) 285256
9 295512
10 21051024
El concepto de sistema es ubicuo en el campo informático y aparece en múltiples contextos. Así,
hablamos de sistemas físicos, de sistemas de información o de sistemas software.
Un sistema informático es un conjunto de ciertas entidades que tienen como objetivo un determi-
nado tipo de procesamiento de información. Estas entidades pueden ser:
— Físicas (Hardware 6 )
— Lógicas (Software 6 )
— Humanas (“Peopleware”)
La parte física del ordenador está constituida por los dispositivos que conforman el ordenador. La
palabra hardware es inglesa y literalmente significa material de ferretería. Con el advenimiento de la
informática se empieza a aplicar en el contexto que aquí se describe. Se suele coloquialmente decir
que todo lo que se puede tocar es hardware. En el siguiente apartado consideraremos en más detalle la
parte física de un ordenador. 
La parte lógica está formada por los programas y toda la información asociada a ellos (informa-
ción de desarrollo y documentación del programa). En inglés se denomina software, haciendo un jue-
go de palabras con hardware, cambiando el hard (rígido o duro) por soft (blando). El software es la
componente lógica, intangible, de un sistema informático.
Siguiendo con los juegos de palabras la componente humana de un sistema informático se deno-
mina a veces peopleware. La componente humana de un sistema se refiere generalmente a los usua-
rios del mismo.
Puesto que la programación (una parte del proceso de desarrollo de software) va a ser el tema que
nos ocupe en este texto, vamos a considerar el software con algo más de detalle en el siguiente apar-
tado.
1.3.5. CONSIDERACIONES SOBRE EL SOFTWARE
Comúnmente se considera software como sinónimo de programa. Sin embargo, desde el punto de vis-
ta informático el concepto de software es más general, abarcando no sólo el código generado, sino
también toda la documentación asociada. Tradicionalmente, el software se clasifica en dos grandes
grupos, software de sistemas y software de aplicación.
El software de sistemas es software usado por otro software. El ejemplo clásico es el del sistema
operativo, que es el programa que permite comunicarse con, y usar de forma cómoda, el hardware. El
sistema operativo es la conexión con el hardware que usan el resto de programas que se ejecutan en
un ordenador. Por otro lado, el software de aplicación es el destinado a su utilización por un usuario y
no por otros programas. Una hoja de cálculo, un procesador de textos o un programa de juego son
ejemplos típicos.
La comunicación del usuario con el software se realiza hoy casi generalizadamente a través de inter-
faces gráficas de usuario. Lo primero es indicar qué interfaz representa en informática una entidad (hard-
ware osoftware) que actúa como intermediario o conexión entre otras dos, por ejemplo, entre un usuario
y un programa. En una interfaz gráfica de usuario las capacidades del programa están representadas por
medio de símbolos gráficos (iconos) a los que se puede acceder por medio de algún dispositivo apunta-
Un sistema es un conjunto de entidades que interrelacionan para un fin común.
Sistemas basados en computador 13
6 Tanto hardware como software son palabras que el uso ha adoptado en nuestro idioma y en este texto se utilizan tal
cual.
dor (actualmente el ratón). La interfaz gráfica del sistema operativo Windows es un ejemplo típico. Des-
de el punto de vista del usuario la interfaz “es” el programa. Como una buena indicación de diseño tene-
mos que la interfaz debe estar separada de la parte funcional del programa, véase la Figura 1.5. Las
ventajas de esta organización son un mejor mantenimiento de las dos partes componentes del software
(son independientes, se pueden modificar por separado) y mayor reutilizabilidad de los elementos de la
interfaz y de la parte funcional (se pueden aprovechar con facilidad en nuevos desarrollos).
14 Introducción a la programación con orientación a objetos
Figura 1.5. Diagrama mostrando la interrelación entre el usuario y un sistema software
1.4. ARQUITECTURA CLÁSICA O DE VON NEUMANN DE UN COMPUTADOR
La estructura de un computador típico responde a una organización concreta. Básicamente se trata de
la organización definida por Babbage con algunas características adicionales. En la actualidad esta
organización o arquitectura típica se denomina arquitectura clásica o de von Neumann, dado el papel
que éste jugó en el desarrollo del EDVAC, donde por primera vez se conjugaban estos factores. La
arquitectura de von Neumann esencialmente incorpora las siguientes características:
— Uso de la estructura funcional ya determinada por Babbage:
* Unidad de entrada
* Unidad de salida
* Unidad de control
* Unidad aritmética (hoy aritmético-lógica)
* Memoria
— Utilización del sistema binario (el ENIAC, por ejemplo, usaba sistema decimal).
— Incorporación del concepto de programa almacenado en la memoria. Así, la memoria no sólo
almacena los datos, sino también las instrucciones necesarias para el procesamiento de los mis-
mos.
El esquema funcional de un ordenador estándar (basado en la arquitectura clásica) se muestra en
la Figura 1.6.
Obsérvese que la unidad aritmético-lógica y la unidad de control conforman básicamente la uni-
dad central de proceso o CPU (Central Processing Unit). Esta unidad suele estar físicamente construi-
da sobre un chip, también denominado microprocesador. Se considera el “cerebro” del ordenador.
Obsérvese también que la CPU y la memoria central o principal definen la unidad central (no de pro-
ceso, sino el ordenador central propiamente dicho) y que los demás dispositivos no. Estos otros dis-
positivos se denominan periféricos (aunque físicamente pueden estar dentro de la misma carcasa que
el ordenador o computador central). Comentemos los distintos componentes:
a) Entrada o unidad de entrada
Representa el dispositivo a través del cual se introducen los datos y las instrucciones. Ambos serán
almacenados en la memoria (central o secundaria). Los dispositivos de entrada pueden ser variados:
un teclado, un escáner, un lector de códigos de barras, etc. Puede haber más de uno conectado y fun-
cionando en un sistema.
b) Salida o unidad de salida
Es el dispositivo que muestra el resultado de la ejecución del programa en el ordenador. También
podemos tener distintos tipos de dispositivos como monitores, impresoras o plotters.
c) Memoria
Sirve para almacenar los datos y las instrucciones del programa (recordemos que nuestro modelo
almacena el programa en memoria). Tenemos dos tipos de memoria, la primera es la denominada
memoria central. Ésta está formada por circuitería electrónica y de rápido acceso, pero relativamente
pequeña. La memoria central se encuentra organizada en “posiciones de memoria” (grupos de un
tamaño concreto de bits). Cada posición está identificada por una “dirección” de memoria que permi-
te acceder a ella (para leer o para escribir). La dirección puede entenderse como un número de orden,
véase la Figura 1.7. Un dato puede necesitar más de una posición de memoria para su codificación.
La memoria se mide en bytes (8 bits). Como ésta es una unidad muy pequeña se usan múltiplos,
véase la Tabla 1.3.
La memoria central es de tipo RAM (Random Access Memory) lo que indica que se puede acce-
der directamente a cualquier posición de memoria sin pasar por las anteriores. La RAM es de lectura-
escritura, es decir, se puede leer la información almacenada allí y se puede escribir en ella. Otra carac-
terística es que es volátil, entendiendo por ello que la información sólo se mantiene mientras está
conectada (al cortar la corriente se pierde). El tamaño de la memoria central es de algunos cientos de
KB (128 ó 256 en compatibles PC) a algunos o muchos GB en sistemas de altas prestaciones. En un
ordenador existen también memorias de tipo ROM (Read Only Memory) que son permanentes, sólo
Sistemas basados en computador 15
Figura 1.6. Estructura funcional clásica de un computador
permiten la lectura y se usan para almacenar, por ejemplo, el programa de arranque de un ordenador
o las operaciones básicas de entrada y salida.
El segundo tipo de memoria es la denominada masiva, auxiliar o secundaria, mucho más lenta de
acceso que la memoria principal, pero de mucha mayor capacidad y permanente (no se pierde la infor-
mación al cortar la corriente). Se trata, fundamentalmente, de los discos duros, los disquetes o los CD-
ROM (almacenamiento óptico). Algunos de estos dispositivos son regrabables y otros, como los CD-
ROM tradicionales, son de sólo lectura, no permitiendo la regrabación. Normalmente los programas y
los datos se graban desde algún dispositivo de entrada en la memoria secundaria y desde ahí se cargan
en la memoria principal para la ejecución. La capacidad típica, en la actualidad, de los discos duros es
de varias decenas de GB en los compatibles PC.
En un ordenador es posible encontrar también cierta cantidad de la denominada memoria caché
(oculta en francés). Una memoria caché es similar a la RAM pero mucho más rápida que ella y se usa
como un elemento intermedio entre la CPU y la memoria central, véase la Figura 1.8.
Cuando la CPU necesita leer datos o instrucciones de la RAM primero mira si ya se encuentran en
la caché. Si están allí los toma de ella. Al ser la caché mucho más rápida que la RAM el proceso se
realiza en mucho menos tiempo. Si los datos o la instrucción no están en la caché, la CPU los lee de
la RAM y se guarda una copia en la caché para poder tomarla de allí si se vuelven a necesitar. El resul-
16 Introducción a la programación con orientación a objetos
Figura 1.7. Representación esquemática de la organización de la memoria de un ordenador
Tabla 1.3. Medidas de memoria
Figura 1.8. Interrelación entre la CPU y las memorias caché y RAM
Unidad Símbolo Valor (bytes)
kilobyte KB 210 (1024)
megabyte MB 220 (1024*1024)
gigabyte GB 230 (1024*1024*1024)
terabyte TB 240 (1024*1024*1024*1024)
tado de este proceso es una mejora en el rendimiento de la CPU. En un sistema moderno se dispone
de todos estos tipos de memoria.
d) Unidad aritmético-lógica o ALU (Arithmetic Logic Unit)
Es el conjunto de circuitos que permiten realizar las operaciones aritméticas y las operaciones lógicas
tales como las comparaciones o la aplicación del álgebra de Boole binaria. La ALU realiza su trabajo
usando la información contenida en unas posiciones de memoria internas a la CPU denominadas regis-
tros. Estos registros están especializados, existiendo registros de instrucciones (van almacenando las
instrucciones del programa) de uso general o el denominado contador de programa que almacena la
dirección de memoria en que se encuentra la siguiente instrucción del programa que se está ejecutando.
e) Unidad de control
Coordinalos distintos pasos del procesamiento. En esencia recibe señales (de estado) de las dis-
tintas unidades determinando su estado de funcionamiento. Capta de la memoria central las instruc-
ciones del programa una a una y va colocando los datos en los registros correspondientes haciendo que
las distintas unidades implicadas realicen sus tareas. El trabajo de la unidad de control está sincroni-
zado por un reloj interno, que oscila con una frecuencia dada. La velocidad de trabajo de la CPU vie-
ne determinada por la frecuencia del reloj. La frecuencia se mide en ciclos por segundo o Hertzios (Hz)
y la unidad que se usa es un múltiplo, el MegaHertzio (1 MHz5106 Hz). Las frecuencias actuales de
los microprocesadores son del orden de 1000-2000 MHz (1-2 GHz). La inversa de la frecuencia es el
período y nos da el tiempo que tarda en realizarse un ciclo.
La información entre la CPU y la memoria se transfiere como grupos de un cierto número de bits
que se pasan a la vez. Esto define la palabra y, el número de bits transferidos de una vez es la longi-
tud de la palabra. Ejemplos de longitud de palabra son 32 ó 64 bits. Como para referirnos a una posi-
ción de memoria usamos una palabra en la CPU, la longitud de palabra determina el máximo número
de posiciones que se pueden representar (2N donde N es la longitud de palabra). Se puede tener menos
memoria central que la que corresponde a ese valor pero no se puede tener más.
La CPU funciona siguiendo lo que se denomina ciclo de recuperación-descodificación-ejecución, véa-
se la Figura 1.9. El ciclo funciona de la siguiente forma. De la memoria central se recupera la siguiente
instrucción del programa buscando en la dirección indicada por el contador del programa. El contador se
incrementa para saber en el siguiente ciclo donde está la siguiente instrucción. La instrucción actual se des-
codifica para saber qué operación hay que realizar y la unidad de control activa los circuitos necesarios
para realizar la instrucción, la cual puede cargar un dato en un registro o sumar dos valores, por ejemplo.
Sistemas basados en computador 17
Figura 1.9. Ciclo de recuperación-descodificación-ejecución
1.5. REDES DE COMPUTADORES
Por su importancia actual es útil presentar, aunque sea informalmente en un texto introductorio como
éste, el concepto de red de computadores.
1.5.1. GENERALIDADES
Una red consiste en dos o más ordenadores conectados entre sí de forma que puedan compartir infor-
mación o recursos. En particular el intercambio de información ha devenido en una parte fundamen-
tal de la informática. La comunicación por correo electrónico, el intercambio de información técnica
y científica o la compartición de la información de los clientes de una empresa en diferentes sucursa-
les de la misma son ejemplos de la utilidad de las redes de computadores. A pesar de todo, en una red
cada ordenador tiene su individualidad propia, poseyendo algún tipo de información de identificación,
una dirección de red. Dentro de una red el o los ordenadores que ofrecen algún tipo de servicio a los
demás se denominan servidores, por ejemplo un servidor de ficheros o de impresora.
Para conectar computadoras en red podemos usar distintas topologías, por ejemplo:
a) Conexión punto a punto, véase la Figura 1.10 (a)
Ésta sería la solución más sencilla, con todos los ordenadores directamente conectados a todos los
demás. Lógicamente, esta técnica sólo es factible para unos pocos ordenadores que estén físicamente
próximos, basta con imaginar los problemas de cableado, ya que el número de conexiones entre N
ordenadores es de N(N-1)/2. Una solución mucho más elegante es la de línea compartida.
b) Línea compartida, véase la Figura 1.10 (b)
En este caso, sólo hay una línea de conexión a la que se van conectando los ordenadores. La conexión
es muy sencilla, pero un software de gestión de red debe controlar cómo se envía la información de
los diferentes usuarios. Actualmente la técnica utilizada es la denominada packet-switched (conmuta-
ción de paquetes). En esta aproximación el software de gestión de la red divide la información en par-
tes (paquetes) que se van enviando por turnos a lo largo de la línea. La ventaja es que el sistema es el
que se ocupa de la división en paquetes y del ensamblaje posterior de los mismos para generar la infor-
mación original. El sistema de paquetes permite que múltiples comunicaciones entre ordenadores pue-
dan producirse concurrentemente sobre una misma línea compartida. Para el usuario este proceso es
transparente, el software se ocupa de todo el trabajo.
Las redes basadas en paquetes que abarcan grandes distancias (de país a país, por ejemplo) son
diferentes de que las que cubren una pequeña distancia, como una habitación o un edificio. Para dis-
tinguir unas de otras se dividen las redes de computadores en dos tipos, LANs y WANs.
18 Introducción a la programación con orientación a objetos
Figura 1.10. Sistemas basados en computador
Una LAN es una red de área local (Local Area Network) que cubre una pequeña distancia y está
formada por un número pequeño de ordenadores. Una WAN es una red de área ancha o amplia (Wide
Area Network) que conecta dos o más LANs sobre grandes distancias. Una LAN pertenece normal-
mente a una sola organización pero las WANs suelen conectar LANs de grupos diferentes, incluso de
países distintos. En las LAN conectadas en una WANs un ordenador de cada LAN maneja las comu-
nicaciones sobre la WAN.
1.5.2. INTERNET
Internet es una WAN que abarca todo el mundo. El término Internet proviene de internetworking indi-
cando que es una red de redes. Internet permite la comunicación entre sistemas hardware y software
heterogéneos usando una serie de estándares de comunicación. Internet es descendiente de la ARPA-
NET, un sistema de red desarrollado en un proyecto del ARPA (Advanced Research Projects Agency)
de los EE.UU. La historia del desarrollo de Internet puede encontrarse en el excelente libro de Hafner
y Lyon (Hafner y Lyon, 1998).
El software que gestiona la comunicaciones en Internet se denomina TCP/IP (Transmission Con-
trol Protocol/ Internet Protocol). Son dos entidades separadas, cada una conteniendo muchos progra-
mas. Estas dos entidades podrían definirse de la forma siguiente (Comer, 1995):
a) IP
Se trata de un protocolo y no de un programa específico. Sus misiones son varias. Define el formato
de todos los datos sobre la red, también realiza el proceso de routing (direccionamiento en la red) esco-
giendo el camino por el que circularán los datos, y finalmente establece una serie de reglas indicando
cómo los ordenadores deben procesar los paquetes de datos, cómo y cuándo deben generarse mensa-
jes de error y las condiciones bajo las cuales se deben descartar paquetes.
b) TCP
Se trata también de un protocolo de comunicación y no de una pieza de software. La misión concreta
del TCP es difícil de definir en pocas palabras. El protocolo especifica el formato de los datos y los
reconocimientos que dos computadores deben intercambiar para obtener una transmisión fiable, así
como los procedimientos que los computadores usan para asegurarse de que los datos llegan correcta-
mente a su destino.
En Internet cada ordenador conectado se identifica con lo que se denomina una dirección IP. La
dirección IP identifica tanto al ordenador como a la red a la que está conectada. Dicho en otras pala-
bras, la dirección IP no identifica una máquina sino una conexión a una red. Nada impide sustituir un
ordenador por otro y mantener la dirección IP original. Las direcciones IP están formadas por 32 bits
organizados en cuatro grupos de ocho. Cada uno de esos grupos de ocho se expresa en decimal y se
separan unos de otros por un punto, por ejemplo:
167.55.44.11
Es normal que la dirección IP tenga asociado un nombre que se suele denominar dirección de Inter-
net como,
pepe.uclm.es
Sistemas basados en computador 19
La primera parte es el nombre asignado a ese ordenador en concreto (pepe en el ejemplo), la segun-
da parte es eldominio e indica la organización a la que pertenece (uclm.es en el ejemplo). La última
sección de cada nombre de dominio indica, normalmente, el tipo de organización:
.com: negocio comercial
.org: organización sin finalidad de lucro
.edu: institución educativa
o bien el país:
.es: España
.uk: Reino Unido
Cuando se usa una dirección de Internet ésta se traduce a dirección IP por un software denomina-
do DNS (Domain Name Service). Cada organización conectada a Internet tiene un servidor de domi-
nio con una lista de todos los ordenadores de esa organización y sus direcciones IP. Cuando se pide
una IP, si el servidor DNS no la tiene, contacta a través de Internet con otro servidor que sí la tenga.
1.5.3. LA WORLD-WIDE-WEB (WWW) 7
El web es una forma de intercambiar información a través de Internet. En el web se usan los concep-
tos de hipertexto e hipermedia que podemos definir de la forma siguiente:
Hipertexto: Una forma de texto no secuencial en la cual se siguen unos caminos o enlaces a través
del conjunto completo de documentos. El concepto no es nuevo, se encontraba ya pergeñado en algu-
nos documentos del proyecto Manhattan (el proyecto secreto de los EE.UU. destinado al desarrollo de
la bomba atómica). La idea es poder saltar entre la información del documento en forma no secuen-
cial.
Hipermedia: Es una generalización del concepto de hipertexto donde no sólo se incluye texto en
la secuencia no lineal de información sino también gráficos, audio, vídeo o programas.
Al web se accede a través de un programa especial, un navegador (browser) que presenta la infor-
mación hipermedia, y con el que se va accediendo a los distintos enlaces, links, para obtener la infor-
mación deseada. Lógicamente, los documentos en el web se identifican con algún tipo de nombre, aquí
denominado URL (Uniform Resource Locator), por ejemplo:
www.inf-cr.uclm.es
Con una URL se accede a una página web donde aparece la información fundamentalmente como
en una página impresa. Estas páginas están escritas usando un lenguaje estándar formalizado llamado
HTML (HyperText Markup Language 8). En la actualidad se está trabajando con versiones más sofis-
ticadas del HTML como el XML (Extensible Markup Language) (Bosak y Bray, 1999).
Por último, merece la pena indicar que el lenguaje de programación Java (lenguaje que vamos a
usar para implementar todos los ejemplos de programación en este texto) ha sido diseñado con la capa-
cidad de interacción a través de Internet y, en particular, para poder generar aplicaciones que se eje-
cuten a través de una página web. La técnica para ello es simple. Al solicitar la ejecución del programa
20 Introducción a la programación con orientación a objetos
7 World Wide Web significa literalmente red (o telaraña) de alcance mundial. Normalmente se conoce por las iniciales
www e incluso como w3 o “w cubo”.
8 HTML puede traducirse como lenguaje de marcas para hipertexto.
a través de la página web, pinchando en el correspondiente enlace con el ratón, una versión del pro-
grama se copia a la máquina del usuario donde se ejecuta de forma local. Los navegadores actuales
incorporan un intérprete de bytecode de Java 9 para poder ejecutar estos programas o Applets.
EJERCICIOS PROPUESTOS
Ejercicio 1.* ¿Cuál es la diferencia entre datos e información?
Ejercicio 2.* ¿Cómo se almacena la información en los ordenadores, con repre-
sentación analógica o digital?
Ejercicio 3.* ¿Qué diferencias existen entre el código ASCII y el UNICODE?
Ejercicio 4.* ¿Cuántos caracteres se podrían representar con 12 bits?
Ejercicio 5.* ¿Por qué unidades está formada la CPU?
Ejercicio 6.* ¿Cuántos bytes son un GB (gigabyte)?
Ejercicio 7.* ¿Qué características tiene la memoria RAM?
Ejercicio 8.* ¿Qué es la memoria caché?
Ejercicio 9.* ¿Qué tipología de conexión se suele usar actualmente para conec-
tar varios ordenadores en red?
Ejercicio 10.* ¿Cómo se denomina el software que gestiona las comunicaciones
en Internet?
REFERENCIAS
BOSAK, J. y BRAY, T.: “XML and the Second-Generation Web”, Scientific American, 79-83, May 1999.
CERUZZI, P. E.: A History of Modern Computing, The MIT Press, 1999.
COMER, D. E.: Internetworking with TCP/IP. Volume I, Third Edition, Prentice-Hall, 1995.
DEMIDOVICH, B. P. y MARON, I. A.: Cálculo Numérico Fundamental, Paraninfo, 1977.
GIBSON, W. y STERLING, B.: The Difference Engine, Orion paperback, 1996.
HAFNER, K. y LYON, M.: Where wizards stay up late. The origins of the internet, Touchstone, 1998.
KIM, E. E. y TOOLE, B. A.: “Ada and the First Computer”, Scientific American, 66-71, May 1999.
KOPCHENOVA, N. V. y MARON, I. A.: Computational Mathematics, MIR Publishers, Moscow, Fourth printing,
1987.
WILLIAMS, M. R.: A history of computing technology, Second edition, IEEE Computer Society Press, 2000.
Sistemas basados en computador 21
9 El concepto de traductor e intérprete y de bytecode de Java se expondrá en el Capítulo 2.
2
Elementos de
programación y lenguajes
2.1. Introducción
2.2. Concepto de programa
2.3. Lenguajes de programación
2.4. Sintaxis y semántica
2.5. Estructura de un programa
2.6. Errores de un programa
2.7. Algoritmos
2.8. Ingeniería del software
2.8.1. Concepto de Ingeniería del softwa-
re
2.8.2. Ciclo de vida del software
Sumario
2.1. INTRODUCCIÓN
En este capítulo se introducen algunos conceptos fundamentales relativos a la programación y a los
lenguajes de programación. Además, se presentan los conceptos básicos necesarios para el desarrollo
de programas. Se introducen también los diferentes tipos de lenguajes de programación y sus diferen-
cias. En el apartado 2.4 se describen los conceptos fundamentales de sintaxis y semántica, que ayuda-
ran al lector a comprender la diferencia entre la forma de un programa y las tareas que realiza.
Seguidamente, se presentará la estructura general de un programa y los tipos de errores que se pueden
cometer al implementarlo. De esta forma se pretende dotar al lector desde el principio de una visión
de conjunto relativa al problema de la programación. Dada la importancia del concepto de algoritmo,
este capítulo le dedica una sección donde, además de definirlo, se describen las técnicas utilizadas para
su evaluación. No queremos concluir sin introducir el concepto de Ingeniería del Software, mostran-
do al lector que el desarrollo de software es una actividad profesional, racionalizada, que va más allá
de la simple generación de líneas de código en un lenguaje dado.
2.2. CONCEPTO DE PROGRAMA
La primera pregunta que podríamos plantear al introducir el problema de la programación, entendi-
da como el desarrollo de programas, sería ¿qué es un programa? Podemos definir un programa como
una serie de instrucciones que indican de forma precisa y exacta al computador qué tiene que hacer
(Kamin et al., 1998). El programa es el medio de comunicación con el computador. Por medio de él
conseguimos que la máquina utilice sus capacidades para resolver un problema que nos interesa. Este
punto de vista es importante. Un computador se puede entender como una máquina virtual, capaz de
realizar una serie de tareas genéricas pero no concretada hacia ninguna tarea específica. Es siempre
necesario un programa, que usando un lenguaje inteligible por la máquina, le indique qué tiene que
hacer. Para ello, como veremos más adelante, es necesario saber qué queremos indicar al computa-
dor y cómo hacerlo.
En cierto sentido, un programa modela algo (Arnow y Weis, 1998). Entendemos por modelo una
representación simplificada de un problema. El modelo considera las características relevantes del pro-
blema y las representa en el computador. La ciencia y el arte de la programación consisten en saber
construir un modelo de solución para un problema dado y en indicar una serie de instrucciones que
permitan describir dicho modelo al computador.
Como ejemplo de programa veamos un caso sencillo en Java (Programa 2.1).
Programa 2.1. Ejemplo de programa en Java
// Imprime un refrán
class Refran {
public static void main(String[] args) {
System.out.println(“Dondefueres haz lo que vieres”);
} // Fin método main
} // Fin class Refran
Cuando el programa se ejecute imprimirá la siguiente línea de texto:
Donde fueres haz lo que vieres
El Programa 2.1 está formado por varios elementos: 
24 Introducción a la programación con orientación a objetos
a) Un comentario (en la primera línea) que indica para qué sirve el programa.
b) Llaves, que se utilizan para definir bloques.
c) Definición de una clase, a partir de la segunda línea (en los Capítulos 5 y 7 se trata el concepto
de clase).
d) Una instrucción, en la cuarta línea. Esta sentencia indica lo que hay que hacer, en este caso
escribir una frase por pantalla.
Como podemos apreciar, es necesario indicar las instrucciones al computador usando un lenguaje
determinado (en el ejemplo anterior Java). Sin embargo, no existe un único lenguaje sino que hay
muchos que se han ido desarrollando a lo largo del tiempo y que pueden ser clasificados en varios tipos
estándar.
2.3. LENGUAJES DE PROGRAMACIÓN
La comunicación con el computador se realiza utilizando un lenguaje determinado, un lenguaje de pro-
gramación. Existen distintos tipos de lenguajes de programación y, dentro de cada tipo, diferentes len-
guajes. Estos tipos pueden definirse desde diferentes puntos de vista. Una clasificación típica agrupa
los lenguajes según su nivel de abstracción operativa. Esto implica que sea necesario detallar más o
menos las operaciones a realizar para desarrollar una tarea concreta. Cuanto menos haya que indicar
al ordenador, de mayor nivel se considera el lenguaje. La clasificación a la que estamos haciendo refe-
rencia es la siguiente:
a) Lenguaje máquina
b) Lenguaje ensamblador
c) Lenguajes de alto nivel
d) Lenguajes de cuarta generación
Vamos a comentar cada uno de los tipos de lenguajes de menor a mayor nivel de abstracción:
a) Lenguaje máquina
Es el lenguaje nativo de una CPU. Las instrucciones de este lenguaje se indican en binario. El código
se expresa como una serie de dígitos binarios y es muy difícil para los humanos leerlo y escribirlo,
aunque antiguamente se hacía. Hay un lenguaje máquina por cada tipo diferente de CPU. No podemos
por lo tanto hablar del lenguaje máquina, sino siempre de un lenguaje máquina determinado. Todo pro-
grama debe, en última instancia, ser traducido al lenguaje máquina del ordenador sobre el que se va a
ejecutar.
b) Lenguaje ensamblador
Corresponde a un mayor nivel de abstracción que los lenguajes máquina. Un ensamblador utiliza
símbolos mnemotécnicos, palabras cortas, para hacer referencia a las instrucciones o datos del len-
guaje máquina, en lugar de usar los dígitos binarios directamente. Para ejecutar un programa escri-
to en ensamblador es necesario convertir el programa a lenguaje máquina. Un lenguaje
ensamblador corresponde a un determinado lenguaje máquina, por lo tanto no hay un solo lengua-
je ensamblador.
Estos dos lenguajes se consideran de bajo nivel de abstracción operativa.
Elementos de programación y lenguajes 25
c) Lenguajes de alto nivel (a veces llamados de tercera generación)
Se caracterizan porque son independientes de la máquina en la que se usan (generalmente, en la prác-
tica los fabricantes suelen proveer estos lenguajes con algunas capacidades específicas para máquinas
concretas). Estos lenguajes no hacen referencia al funcionamiento de la CPU, sino a tareas más orien-
tadas al usuario (sumar, restar o multiplicar dos números, por ejemplo). Usan instrucciones que se ase-
mejan al lenguaje ordinario. Cada una de las instrucciones en uno de estos lenguajes equivale
normalmente a varias a nivel de máquina. Como en el caso del ensamblador, es necesario convertir el
programa a lenguaje máquina. A tal efecto existen programas que realizan la traducción, por lo que el
programador sólo tiene que preocuparse del trabajo de escribir su programa en el lenguaje deseado. En
principio, un programa escrito en uno de estos lenguajes puede ejecutarse sobre cualquier ordenador.
Ejemplo de esos lenguajes son: Fortran, Cobol, Pascal, C o Java.
d) Lenguajes de cuarta generación
Son lenguajes que trabajan a mayor nivel de abstracción. Suelen incorporan capacidades para la gene-
ración de informes o interaccionar con bases de datos. Se denominan de cuarta generación, 4GL
(fourth generation languages).
Existe otra clasificación de los lenguajes de programación que se basa en el estilo de programa-
ción y que clasifica los lenguajes en,
a) Lenguajes imperativos o procedimentales
b) Lenguajes declarativos
a) Lenguajes imperativos o procedimentales
Son lenguajes basados en la asignación de valores. Se fundamentan en la utilización de variables para
almacenar valores y en la realización de operaciones con esos valores.
b) Lenguajes declarativos
Describen estructuras de datos y las relaciones entre ellas necesarias para una determinada tarea, indicando
también cuál es el objetivo de la tarea. El programador no indica el procedimiento (el algoritmo) para rea-
lizar la tarea. Hay dos tipos de lenguajes declarativos:
b.1. Lenguajes funcionales. Basados en la definición de funciones, como LISP.
b.2. Lenguajes de programación lógica. Basados en la definición de predicados (relaciones lógi-
cas entre dos o más elementos) como PROLOG.
Tanto si se usa un tipo de lenguaje u otro, al final el ordenador siempre lo traduce a lenguaje
máquina, pues éste es el único lenguaje que reconoce. El proceso de traducción puede realizarse de
diversas formas. Según el método que se use para llevar a cabo la traducción se habla de lenguajes
compilados o lenguajes interpretados.
a) Lenguajes compilados
Estos lenguajes realizan una traducción completa del programa a lenguaje máquina (compilación del
programa). Normalmente el proceso se realiza en dos etapas. En la primera, la compilación, el código
que hemos escrito, denominado código fuente, se traduce a lo que se denomina código objeto que aún
26 Introducción a la programación con orientación a objetos
1 “Librería” es una mala traducción del término inglés library que significa biblioteca. Este término es muy común en
informática.
no es ejecutable. Para serlo, este código objeto debe enlazarse con los métodos, funciones o procedi-
mientos predefinidos en el lenguaje, y que se encuentran en librerías 1 externas. En el segundo paso
denominado de enlazado (“linkado” 2) se incorporan estas funciones, métodos o procedimientos y el
resultado es un programa “ejecutable”, es decir, un programa en lenguaje máquina que puede funcio-
nar, bajo una CPU determinada, veáse la Figura 2.1.
Elementos de programación y lenguajes 27
2 Se trata de una traducción incorrecta del inglés linking que significa literalmente enlazar. Como el de librería, el tér-
mino está muy extendido en el campo informático.
3 En la actualidad se están desarrollando CPU’s que usan el bytecode como lenguaje nativo.
Figura 2.1. Procesos de compilación y enlazado (“linkado”)
b) Lenguajes interpretados
El código que se ha escrito, código fuente, se va leyendo poco a poco y va traduciéndose y ejecutándo-
se según se traduce. Aquí no hay una traducción completa, no generamos un programa directamente eje-
cutable. Por eso, tradicionalmente, los lenguajes interpretados son menos eficientes que los compilados.
En particular, el lenguaje Java aplica una aproximación intermedia entre estas dos. Existe una
“compilación” inicial donde el compilador de Java traduce el código fuente a bytecode, el cual es
una representación de programa a bajo nivel. El bytecode no es el lenguaje máquina de ninguna
CPU. El bytecode sería el código máquina de una hipotética CPU que hoy por hoy no existe física-
mente 3. En este contexto se dice que el bytecode se ejecuta sobre una máquina virtual. Tras la com-
pilación, el bytecode se interpreta. El intérprete de JAVA lo lee y lo ejecuta en una máquina
concreta. El bytecode es estándar y no depende de ninguna CPU. La idea es que pueda ejecutarse en
cualquier máquina. Interpretar el bytecode es más rápido que interpretar directamente el códigofuente, puesto que el bytecode está más próximo al lenguaje máquina que el fuente original. El byte-
code es transportable de máquina a máquina, aunque debe haber para cada tipo de procesador un
intérprete de bytecode para poder ejecutar los programas. De forma esquemática tendríamos el dia-
grama de la Figura 2.2. En él, se muestra un bucle en el proceso de interpretación, indicando que es
un proceso iterativo donde se lee una sección del bytecode y se ejecuta, repitiéndose el proceso has-
ta finalizar todo el bytecode.
2.4. SINTAXIS Y SEMÁNTICA
Estos dos conceptos subyacen en todo lenguaje de programación correspondiendo al qué puede hacer
el lenguaje de programación y al cómo indicar que lo haga. Veamos una definición formal. Según el
Diccionario de Uso del Español de María Moliner:
Desde el punto de vista de un lenguaje de programación conocer las reglas sintácticas del lengua-
je implica conocer cómo se usan las sentencias, declaraciones y los otros constructores del lenguaje.
La semántica de un lenguaje de programación representa el significado de los distintos constructores
sintácticos (Pratt y Zelkowitz, 1996). Las reglas de sintaxis de un lenguaje de programación dictan la
forma de un programa. Durante la compilación de un programa, se comprueban todas las reglas de sin-
taxis. La semántica dicta el significado de las sentencias del programa. La semántica define qué suce-
derá cuando una sentencia se ejecute. Dicho de otra forma, saber qué se puede decir en un lenguaje
hace referencia a la componente semántica. Por otro lado, saber cómo hay que decir en un lenguaje lo
que queremos se refiere a la componente sintáctica. En cierto sentido la sintaxis es el continente y la
semántica el contenido. Hay que tener muy en cuenta que un programa que sea sintácticamente correc-
to no tiene por qué serlo semánticamente. Un programa siempre hará lo que le digamos que haga y no
lo que queríamos decirle que hiciera.
2.5. ESTRUCTURA DE UN PROGRAMA
En este texto nos vamos a centrar en la programación desde el punto de vista de los lenguajes imperati-
vos. Desde este punto de vista, consideremos la estructura genérica de un programa. Esto nos propor-
cionará un esquema general que nos servirá para irnos introduciendo en la disciplina de la programación.
Lo primero que debemos indicar es que un programa siempre realiza una o varias tareas. Para
poder llevarlas a cabo se necesita uno o varios algoritmos. El concepto de algoritmo se trata en deta-
lle más adelante en este capítulo, de momento baste saber que un algoritmo puede definirse como:
Semántica: Es el estudio del significado de las unidades lingüísticas.
Sintaxis: Es la manera de enlazarse y ordenarse las palabras en la oración o las oraciones 
en el período.
28 Introducción a la programación con orientación a objetos
Figura 2.2. Proceso de compilación e interpretación en Java
Tengamos claro que un programa implica usar uno o varios algoritmos. En cualquier caso, usan-
do un diagrama de bloques, la estructura genérica de un programa sería la que se muestra en la Figu-
Un conjunto finito, ordenado de reglas o instrucciones bien definidas, tal que siguiéndolas 
paso a paso se obtiene la solución a un problema dado.
Elementos de programación y lenguajes 29
Figura 2.3. Estructura genérica de un programa
ra 2.3.
Todo programa acepta información de entrada (los datos) y la procesa por medio de un/os algorit-
mo/s. El resultado constituye la información de salida que es la que vamos buscando. Por lo que res-
pecta a la parte de procesamiento, ésta debe considerarse en el contexto de los conceptos de eficacia y
eficiencia. Estos dos conceptos son importantes y deben ser claramente distinguidos por el programa-
dor. Eficacia se refiere a la consecución de los objetivos deseados, es decir, que el programa funcione.
Eficiencia se refiere a la consecución de los objetivos con un adecuado consumo de recursos (tiempo,
memoria central o de disco), es decir, que el programa funcione bien. En el terreno de la programación,
el objetivo no es sólo que el programa funcione, sino que funcione y además consuma pocos recursos.
Un programa no es bueno sólo por funcionar, eso es lo mínimo exigible. Se parte de que un programa
debe funcionar. Un programa es bueno o no en función del consumo de recursos que haga.
Por lo que respecta a un programa cualquiera, con sus componentes de entrada-procesamiento-
salida, podemos organizarlo como un solo bloque monolítico de código o modularizarlo (subdividir-
lo) en varios bloques más pequeños. Esta modularización se realizará, en nuestro contexto, desde un
punto de vista funcional, como veremos en el Capítulo 5. Dicho de otra forma, nos vamos a centrar
en las tareas o funciones que el programa debe desarrollar, véase la Figura 2.4.
En un programa monolítico sólo tendríamos un bloque, un solo programa principal (muchas veces
Figura 2.4. Tipos de programas
denominado en inglés como main). Un programa modular se subdivide en función de las tareas a rea-
lizar. Cada uno de los bloques funcionales sería una unidad, una especie de programa principal que se
comunica con los bloques que necesite para tomar o enviar información. En la Figura 2.4 las flechas
indican el sentido de movimiento de la información. El programa principal es siempre el bloque que
comienza a ejecutarse al arrancar el programa. En un programa monolítico no habría ningún otro blo-
que de código, y en un programa modular existiría un modulo principal, a partir del cual se irían lla-
30 Introducción a la programación con orientación a objetos
4 El concepto de método se presentará en detalle en el Capítulo 5. Los conceptos interrelacionados de clase y objeto se
introducirán formalmente en el Capítulo 5 y se considerarán en el Capítulo 7.
Figura 2.5. Delimitación del programa principal en Java
mando los otros bloques funcionales.
En particular en Java el programa o sección principal, es el que permite que el programa comien-
ce a funcionar y se define, delimitado por llaves, como un método denominado main dentro de una
clase 4 como en el ejemplo del programa refrán, véase la Figura 2.5.
En orientación a objetos la clase es la “unidad” elemental de organización y las tareas que deba
realizar se definen en ella por medio de los denominados métodos. De momento no entraremos en
detalles sobre clases y métodos.
En un programa tenemos una serie de instrucciones, denominadas sentencias. Éstas pueden eje-
cutarse de dos formas: secuencialmente (se van ejecutando una detrás de otra), o de manera no line-
Figura 2.6. Secuencia de ejecución de instrucciones o flujo lógico de un programa
al, véase la Figura 2.6. Cuando la ejecución es no lineal debe existir algún mecanismo (a fin de cuen-
tas una condición que se cumpla o no) que permita que se realice o no la bifurcación. Las bifurcacio-
nes no tienen por qué seguir el orden secuencial, es decir, puede ramificarse de arriba abajo o de abajo
arriba produciendo ciclos o bucles. Estos conceptos se expondrán con más detalle en los Capítulos 3
y 4.
2.6 ERRORES DE UN PROGRAMA
Al escribir un programa siempre se producen errores. Uno de los puntos clave en el proceso de desa-
rrollo de software es la depuración de los errores de un programa. Los errores de programación se pue-
den clasificar en distintos tipos y abordar su eliminación con un proceso sistemático de corrección.
Algunos errores los detecta el compilador, otros los debe encontrar el propio programador. La clasifi-
cación usada organiza los errores en tres tipos:
a) Errores de compilación. Este tipo de errores son detectados por el compilador. Son errores de
compilación los errores de sintaxis o el uso en el programa de tipos de datos incompatibles,
tal como pretender almacenar un valor real en una variable entera.
b) Errores en tiempo de ejecución. Aunque el programa compile bien puede dar error al ejecu-
tarlo, por ejemplo por intentar dividir por cero. En este caso el programa puede que estuviera
bien escrito, pero al adquirir la variable

Continuar navegando